diff --git a/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c b/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c index 3b09175102..21798891c6 100644 --- a/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c +++ b/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c @@ -286,6 +286,8 @@ int nvme_ctrlr_stat(struct nvme_ctrlr *ctrlr, struct nvme_ctrlr_stat *cstat) /* Maximum transfer size */ cstat->max_xfer_size = ctrlr->max_xfer_size; + cstat->sgl_supported = (ctrlr->flags & NVME_CTRLR_SGL_SUPPORTED); + memcpy(&cstat->features, &ctrlr->feature_supported, sizeof(ctrlr->feature_supported)); memcpy(&cstat->log_pages, &ctrlr->log_page_supported, diff --git a/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.h b/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.h index 0d4a2863be..508c570557 100644 --- a/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.h +++ b/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.h @@ -301,6 +301,14 @@ struct nvme_ctrlr_stat { */ bool log_pages[256]; + /** + * Whether SGL is supported by the controller. + * + * Note that this does not mean all SGL requests will fail; + * many are convertible into standard (PRP) requests by libnvme. + */ + bool sgl_supported; + /** * All the features supported. */