diff options
author | mav <mav@FreeBSD.org> | 2010-07-25 15:43:52 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2010-07-25 15:43:52 +0000 |
commit | 68b26f66494feb7f028f26e91a6756e69b2ba395 (patch) | |
tree | 17a1e011d37cb64ccedab6ec54cdbac15a501c84 /sys/cam | |
parent | e67ee04556273868e17fd2c1a6791f8246d0a48f (diff) | |
download | FreeBSD-src-68b26f66494feb7f028f26e91a6756e69b2ba395.zip FreeBSD-src-68b26f66494feb7f028f26e91a6756e69b2ba395.tar.gz |
Export PCI IDs of ATA/SATA controllers through CAM and ata(4) layers to
GEOM. This information needed for proper soft-RAID's on-disk metadata
reading and writing.
Diffstat (limited to 'sys/cam')
-rw-r--r-- | sys/cam/ata/ata_da.c | 4 | ||||
-rw-r--r-- | sys/cam/cam_ccb.h | 4 | ||||
-rw-r--r-- | sys/cam/scsi/scsi_cd.c | 4 | ||||
-rw-r--r-- | sys/cam/scsi/scsi_da.c | 4 |
4 files changed, 16 insertions, 0 deletions
diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c index 08d32c3..3968026 100644 --- a/sys/cam/ata/ata_da.c +++ b/sys/cam/ata/ata_da.c @@ -734,6 +734,10 @@ adaregister(struct cam_periph *periph, void *arg) softc->disk->d_flags |= DISKFLAG_CANDELETE; strlcpy(softc->disk->d_ident, cgd->serial_num, MIN(sizeof(softc->disk->d_ident), cgd->serial_num_len + 1)); + softc->disk->d_hba_vendor = cpi.hba_vendor; + softc->disk->d_hba_device = cpi.hba_device; + softc->disk->d_hba_subvendor = cpi.hba_subvendor; + softc->disk->d_hba_subdevice = cpi.hba_subdevice; softc->disk->d_sectorsize = softc->params.secsize; softc->disk->d_mediasize = (off_t)softc->params.sectors * diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h index 73ddb33..bbb5069 100644 --- a/sys/cam/cam_ccb.h +++ b/sys/cam/cam_ccb.h @@ -596,6 +596,10 @@ struct ccb_pathinq { char ccb_pathinq_settings_opaque[PATHINQ_SETTINGS_SIZE]; } xport_specific; u_int maxio; /* Max supported I/O size, in bytes. */ + u_int16_t hba_vendor; /* HBA vendor ID */ + u_int16_t hba_device; /* HBA device ID */ + u_int16_t hba_subvendor; /* HBA subvendor ID */ + u_int16_t hba_subdevice; /* HBA subdevice ID */ }; /* Path Statistics CCB */ diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c index 76ef3bd..6a73efb 100644 --- a/sys/cam/scsi/scsi_cd.c +++ b/sys/cam/scsi/scsi_cd.c @@ -733,6 +733,10 @@ cdregister(struct cam_periph *periph, void *arg) else softc->disk->d_maxsize = cpi.maxio; softc->disk->d_flags = 0; + softc->disk->d_hba_vendor = cpi.hba_vendor; + softc->disk->d_hba_device = cpi.hba_device; + softc->disk->d_hba_subvendor = cpi.hba_subvendor; + softc->disk->d_hba_subdevice = cpi.hba_subdevice; disk_create(softc->disk, DISK_VERSION); cam_periph_lock(periph); diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index 7095eeb..8f64361 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -1310,6 +1310,10 @@ daregister(struct cam_periph *periph, void *arg) softc->disk->d_flags |= DISKFLAG_CANFLUSHCACHE; strlcpy(softc->disk->d_ident, cgd->serial_num, MIN(sizeof(softc->disk->d_ident), cgd->serial_num_len + 1)); + softc->disk->d_hba_vendor = cpi.hba_vendor; + softc->disk->d_hba_device = cpi.hba_device; + softc->disk->d_hba_subvendor = cpi.hba_subvendor; + softc->disk->d_hba_subdevice = cpi.hba_subdevice; disk_create(softc->disk, DISK_VERSION); mtx_lock(periph->sim->mtx); |