diff --git a/sys/cam/nvme/nvme_da.c b/sys/cam/nvme/nvme_da.c --- a/sys/cam/nvme/nvme_da.c +++ b/sys/cam/nvme/nvme_da.c @@ -48,6 +48,7 @@ #include #include #include +#include #endif /* _KERNEL */ #ifndef _KERNEL @@ -653,6 +654,7 @@ switch (code) { case AC_FOUND_DEVICE: { + struct ccb_pathinq cpi; struct ccb_getdev *cgd; cam_status status; @@ -663,6 +665,18 @@ if (cgd->protocol != PROTO_NVME) break; + /* + * For PCIe cards, filter all the cards whose programming + * interface doesn't conform to the NVMe storage spec. This + * allows the nvme controller to attach to more than just + * storage cards that use the nvme model. + */ + xpt_path_inq(&cpi, cgd->ccb_h.path); + if (cpi.transport == XPORT_NVME && + cpi.xport_specific.nvme.progif != + PCIP_STORAGE_NVM_ENTERPRISE_NVMHCI_1_0) + break; + /* * Allocate a peripheral instance for * this device and start the probe