diff options
author | jimharris <jimharris@FreeBSD.org> | 2012-09-19 16:21:23 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2012-09-19 16:21:23 +0000 |
commit | 013f2062be82f210234b55883b3ddbdb0870aa55 (patch) | |
tree | 641eebb84d94efb29e44f69eab38815146d840b1 | |
parent | 13681004dd325c4c4029473cb3c92da7080dede8 (diff) | |
download | FreeBSD-src-013f2062be82f210234b55883b3ddbdb0870aa55.zip FreeBSD-src-013f2062be82f210234b55883b3ddbdb0870aa55.tar.gz |
Report nvme(4) as a generic driver for NVMe devices if PCI class, subclass
and programming interface codes match.
Sponsored by: Intel
-rw-r--r-- | sys/dev/nvme/nvme.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c index f7f925d..d17056e 100644 --- a/sys/dev/nvme/nvme.c +++ b/sys/dev/nvme/nvme.c @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include <sys/conf.h> #include <sys/module.h> +#include <dev/pci/pcireg.h> #include <dev/pci/pcivar.h> #include "nvme_private.h" @@ -82,17 +83,29 @@ static struct _pcsid static int nvme_probe (device_t device) { - u_int32_t type = pci_get_devid(device); - struct _pcsid *ep = pci_ids; + struct _pcsid *ep; + int probe_val = ENXIO; + u_int32_t type; + + type = pci_get_devid(device); + ep = pci_ids; + +#if defined(PCIS_STORAGE_NVM) + if (pci_get_class(device) == PCIC_STORAGE && + pci_get_subclass(device) == PCIS_STORAGE_NVM && + pci_get_progif(device) == PCIP_STORAGE_NVM_ENTERPRISE_NVMHCI_1_0) + probe_val = BUS_PROBE_GENERIC; +#endif while (ep->type && ep->type != type) ++ep; if (ep->desc) { device_set_desc(device, ep->desc); - return (BUS_PROBE_DEFAULT); - } else - return (ENXIO); + probe_val = BUS_PROBE_DEFAULT; + } + + return (probe_val); } static void |