diff --git a/lib/libnvmf/nvmf_host.c b/lib/libnvmf/nvmf_host.c --- a/lib/libnvmf/nvmf_host.c +++ b/lib/libnvmf/nvmf_host.c @@ -498,7 +498,7 @@ nvmf_init_sqe(&cmd, NVME_OPC_IDENTIFY); /* 5.15.1 Use CNS of 0x01 for controller data. */ - cmd.cdw10 = htole32(1); + cmd.cdw10 = htole32(NVME_CNS_ID_CONTROLLER); cc = nvmf_allocate_command(qp, &cmd); if (cc == NULL) @@ -547,7 +547,7 @@ nvmf_init_sqe(&cmd, NVME_OPC_IDENTIFY); /* 5.15.1 Use CNS of 0x00 for namespace data. */ - cmd.cdw10 = htole32(0); + cmd.cdw10 = htole32(NVME_CNS_ID_NAMESPACE); cmd.nsid = htole32(nsid); cc = nvmf_allocate_command(qp, &cmd); diff --git a/sbin/nvmecontrol/ns.c b/sbin/nvmecontrol/ns.c --- a/sbin/nvmecontrol/ns.c +++ b/sbin/nvmecontrol/ns.c @@ -422,7 +422,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; pt.cmd.nsid = htole32(0); - pt.cmd.cdw10 = htole32(0x02); + pt.cmd.cdw10 = htole32(NVME_CNS_ACTIVE_NAMESPACE_ID_LIST); pt.buf = list; pt.len = sizeof(list); pt.is_read = 1; @@ -467,7 +467,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; pt.cmd.nsid = htole32(0); - pt.cmd.cdw10 = htole32(0x10); + pt.cmd.cdw10 = htole32(NVME_CNS_ALLOCATED_NAMESPACE_ID_LIST); pt.buf = list; pt.len = sizeof(list); pt.is_read = 1; @@ -511,7 +511,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; - pt.cmd.cdw10 = htole32(0x13); + pt.cmd.cdw10 = htole32(NVME_CNS_CONTROLLER_LIST); pt.buf = clist; pt.len = sizeof(clist); pt.is_read = 1; @@ -728,7 +728,7 @@ /* Get full list of controllers to attach to. */ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; - pt.cmd.cdw10 = htole32(0x13); + pt.cmd.cdw10 = htole32(NVME_CNS_CONTROLLER_LIST); pt.buf = clist; pt.len = sizeof(clist); pt.is_read = 1; @@ -799,7 +799,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; pt.cmd.nsid = htole32(nsid); - pt.cmd.cdw10 = htole32(0x12); + pt.cmd.cdw10 = htole32(NVME_CNS_CONTROLLER_LIST_ATTACHED); pt.buf = clist; pt.len = sizeof(clist); pt.is_read = 1; @@ -874,7 +874,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; pt.cmd.nsid = htole32(nsid); - pt.cmd.cdw10 = htole32(0x12); + pt.cmd.cdw10 = htole32(NVME_CNS_CONTROLLER_LIST_ATTACHED); pt.buf = clist; pt.len = sizeof(clist); pt.is_read = 1; @@ -927,7 +927,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; pt.cmd.nsid = htole32(nsid); - pt.cmd.cdw10 = htole32(0x11); + pt.cmd.cdw10 = htole32(NVME_CNS_ID_ALLOCATED_NAMESPACE); pt.buf = &nsdata; pt.len = sizeof(nsdata); pt.is_read = 1; diff --git a/sbin/nvmecontrol/nvmecontrol.c b/sbin/nvmecontrol/nvmecontrol.c --- a/sbin/nvmecontrol/nvmecontrol.c +++ b/sbin/nvmecontrol/nvmecontrol.c @@ -102,7 +102,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; - pt.cmd.cdw10 = htole32(1); + pt.cmd.cdw10 = htole32(NVME_CNS_ID_CONTROLLER); pt.buf = cdata; pt.len = sizeof(*cdata); pt.is_read = 1; @@ -126,7 +126,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; pt.cmd.nsid = htole32(nsid); - pt.cmd.cdw10 = htole32(0); + pt.cmd.cdw10 = htole32(NVME_CNS_ID_NAMESPACE); pt.buf = nsdata; pt.len = sizeof(*nsdata); pt.is_read = 1; @@ -150,7 +150,7 @@ memset(&pt, 0, sizeof(pt)); pt.cmd.opc = NVME_OPC_IDENTIFY; pt.cmd.nsid = htole32(nsid); - pt.cmd.cdw10 = htole32(2); + pt.cmd.cdw10 = htole32(NVME_CNS_ACTIVE_NAMESPACE_ID_LIST); pt.buf = nslist; pt.len = sizeof(*nslist); pt.is_read = 1; diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c --- a/sys/cam/ctl/ctl.c +++ b/sys/cam/ctl/ctl.c @@ -10778,7 +10778,7 @@ if (lun == NULL) { cns = le32toh(ctnio->cmd.cdw10) & 0xff; switch (cns) { - case 0: + case NVME_CNS_ID_NAMESPACE: memset(ctnio->kern_data_ptr, 0, len); ctl_datamove((union ctl_io *)ctnio); break; diff --git a/sys/cam/ctl/ctl_backend_block.c b/sys/cam/ctl/ctl_backend_block.c --- a/sys/cam/ctl/ctl_backend_block.c +++ b/sys/cam/ctl/ctl_backend_block.c @@ -1771,10 +1771,10 @@ cns = le32toh(io->nvmeio.cmd.cdw10) & 0xff; switch (cns) { - case 0: + case NVME_CNS_ID_NAMESPACE: ctl_be_block_namespace_data(be_lun, io); break; - case 3: + case NVME_CNS_NAMESPACE_ID_DESCRIPTOR_LIST: ctl_be_block_nvme_ids(be_lun, io); break; default: @@ -3213,8 +3213,8 @@ cns = le32toh(io->nvmeio.cmd.cdw10) & 0xff; switch (cns) { - case 0: - case 3: + case NVME_CNS_ID_NAMESPACE: + case NVME_CNS_NAMESPACE_ID_DESCRIPTOR_LIST: mtx_lock(&be_lun->queue_lock); STAILQ_INSERT_TAIL(&be_lun->config_read_queue, &io->io_hdr, links); diff --git a/sys/cam/ctl/ctl_backend_ramdisk.c b/sys/cam/ctl/ctl_backend_ramdisk.c --- a/sys/cam/ctl/ctl_backend_ramdisk.c +++ b/sys/cam/ctl/ctl_backend_ramdisk.c @@ -658,9 +658,9 @@ cns = le32toh(io->nvmeio.cmd.cdw10) & 0xff; switch (cns) { - case 0: + case NVME_CNS_ID_NAMESPACE: return (ramdisk_namespace_data(io)); - case 3: + case NVME_CNS_NAMESPACE_ID_DESCRIPTOR_LIST: return (ramdisk_nvme_ids(io)); default: ctl_nvme_set_invalid_field(&io->nvmeio); diff --git a/sys/cam/nvme/nvme_xpt.c b/sys/cam/nvme/nvme_xpt.c --- a/sys/cam/nvme/nvme_xpt.c +++ b/sys/cam/nvme/nvme_xpt.c @@ -281,7 +281,7 @@ sizeof(softc->cd), /* dxfer_len */ 30 * 1000); /* timeout 30s */ nvme_ns_cmd(nvmeio, NVME_OPC_IDENTIFY, 0, - 1, 0, 0, 0, 0, 0); + NVME_CNS_ID_CONTROLLER, 0, 0, 0, 0, 0); break; case NVME_PROBE_IDENTIFY_NS: cam_fill_nvmeadmin(nvmeio, @@ -292,7 +292,7 @@ sizeof(softc->ns), /* dxfer_len */ 30 * 1000); /* timeout 30s */ nvme_ns_cmd(nvmeio, NVME_OPC_IDENTIFY, lun, - 0, 0, 0, 0, 0, 0); + NVME_CNS_ID_NAMESPACE, 0, 0, 0, 0, 0); break; default: panic("nvme_probe_start: invalid action state 0x%x\n", softc->action); diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h --- a/sys/dev/nvme/nvme.h +++ b/sys/dev/nvme/nvme.h @@ -1142,6 +1142,20 @@ _Static_assert(sizeof(struct nvme_power_state) == 32, "bad size for nvme_power_state"); +#define NVME_CNS_ID_NAMESPACE 0x00 +#define NVME_CNS_ID_CONTROLLER 0x01 +#define NVME_CNS_ACTIVE_NAMESPACE_ID_LIST 0x02 +#define NVME_CNS_NAMESPACE_ID_DESCRIPTOR_LIST 0x03 +#define NVME_CNS_NVM_SET_LIST 0x04 +#define NVME_CNS_ALLOCATED_NAMESPACE_ID_LIST 0x10 +#define NVME_CNS_ID_ALLOCATED_NAMESPACE 0x11 +#define NVME_CNS_CONTROLLER_LIST_ATTACHED 0x12 +#define NVME_CNS_CONTROLLER_LIST 0x13 +#define NVME_CNS_PRIMARY_CONTROLLER_CAPABILITIES 0x14 +#define NVME_CNS_SECONDARY_CONTROLLER_LIST 0x15 +#define NVME_CNS_NAMESPACE_GRANULARITY_LIST 0x16 +#define NVME_CNS_UUID_LIST 0x17 + #define NVME_SERIAL_NUMBER_LENGTH 20 #define NVME_MODEL_NUMBER_LENGTH 40 #define NVME_FIRMWARE_REVISION_LENGTH 8 diff --git a/sys/dev/nvme/nvme_ctrlr_cmd.c b/sys/dev/nvme/nvme_ctrlr_cmd.c --- a/sys/dev/nvme/nvme_ctrlr_cmd.c +++ b/sys/dev/nvme/nvme_ctrlr_cmd.c @@ -46,7 +46,7 @@ * TODO: create an identify command data structure, which * includes this CNS bit in cdw10. */ - cmd->cdw10 = htole32(1); + cmd->cdw10 = htole32(NVME_CNS_ID_CONTROLLER); nvme_ctrlr_submit_admin_request(ctrlr, req); } diff --git a/sys/dev/nvmf/controller/nvmft_controller.c b/sys/dev/nvmf/controller/nvmft_controller.c --- a/sys/dev/nvmf/controller/nvmft_controller.c +++ b/sys/dev/nvmf/controller/nvmft_controller.c @@ -669,11 +669,11 @@ } switch (cns) { - case 0: /* Namespace data. */ - case 3: /* Namespace Identification Descriptor list. */ + case NVME_CNS_ID_NAMESPACE: /* Namespace data. */ + case NVME_CNS_NAMESPACE_ID_DESCRIPTOR_LIST: /* Namespace Identification Descriptor list. */ nvmft_dispatch_command(ctrlr->admin, nc, true); return; - case 1: + case NVME_CNS_ID_CONTROLLER: /* Controller data. */ m = m_getml(sizeof(ctrlr->cdata), M_WAITOK); m_copyback(m, 0, sizeof(ctrlr->cdata), (void *)&ctrlr->cdata); @@ -681,7 +681,7 @@ sizeof(ctrlr->cdata)); MPASS(status != NVMF_MORE); break; - case 2: + case NVME_CNS_ACTIVE_NAMESPACE_ID_LIST: { /* Active namespace list. */ struct nvme_ns_list *nslist; diff --git a/sys/dev/nvmf/host/nvmf_cmd.c b/sys/dev/nvmf/host/nvmf_cmd.c --- a/sys/dev/nvmf/host/nvmf_cmd.c +++ b/sys/dev/nvmf/host/nvmf_cmd.c @@ -100,7 +100,7 @@ cmd.opc = NVME_OPC_IDENTIFY; /* 5.15.1 Use CNS of 0x02 for namespace data. */ - cmd.cdw10 = htole32(2); + cmd.cdw10 = htole32(NVME_CNS_ACTIVE_NAMESPACE_ID_LIST); cmd.nsid = htole32(id); req = nvmf_allocate_request(sc->admin, &cmd, req_cb, req_cb_arg, how); @@ -126,7 +126,7 @@ cmd.opc = NVME_OPC_IDENTIFY; /* 5.15.1 Use CNS of 0x00 for namespace data. */ - cmd.cdw10 = htole32(0); + cmd.cdw10 = htole32(NVME_CNS_ID_NAMESPACE); cmd.nsid = htole32(id); req = nvmf_allocate_request(sc->admin, &cmd, req_cb, req_cb_arg, how); diff --git a/usr.sbin/bhyve/pci_nvme.c b/usr.sbin/bhyve/pci_nvme.c --- a/usr.sbin/bhyve/pci_nvme.c +++ b/usr.sbin/bhyve/pci_nvme.c @@ -1497,7 +1497,7 @@ pci_nvme_status_genc(&status, NVME_SC_SUCCESS); switch (command->cdw10 & 0xFF) { - case 0x00: /* return Identify Namespace data structure */ + case NVME_CNS_ID_NAMESPACE: /* return Identify Namespace data structure */ /* Global NS only valid with NS Management */ if (command->nsid == NVME_GLOBAL_NAMESPACE_TAG) { pci_nvme_status_genc(&status, @@ -1508,20 +1508,20 @@ command->prp2, (uint8_t *)&sc->nsdata, sizeof(sc->nsdata), NVME_COPY_TO_PRP); break; - case 0x01: /* return Identify Controller data structure */ + case NVME_CNS_ID_CONTROLLER: /* return Identify Controller data structure */ nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, command->prp2, (uint8_t *)&sc->ctrldata, sizeof(sc->ctrldata), NVME_COPY_TO_PRP); break; - case 0x02: /* list of 1024 active NSIDs > CDW1.NSID */ + case NVME_CNS_ACTIVE_NAMESPACE_ID_LIST: /* list of 1024 active NSIDs > CDW1.NSID */ dest = vm_map_gpa(sc->nsc_pi->pi_vmctx, command->prp1, sizeof(uint32_t) * 1024); /* All unused entries shall be zero */ memset(dest, 0, sizeof(uint32_t) * 1024); ((uint32_t *)dest)[0] = 1; break; - case 0x03: /* list of NSID structures in CDW1.NSID, 4096 bytes */ + case NVME_CNS_NAMESPACE_ID_DESCRIPTOR_LIST: /* list of NSID structures in CDW1.NSID, 4096 bytes */ if (command->nsid != 1) { pci_nvme_status_genc(&status, NVME_SC_INVALID_NAMESPACE_OR_FORMAT); @@ -1537,7 +1537,7 @@ ((uint8_t *)dest)[1] = sizeof(uint64_t); memcpy(((uint8_t *)dest) + 4, sc->nsdata.eui64, sizeof(uint64_t)); break; - case 0x13: + case NVME_CNS_CONTROLLER_LIST: /* * Controller list is optional but used by UNH tests. Return * a valid but empty list. diff --git a/usr.sbin/camdd/camdd.c b/usr.sbin/camdd/camdd.c --- a/usr.sbin/camdd/camdd.c +++ b/usr.sbin/camdd/camdd.c @@ -1398,7 +1398,7 @@ nc->opc = NVME_OPC_IDENTIFY; nc->nsid = nsid; - nc->cdw10 = 0; /* Identify Namespace is CNS = 0 */ + nc->cdw10 = NVME_CNS_ID_NAMESPACE; /* Identify Namespace is CNS = 0 */ cam_fill_nvmeadmin(&ccb->nvmeio, /*retries*/ probe_retry_count, diff --git a/usr.sbin/nvmfd/controller.c b/usr.sbin/nvmfd/controller.c --- a/usr.sbin/nvmfd/controller.c +++ b/usr.sbin/nvmfd/controller.c @@ -154,7 +154,7 @@ cns = le32toh(cmd->cdw10) & 0xFF; switch (cns) { - case 1: + case NVME_CNS_ID_CONTROLLER: break; default: warnx("Unsupported CNS %#x for IDENTIFY", cns); diff --git a/usr.sbin/nvmfd/io.c b/usr.sbin/nvmfd/io.c --- a/usr.sbin/nvmfd/io.c +++ b/usr.sbin/nvmfd/io.c @@ -149,7 +149,7 @@ cns = le32toh(cmd->cdw10) & 0xFF; switch (cns) { - case 0: /* Namespace data. */ + case NVME_CNS_ID_NAMESPACE: /* Namespace data. */ if (!device_namespace_data(le32toh(cmd->nsid), &nsdata)) { nvmf_send_generic_error(nc, NVME_SC_INVALID_NAMESPACE_OR_FORMAT); @@ -158,7 +158,7 @@ nvmf_send_controller_data(nc, &nsdata, sizeof(nsdata)); return (true); - case 2: /* Active namespace list. */ + case NVME_CNS_ACTIVE_NAMESPACE_ID_LIST: /* Active namespace list. */ nsid = le32toh(cmd->nsid); if (nsid >= 0xfffffffe) { nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD); @@ -168,7 +168,7 @@ device_active_nslist(nsid, &nslist); nvmf_send_controller_data(nc, &nslist, sizeof(nslist)); return (true); - case 3: /* Namespace Identification Descriptor list. */ + case NVME_CNS_NAMESPACE_ID_DESCRIPTOR_LIST: /* Namespace Identification Descriptor list. */ if (!device_identification_descriptor(le32toh(cmd->nsid), &nsdata)) { nvmf_send_generic_error(nc,