nvme: Add new NVMe 1.4 definitions for controller memory buffer

Change-Id: I00f1880a6b0f018c291d015b3f65a7579541c069
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/837
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Ben Walker 2020-02-12 11:44:46 -07:00 committed by Tomasz Zawadzki
parent 344c318464
commit b649a1dc3e

View File

@ -263,6 +263,35 @@ union spdk_nvme_cmbsz_register {
};
SPDK_STATIC_ASSERT(sizeof(union spdk_nvme_cmbsz_register) == 4, "Incorrect size");
union spdk_nvme_cmbmsc_register {
uint64_t raw;
struct {
/** capability registers enabled */
uint64_t cre : 1;
/** controller memory space enable */
uint64_t cmse : 1;
uint64_t reserved : 10;
/** controller base address */
uint64_t cba : 52;
} bits;
};
SPDK_STATIC_ASSERT(sizeof(union spdk_nvme_cmbmsc_register) == 8, "Incorrect size");
union spdk_nvme_cmbsts_register {
uint32_t raw;
struct {
/** controller base address invalid */
uint32_t cbai : 1;
uint32_t reserved : 31;
} bits;
};
SPDK_STATIC_ASSERT(sizeof(union spdk_nvme_cmbsts_register) == 4, "Incorrect size");
/** Boot partition information */
union spdk_nvme_bpinfo_register {
uint32_t raw;
@ -345,7 +374,13 @@ struct spdk_nvme_registers {
/** boot partition memory buffer location (must be 4KB aligned) */
uint64_t bpmbl;
uint32_t reserved3[0x3ec];
/** controller memory buffer memory space control */
union spdk_nvme_cmbmsc_register cmbmsc;
/** controller memory buffer status */
union spdk_nvme_cmbsts_register cmbsts;
uint32_t reserved3[0x3e9];
struct {
uint32_t sq_tdbl; /* submission queue tail doorbell */
@ -377,6 +412,10 @@ SPDK_STATIC_ASSERT(0x44 == offsetof(struct spdk_nvme_registers, bprsel),
"Incorrect register offset");
SPDK_STATIC_ASSERT(0x48 == offsetof(struct spdk_nvme_registers, bpmbl),
"Incorrect register offset");
SPDK_STATIC_ASSERT(0x50 == offsetof(struct spdk_nvme_registers, cmbmsc),
"Incorrect register offset");
SPDK_STATIC_ASSERT(0x58 == offsetof(struct spdk_nvme_registers, cmbsts),
"Incorrect register offset");
enum spdk_nvme_sgl_descriptor_type {
SPDK_NVME_SGL_TYPE_DATA_BLOCK = 0x0,