Loading include/spdk/nvme_spec.h +32 −1 Original line number Diff line number Diff line Loading @@ -687,6 +687,15 @@ enum spdk_nvme_identify_cns { SPDK_NVME_IDENTIFY_CTRLR_LIST = 0x13, }; /** NVMe over Fabrics controller model */ enum spdk_nvmf_ctrlr_model { /** NVM subsystem uses dynamic controller model */ SPDK_NVMF_CTRLR_MODEL_DYNAMIC = 0, /** NVM subsystem uses static controller model */ SPDK_NVMF_CTRLR_MODEL_STATIC = 1, }; struct __attribute__((packed)) spdk_nvme_ctrlr_data { /* bytes 0-255: controller capabilities and features */ Loading Loading @@ -939,7 +948,29 @@ struct __attribute__((packed)) spdk_nvme_ctrlr_data { uint8_t reserved5[768]; uint8_t nvmf_specific[256]; /** NVMe over Fabrics-specific fields */ struct { /** I/O queue command capsule supported size (16-byte units) */ uint32_t ioccsz; /** I/O queue response capsule supported size (16-byte units) */ uint32_t iorcsz; /** In-capsule data offset (16-byte units) */ uint16_t icdoff; /** Controller attributes */ struct { /** Controller model: \ref spdk_nvmf_ctrlr_model */ uint8_t ctrlr_model : 1; uint8_t reserved : 7; } ctrattr; /** Maximum SGL block descriptors (0 = no limit) */ uint8_t msdbd; uint8_t reserved[244]; } nvmf_specific; /* bytes 2048-3071: power state descriptors */ struct spdk_nvme_power_state psd[32]; Loading include/spdk/nvmf_spec.h +0 −10 Original line number Diff line number Diff line Loading @@ -319,16 +319,6 @@ struct spdk_nvmf_fabric_prop_set_cmd { }; SPDK_STATIC_ASSERT(sizeof(struct spdk_nvmf_fabric_prop_set_cmd) == 64, "Incorrect size"); struct spdk_nvmf_extended_identify_ctrlr_data { uint32_t ioccsz; uint32_t iorcsz; uint16_t icdoff; uint8_t ctrattr; uint8_t msdbd; uint8_t reserved[244]; }; SPDK_STATIC_ASSERT(sizeof(struct spdk_nvmf_extended_identify_ctrlr_data) == 256, "Incorrect size"); #define SPDK_NVMF_NQN_MAX_LEN 223 #define SPDK_NVMF_DISCOVERY_NQN "nqn.2014-08.org.nvmexpress.discovery" Loading lib/nvmf/session.c +16 −21 Original line number Diff line number Diff line Loading @@ -45,18 +45,15 @@ static void nvmf_init_discovery_session_properties(struct nvmf_session *session) { struct spdk_nvmf_extended_identify_ctrlr_data *nvmfdata; session->vcdata.maxcmd = g_nvmf_tgt.max_queue_depth; /* extended data for get log page supportted */ session->vcdata.lpa.edlp = 1; session->vcdata.cntlid = 0; /* There is one controller per subsystem, so its id is 0 */ nvmfdata = (struct spdk_nvmf_extended_identify_ctrlr_data *)session->vcdata.nvmf_specific; nvmfdata->ioccsz = sizeof(struct spdk_nvme_cmd) / 16; nvmfdata->iorcsz = sizeof(struct spdk_nvme_cpl) / 16; nvmfdata->icdoff = 0; /* offset starts directly after SQE */ nvmfdata->ctrattr = 0; /* dynamic controller model */ nvmfdata->msdbd = 1; /* target supports single SGL in capsule */ session->vcdata.nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16; session->vcdata.nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16; session->vcdata.nvmf_specific.icdoff = 0; /* offset starts directly after SQE */ session->vcdata.nvmf_specific.ctrattr.ctrlr_model = SPDK_NVMF_CTRLR_MODEL_DYNAMIC; session->vcdata.nvmf_specific.msdbd = 1; /* target supports single SGL in capsule */ session->vcdata.sgls.keyed_sgl = 1; session->vcdata.sgls.sgl_offset = 1; Loading Loading @@ -85,7 +82,6 @@ static void nvmf_init_nvme_session_properties(struct nvmf_session *session) { const struct spdk_nvme_ctrlr_data *cdata; struct spdk_nvmf_extended_identify_ctrlr_data *nvmfdata; /* Here we are going to initialize the features, properties, and Loading @@ -105,28 +101,27 @@ nvmf_init_nvme_session_properties(struct nvmf_session *session) session->vcdata.sgls.keyed_sgl = 1; session->vcdata.sgls.sgl_offset = 1; nvmfdata = (struct spdk_nvmf_extended_identify_ctrlr_data *)session->vcdata.nvmf_specific; nvmfdata->ioccsz = sizeof(struct spdk_nvme_cmd) / 16; nvmfdata->iorcsz = sizeof(struct spdk_nvme_cpl) / 16; nvmfdata->icdoff = 0; /* offset starts directly after SQE */ nvmfdata->ctrattr = 0; /* dynamic controller model */ nvmfdata->msdbd = 1; /* target supports single SGL in capsule */ session->vcdata.nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16; session->vcdata.nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16; session->vcdata.nvmf_specific.icdoff = 0; /* offset starts directly after SQE */ session->vcdata.nvmf_specific.ctrattr.ctrlr_model = SPDK_NVMF_CTRLR_MODEL_DYNAMIC; session->vcdata.nvmf_specific.msdbd = 1; /* target supports single SGL in capsule */ /* TODO: this should be set by the transport */ nvmfdata->ioccsz += SPDK_NVMF_MAX_RECV_DATA_TRANSFER_SIZE / 16; session->vcdata.nvmf_specific.ioccsz += SPDK_NVMF_MAX_RECV_DATA_TRANSFER_SIZE / 16; SPDK_TRACELOG(SPDK_TRACE_NVMF, " ctrlr data: maxcmd %x\n", session->vcdata.maxcmd); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: ioccsz %x\n", nvmfdata->ioccsz); session->vcdata.nvmf_specific.ioccsz); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: iorcsz %x\n", nvmfdata->iorcsz); session->vcdata.nvmf_specific.iorcsz); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: icdoff %x\n", nvmfdata->icdoff); session->vcdata.nvmf_specific.icdoff); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: ctrattr %x\n", nvmfdata->ctrattr); *(uint8_t *)&session->vcdata.nvmf_specific.ctrattr); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: msdbd %x\n", nvmfdata->msdbd); session->vcdata.nvmf_specific.msdbd); SPDK_TRACELOG(SPDK_TRACE_NVMF, " sgls data: 0x%x\n", *(uint32_t *)&session->vcdata.sgls); Loading Loading
include/spdk/nvme_spec.h +32 −1 Original line number Diff line number Diff line Loading @@ -687,6 +687,15 @@ enum spdk_nvme_identify_cns { SPDK_NVME_IDENTIFY_CTRLR_LIST = 0x13, }; /** NVMe over Fabrics controller model */ enum spdk_nvmf_ctrlr_model { /** NVM subsystem uses dynamic controller model */ SPDK_NVMF_CTRLR_MODEL_DYNAMIC = 0, /** NVM subsystem uses static controller model */ SPDK_NVMF_CTRLR_MODEL_STATIC = 1, }; struct __attribute__((packed)) spdk_nvme_ctrlr_data { /* bytes 0-255: controller capabilities and features */ Loading Loading @@ -939,7 +948,29 @@ struct __attribute__((packed)) spdk_nvme_ctrlr_data { uint8_t reserved5[768]; uint8_t nvmf_specific[256]; /** NVMe over Fabrics-specific fields */ struct { /** I/O queue command capsule supported size (16-byte units) */ uint32_t ioccsz; /** I/O queue response capsule supported size (16-byte units) */ uint32_t iorcsz; /** In-capsule data offset (16-byte units) */ uint16_t icdoff; /** Controller attributes */ struct { /** Controller model: \ref spdk_nvmf_ctrlr_model */ uint8_t ctrlr_model : 1; uint8_t reserved : 7; } ctrattr; /** Maximum SGL block descriptors (0 = no limit) */ uint8_t msdbd; uint8_t reserved[244]; } nvmf_specific; /* bytes 2048-3071: power state descriptors */ struct spdk_nvme_power_state psd[32]; Loading
include/spdk/nvmf_spec.h +0 −10 Original line number Diff line number Diff line Loading @@ -319,16 +319,6 @@ struct spdk_nvmf_fabric_prop_set_cmd { }; SPDK_STATIC_ASSERT(sizeof(struct spdk_nvmf_fabric_prop_set_cmd) == 64, "Incorrect size"); struct spdk_nvmf_extended_identify_ctrlr_data { uint32_t ioccsz; uint32_t iorcsz; uint16_t icdoff; uint8_t ctrattr; uint8_t msdbd; uint8_t reserved[244]; }; SPDK_STATIC_ASSERT(sizeof(struct spdk_nvmf_extended_identify_ctrlr_data) == 256, "Incorrect size"); #define SPDK_NVMF_NQN_MAX_LEN 223 #define SPDK_NVMF_DISCOVERY_NQN "nqn.2014-08.org.nvmexpress.discovery" Loading
lib/nvmf/session.c +16 −21 Original line number Diff line number Diff line Loading @@ -45,18 +45,15 @@ static void nvmf_init_discovery_session_properties(struct nvmf_session *session) { struct spdk_nvmf_extended_identify_ctrlr_data *nvmfdata; session->vcdata.maxcmd = g_nvmf_tgt.max_queue_depth; /* extended data for get log page supportted */ session->vcdata.lpa.edlp = 1; session->vcdata.cntlid = 0; /* There is one controller per subsystem, so its id is 0 */ nvmfdata = (struct spdk_nvmf_extended_identify_ctrlr_data *)session->vcdata.nvmf_specific; nvmfdata->ioccsz = sizeof(struct spdk_nvme_cmd) / 16; nvmfdata->iorcsz = sizeof(struct spdk_nvme_cpl) / 16; nvmfdata->icdoff = 0; /* offset starts directly after SQE */ nvmfdata->ctrattr = 0; /* dynamic controller model */ nvmfdata->msdbd = 1; /* target supports single SGL in capsule */ session->vcdata.nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16; session->vcdata.nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16; session->vcdata.nvmf_specific.icdoff = 0; /* offset starts directly after SQE */ session->vcdata.nvmf_specific.ctrattr.ctrlr_model = SPDK_NVMF_CTRLR_MODEL_DYNAMIC; session->vcdata.nvmf_specific.msdbd = 1; /* target supports single SGL in capsule */ session->vcdata.sgls.keyed_sgl = 1; session->vcdata.sgls.sgl_offset = 1; Loading Loading @@ -85,7 +82,6 @@ static void nvmf_init_nvme_session_properties(struct nvmf_session *session) { const struct spdk_nvme_ctrlr_data *cdata; struct spdk_nvmf_extended_identify_ctrlr_data *nvmfdata; /* Here we are going to initialize the features, properties, and Loading @@ -105,28 +101,27 @@ nvmf_init_nvme_session_properties(struct nvmf_session *session) session->vcdata.sgls.keyed_sgl = 1; session->vcdata.sgls.sgl_offset = 1; nvmfdata = (struct spdk_nvmf_extended_identify_ctrlr_data *)session->vcdata.nvmf_specific; nvmfdata->ioccsz = sizeof(struct spdk_nvme_cmd) / 16; nvmfdata->iorcsz = sizeof(struct spdk_nvme_cpl) / 16; nvmfdata->icdoff = 0; /* offset starts directly after SQE */ nvmfdata->ctrattr = 0; /* dynamic controller model */ nvmfdata->msdbd = 1; /* target supports single SGL in capsule */ session->vcdata.nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16; session->vcdata.nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16; session->vcdata.nvmf_specific.icdoff = 0; /* offset starts directly after SQE */ session->vcdata.nvmf_specific.ctrattr.ctrlr_model = SPDK_NVMF_CTRLR_MODEL_DYNAMIC; session->vcdata.nvmf_specific.msdbd = 1; /* target supports single SGL in capsule */ /* TODO: this should be set by the transport */ nvmfdata->ioccsz += SPDK_NVMF_MAX_RECV_DATA_TRANSFER_SIZE / 16; session->vcdata.nvmf_specific.ioccsz += SPDK_NVMF_MAX_RECV_DATA_TRANSFER_SIZE / 16; SPDK_TRACELOG(SPDK_TRACE_NVMF, " ctrlr data: maxcmd %x\n", session->vcdata.maxcmd); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: ioccsz %x\n", nvmfdata->ioccsz); session->vcdata.nvmf_specific.ioccsz); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: iorcsz %x\n", nvmfdata->iorcsz); session->vcdata.nvmf_specific.iorcsz); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: icdoff %x\n", nvmfdata->icdoff); session->vcdata.nvmf_specific.icdoff); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: ctrattr %x\n", nvmfdata->ctrattr); *(uint8_t *)&session->vcdata.nvmf_specific.ctrattr); SPDK_TRACELOG(SPDK_TRACE_NVMF, " ext ctrlr data: msdbd %x\n", nvmfdata->msdbd); session->vcdata.nvmf_specific.msdbd); SPDK_TRACELOG(SPDK_TRACE_NVMF, " sgls data: 0x%x\n", *(uint32_t *)&session->vcdata.sgls); Loading