summaryrefslogtreecommitdiffstats
path: root/sys/dev/mvs
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2010-07-25 15:43:52 +0000
committermav <mav@FreeBSD.org>2010-07-25 15:43:52 +0000
commit68b26f66494feb7f028f26e91a6756e69b2ba395 (patch)
tree17a1e011d37cb64ccedab6ec54cdbac15a501c84 /sys/dev/mvs
parente67ee04556273868e17fd2c1a6791f8246d0a48f (diff)
downloadFreeBSD-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/dev/mvs')
-rw-r--r--sys/dev/mvs/mvs.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/mvs/mvs.c b/sys/dev/mvs/mvs.c
index a7800ec..6b08222 100644
--- a/sys/dev/mvs/mvs.c
+++ b/sys/dev/mvs/mvs.c
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include <machine/resource.h>
#include <machine/bus.h>
#include <sys/rman.h>
+#include <dev/pci/pcivar.h>
#include "mvs.h"
#include <cam/cam.h>
@@ -2017,7 +2018,7 @@ mvs_check_ids(device_t dev, union ccb *ccb)
static void
mvsaction(struct cam_sim *sim, union ccb *ccb)
{
- device_t dev;
+ device_t dev, parent;
struct mvs_channel *ch;
CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("mvsaction func_code=%x\n",
@@ -2152,6 +2153,7 @@ mvsaction(struct cam_sim *sim, union ccb *ccb)
{
struct ccb_pathinq *cpi = &ccb->cpi;
+ parent = device_get_parent(dev);
cpi->version_num = 1; /* XXX??? */
cpi->hba_inquiry = PI_SDTR_ABLE;
if (!(ch->quirks & MVS_Q_GENI)) {
@@ -2180,6 +2182,12 @@ mvsaction(struct cam_sim *sim, union ccb *ccb)
cpi->protocol = PROTO_ATA;
cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;
cpi->maxio = MAXPHYS;
+ if ((ch->quirks & MVS_Q_SOC) == 0) {
+ cpi->hba_vendor = pci_get_vendor(parent);
+ cpi->hba_device = pci_get_device(parent);
+ cpi->hba_subvendor = pci_get_subvendor(parent);
+ cpi->hba_subdevice = pci_get_subdevice(parent);
+ }
cpi->ccb_h.status = CAM_REQ_CMP;
break;
}
OpenPOWER on IntegriCloud