Module Name: src Committed By: jmcneill Date: Sat Sep 27 18:16:56 UTC 2014
Modified Files: src/sys/dev/ic: mpt_netbsd.c Log Message: include vendor/product/rev info for volumes and their disks To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/dev/ic/mpt_netbsd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ic/mpt_netbsd.c diff -u src/sys/dev/ic/mpt_netbsd.c:1.27 src/sys/dev/ic/mpt_netbsd.c:1.28 --- src/sys/dev/ic/mpt_netbsd.c:1.27 Sat Sep 27 17:40:54 2014 +++ src/sys/dev/ic/mpt_netbsd.c Sat Sep 27 18:16:56 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: mpt_netbsd.c,v 1.27 2014/09/27 17:40:54 jmcneill Exp $ */ +/* $NetBSD: mpt_netbsd.c,v 1.28 2014/09/27 18:16:56 jmcneill Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mpt_netbsd.c,v 1.27 2014/09/27 17:40:54 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mpt_netbsd.c,v 1.28 2014/09/27 18:16:56 jmcneill Exp $"); #include "bio.h" @@ -1779,6 +1779,8 @@ mpt_bio_ioctl_vol(mpt_softc_t *mpt, stru fCONFIG_PAGE_IOC_2_RAID_VOL *ioc2rvol; fCONFIG_PAGE_RAID_VOL_0 *rvol0 = NULL; struct scsipi_periph *periph; + struct scsipi_inquiry_data inqbuf; + char vendor[9], product[17], revision[5]; int address; ioc2 = mpt_get_cfg_page_ioc2(mpt); @@ -1795,14 +1797,32 @@ mpt_bio_ioctl_vol(mpt_softc_t *mpt, stru if (rvol0 == NULL) goto fail; + bv->bv_dev[0] = '\0'; + bv->bv_vendor[0] = '\0'; + periph = scsipi_lookup_periph(&mpt->sc_channel, ioc2rvol->VolumeBus, 0); - if (periph != NULL && periph->periph_dev != NULL) { + if (periph != NULL) { + if (periph->periph_dev != NULL) { + snprintf(bv->bv_dev, sizeof(bv->bv_dev), "%s", + device_xname(periph->periph_dev)); + } + memset(&inqbuf, 0, sizeof(inqbuf)); + if (scsipi_inquire(periph, &inqbuf, + XS_CTL_DISCOVERY | XS_CTL_SILENT) == 0) { + scsipi_strvis(vendor, sizeof(vendor), + inqbuf.vendor, sizeof(inqbuf.vendor)); + scsipi_strvis(product, sizeof(product), + inqbuf.product, sizeof(inqbuf.product)); + scsipi_strvis(revision, sizeof(revision), + inqbuf.revision, sizeof(inqbuf.revision)); + + snprintf(bv->bv_vendor, sizeof(bv->bv_vendor), + "%s %s %s", vendor, product, revision); + } + snprintf(bv->bv_dev, sizeof(bv->bv_dev), "%s", device_xname(periph->periph_dev)); - } else { - bv->bv_dev[0] = '\0'; } - /* TODO: bv->bv_vendor */ bv->bv_nodisk = rvol0->NumPhysDisks; bv->bv_size = (uint64_t)rvol0->MaxLBA * 512; bv->bv_stripe_size = rvol0->StripeSize; @@ -1855,6 +1875,7 @@ mpt_bio_ioctl_disk(mpt_softc_t *mpt, str fCONFIG_PAGE_RAID_VOL_0 *rvol0 = NULL; fCONFIG_PAGE_IOC_2_RAID_VOL *ioc2rvol; fCONFIG_PAGE_RAID_PHYS_DISK_0 *phys = NULL; + char vendor_id[9], product_id[17], product_rev_level[5]; int address; ioc2 = mpt_get_cfg_page_ioc2(mpt); @@ -1880,14 +1901,22 @@ mpt_bio_ioctl_disk(mpt_softc_t *mpt, str if (phys == NULL) goto fail; + scsipi_strvis(vendor_id, sizeof(vendor_id), + phys->InquiryData.VendorID, sizeof(phys->InquiryData.VendorID)); + scsipi_strvis(product_id, sizeof(product_id), + phys->InquiryData.ProductID, sizeof(phys->InquiryData.ProductID)); + scsipi_strvis(product_rev_level, sizeof(product_rev_level), + phys->InquiryData.ProductRevLevel, + sizeof(phys->InquiryData.ProductRevLevel)); + + snprintf(bd->bd_vendor, sizeof(bd->bd_vendor), "%s %s %s", + vendor_id, product_id, product_rev_level); + strlcpy(bd->bd_serial, phys->InquiryData.Info, sizeof(bd->bd_serial)); + bd->bd_procdev[0] = '\0'; bd->bd_channel = phys->PhysDiskBus; bd->bd_target = phys->PhysDiskID; bd->bd_lun = 0; bd->bd_size = (uint64_t)phys->MaxLBA * 512; - strlcpy(bd->bd_vendor, phys->InquiryData.VendorID, - min(sizeof(bd->bd_vendor), sizeof(phys->InquiryData.VendorID))); - strlcpy(bd->bd_serial, phys->InquiryData.Info, sizeof(bd->bd_serial)); - bd->bd_procdev[0] = '\0'; switch (phys->PhysDiskStatus.State) { case MPI_PHYSDISK0_STATUS_ONLINE: