diff --git a/include/spdk/nvme_spec.h b/include/spdk/nvme_spec.h index dacf6d1d2..6b180b3f5 100644 --- a/include/spdk/nvme_spec.h +++ b/include/spdk/nvme_spec.h @@ -919,6 +919,20 @@ enum spdk_nvme_sgls_supported { SPDK_NVME_SGLS_SUPPORTED_DWORD_ALIGNED = 2, }; +/** Identify Controller data vwc.flush_broadcast values */ +enum spdk_nvme_flush_broadcast { + /** Support for NSID=FFFFFFFFh with Flush is not indicated. */ + SPDK_NVME_FLUSH_BROADCAST_NOT_INDICATED = 0, + + /* 01b: Reserved */ + + /** Flush does not support NSID set to FFFFFFFFh. */ + SPDK_NVME_FLUSH_BROADCAST_NOT_SUPPORTED = 2, + + /** Flush supports NSID set to FFFFFFFFh. */ + SPDK_NVME_FLUSH_BROADCAST_SUPPORTED = 3 +}; + struct __attribute__((packed)) spdk_nvme_ctrlr_data { /* bytes 0-255: controller capabilities and features */ @@ -1223,7 +1237,8 @@ struct __attribute__((packed)) spdk_nvme_ctrlr_data { /** volatile write cache */ struct { uint8_t present : 1; - uint8_t reserved : 7; + uint8_t flush_broadcast : 2; + uint8_t reserved : 5; } vwc; /** atomic write unit normal */ diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 909e5bcb8..ae2fc56d3 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -1211,6 +1211,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c cdata->cqes.max = 4; cdata->nn = subsystem->max_nsid; cdata->vwc.present = 1; + cdata->vwc.flush_broadcast = SPDK_NVME_FLUSH_BROADCAST_NOT_SUPPORTED; cdata->nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16; cdata->nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16;