Index: sys/cam/nvme/nvme_all.c =================================================================== --- sys/cam/nvme/nvme_all.c +++ sys/cam/nvme/nvme_all.c @@ -69,7 +69,7 @@ uint32_t cdw14, uint32_t cdw15) { bzero(&nvmeio->cmd, sizeof(struct nvme_command)); - nvmeio->cmd.opc_fuse = NVME_CMD_SET_OPC(cmd); + nvmeio->cmd.opc = cmd; nvmeio->cmd.nsid = htole32(nsid); nvmeio->cmd.cdw10 = htole32(cdw10); nvmeio->cmd.cdw11 = htole32(cdw11); @@ -117,29 +117,24 @@ const char * nvme_op_string(const struct nvme_command *cmd) { - uint8_t opc; - opc = (cmd->opc_fuse >> NVME_CMD_OPC_SHIFT) & NVME_CMD_OPC_MASK; - if (opc >= nitems(nvme_opc2str)) + if (cmd->opc >= nitems(nvme_opc2str)) return "UNKNOWN"; - return nvme_opc2str[opc]; + return nvme_opc2str[cmd->opc]; } const char * nvme_cmd_string(const struct nvme_command *cmd, char *cmd_string, size_t len) { - uint8_t opc, fuse; - opc = (cmd->opc_fuse >> NVME_CMD_OPC_SHIFT) & NVME_CMD_OPC_MASK; - fuse = (cmd->opc_fuse >> NVME_CMD_FUSE_SHIFT) & NVME_CMD_FUSE_MASK; /* * cid, rsvd areas and mptr not printed, since they are used * only internally by the SIM. */ snprintf(cmd_string, len, "opc=%x fuse=%x nsid=%x prp1=%llx prp2=%llx cdw=%x %x %x %x %x %x", - opc, fuse, cmd->nsid, + cmd->opc, cmd->fuse, cmd->nsid, (unsigned long long)cmd->prp1, (unsigned long long)cmd->prp2, cmd->cdw10, cmd->cdw11, cmd->cdw12, cmd->cdw13, cmd->cdw14, cmd->cdw15); Index: sys/dev/mpr/mpr_sas.c =================================================================== --- sys/dev/mpr/mpr_sas.c +++ sys/dev/mpr/mpr_sas.c @@ -1840,7 +1840,7 @@ /* Build NVMe DSM command */ c = (struct nvme_command *) req->NVMe_Command; - c->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_DATASET_MANAGEMENT); + c->opc = NVME_OPC_DATASET_MANAGEMENT; c->nsid = htole32(csio->ccb_h.target_lun + 1); c->cdw10 = htole32(ndesc - 1); c->cdw11 = htole32(NVME_DSM_ATTR_DEALLOCATE); Index: sys/dev/nvme/nvme.h =================================================================== --- sys/dev/nvme/nvme.h +++ sys/dev/nvme/nvme.h @@ -115,8 +115,6 @@ #define NVME_CMD_FUSE_SHIFT (8) #define NVME_CMD_FUSE_MASK (0x3) -#define NVME_CMD_SET_OPC(opc) (htole16(((uint16_t)(opc) & NVME_CMD_OPC_MASK) << NVME_CMD_OPC_SHIFT)) - #define NVME_STATUS_P_SHIFT (0) #define NVME_STATUS_P_MASK (0x1) #define NVME_STATUS_SC_SHIFT (1) @@ -428,7 +426,8 @@ struct nvme_command { /* dword 0 */ - uint16_t opc_fuse; /* opcode, fused operation */ + uint8_t opc; /* opcode */ + uint8_t fuse; /* fused operation */ uint16_t cid; /* command identifier */ /* dword 1 */ @@ -1288,7 +1287,7 @@ void nvme_ns_flush_cmd(struct nvme_command *cmd, uint32_t nsid) { - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_FLUSH); + cmd->opc = NVME_OPC_FLUSH; cmd->nsid = htole32(nsid); } @@ -1296,7 +1295,7 @@ void nvme_ns_rw_cmd(struct nvme_command *cmd, uint32_t rwcmd, uint32_t nsid, uint64_t lba, uint32_t count) { - cmd->opc_fuse = NVME_CMD_SET_OPC(rwcmd); + cmd->opc = rwcmd; cmd->nsid = htole32(nsid); cmd->cdw10 = htole32(lba & 0xffffffffu); cmd->cdw11 = htole32(lba >> 32); @@ -1321,7 +1320,7 @@ void nvme_ns_trim_cmd(struct nvme_command *cmd, uint32_t nsid, uint32_t num_ranges) { - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_DATASET_MANAGEMENT); + cmd->opc = NVME_OPC_DATASET_MANAGEMENT; cmd->nsid = htole32(nsid); cmd->cdw10 = htole32(num_ranges - 1); cmd->cdw11 = htole32(NVME_DSM_ATTR_DEALLOCATE); Index: sys/dev/nvme/nvme.c =================================================================== --- sys/dev/nvme/nvme.c +++ sys/dev/nvme/nvme.c @@ -222,14 +222,10 @@ void nvme_dump_command(struct nvme_command *cmd) { - uint8_t opc, fuse; - - opc = (cmd->opc_fuse >> NVME_CMD_OPC_SHIFT) & NVME_CMD_OPC_MASK; - fuse = (cmd->opc_fuse >> NVME_CMD_FUSE_SHIFT) & NVME_CMD_FUSE_MASK; printf( "opc:%x f:%x cid:%x nsid:%x r2:%x r3:%x mptr:%jx prp1:%jx prp2:%jx cdw:%x %x %x %x %x %x\n", - opc, fuse, cmd->cid, le32toh(cmd->nsid), + cmd->opc, cmd->fuse, cmd->cid, le32toh(cmd->nsid), cmd->rsvd2, cmd->rsvd3, (uintmax_t)le64toh(cmd->mptr), (uintmax_t)le64toh(cmd->prp1), (uintmax_t)le64toh(cmd->prp2), le32toh(cmd->cdw10), le32toh(cmd->cdw11), le32toh(cmd->cdw12), Index: sys/dev/nvme/nvme_ctrlr.c =================================================================== --- sys/dev/nvme/nvme_ctrlr.c +++ sys/dev/nvme/nvme_ctrlr.c @@ -769,7 +769,7 @@ * nature never be timed out. */ req->timeout = FALSE; - req->cmd.opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_ASYNC_EVENT_REQUEST); + req->cmd.opc = NVME_OPC_ASYNC_EVENT_REQUEST; nvme_ctrlr_submit_admin_request(ctrlr, req); } @@ -1073,7 +1073,8 @@ req = nvme_allocate_request_null(nvme_pt_done, pt); /* Assume userspace already converted to little-endian */ - req->cmd.opc_fuse = pt->cmd.opc_fuse; + req->cmd.opc = pt->cmd.opc; + req->cmd.fuse = pt->cmd.fuse; req->cmd.cdw10 = pt->cmd.cdw10; req->cmd.cdw11 = pt->cmd.cdw11; req->cmd.cdw12 = pt->cmd.cdw12; Index: sys/dev/nvme/nvme_ctrlr_cmd.c =================================================================== --- sys/dev/nvme/nvme_ctrlr_cmd.c +++ sys/dev/nvme/nvme_ctrlr_cmd.c @@ -42,7 +42,7 @@ sizeof(struct nvme_controller_data), cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_IDENTIFY); + cmd->opc = NVME_OPC_IDENTIFY; /* * TODO: create an identify command data structure, which @@ -64,7 +64,7 @@ sizeof(struct nvme_namespace_data), cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_IDENTIFY); + cmd->opc = NVME_OPC_IDENTIFY; /* * TODO: create an identify command data structure @@ -85,7 +85,7 @@ req = nvme_allocate_request_null(cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_CREATE_IO_CQ); + cmd->opc = NVME_OPC_CREATE_IO_CQ; /* * TODO: create a create io completion queue command data @@ -109,7 +109,7 @@ req = nvme_allocate_request_null(cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_CREATE_IO_SQ); + cmd->opc = NVME_OPC_CREATE_IO_SQ; /* * TODO: create a create io submission queue command data @@ -133,7 +133,7 @@ req = nvme_allocate_request_null(cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_DELETE_IO_CQ); + cmd->opc = NVME_OPC_DELETE_IO_CQ; /* * TODO: create a delete io completion queue command data @@ -154,7 +154,7 @@ req = nvme_allocate_request_null(cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_DELETE_IO_SQ); + cmd->opc = NVME_OPC_DELETE_IO_SQ; /* * TODO: create a delete io submission queue command data @@ -176,7 +176,7 @@ req = nvme_allocate_request_null(cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_SET_FEATURES); + cmd->opc = NVME_OPC_SET_FEATURES; cmd->cdw10 = htole32(feature); cmd->cdw11 = htole32(cdw11); @@ -194,7 +194,7 @@ req = nvme_allocate_request_null(cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_GET_FEATURES); + cmd->opc = NVME_OPC_GET_FEATURES; cmd->cdw10 = htole32(feature); cmd->cdw11 = htole32(cdw11); @@ -260,7 +260,7 @@ req = nvme_allocate_request_vaddr(payload, payload_size, cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_GET_LOG_PAGE); + cmd->opc = NVME_OPC_GET_LOG_PAGE; cmd->nsid = htole32(nsid); cmd->cdw10 = ((payload_size/sizeof(uint32_t)) - 1) << 16; cmd->cdw10 |= log_page; @@ -320,7 +320,7 @@ req = nvme_allocate_request_null(cb_fn, cb_arg); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_ABORT); + cmd->opc = NVME_OPC_ABORT; cmd->cdw10 = htole32((cid << 16) | sqid); nvme_ctrlr_submit_admin_request(ctrlr, req); Index: sys/dev/nvme/nvme_ns_cmd.c =================================================================== --- sys/dev/nvme/nvme_ns_cmd.c +++ sys/dev/nvme/nvme_ns_cmd.c @@ -126,7 +126,7 @@ return (ENOMEM); cmd = &req->cmd; - cmd->opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_DATASET_MANAGEMENT); + cmd->opc = NVME_OPC_DATASET_MANAGEMENT; cmd->nsid = htole32(ns->id); /* TODO: create a delete command data structure */ Index: sys/dev/nvme/nvme_qpair.c =================================================================== --- sys/dev/nvme/nvme_qpair.c +++ sys/dev/nvme/nvme_qpair.c @@ -125,12 +125,10 @@ nvme_admin_qpair_print_command(struct nvme_qpair *qpair, struct nvme_command *cmd) { - uint16_t opc; - opc = le16toh(cmd->opc_fuse) & NVME_CMD_OPC_MASK; nvme_printf(qpair->ctrlr, "%s (%02x) sqid:%d cid:%d nsid:%x " "cdw10:%08x cdw11:%08x\n", - get_admin_opcode_string(opc), opc, qpair->id, cmd->cid, + get_admin_opcode_string(cmd->opc), cmd->opc, qpair->id, cmd->cid, le32toh(cmd->nsid), le32toh(cmd->cdw10), le32toh(cmd->cdw11)); } @@ -138,10 +136,8 @@ nvme_io_qpair_print_command(struct nvme_qpair *qpair, struct nvme_command *cmd) { - uint16_t opc; - opc = le16toh(cmd->opc_fuse) & NVME_CMD_OPC_MASK; - switch (opc) { + switch (cmd->opc) { case NVME_OPC_WRITE: case NVME_OPC_READ: case NVME_OPC_WRITE_UNCORRECTABLE: @@ -149,7 +145,7 @@ case NVME_OPC_WRITE_ZEROES: nvme_printf(qpair->ctrlr, "%s sqid:%d cid:%d nsid:%d " "lba:%llu len:%d\n", - get_io_opcode_string(opc), qpair->id, cmd->cid, le32toh(cmd->nsid), + get_io_opcode_string(cmd->opc), qpair->id, cmd->cid, le32toh(cmd->nsid), ((unsigned long long)le32toh(cmd->cdw11) << 32) + le32toh(cmd->cdw10), (le32toh(cmd->cdw12) & 0xFFFF) + 1); break; @@ -160,11 +156,11 @@ case NVME_OPC_RESERVATION_ACQUIRE: case NVME_OPC_RESERVATION_RELEASE: nvme_printf(qpair->ctrlr, "%s sqid:%d cid:%d nsid:%d\n", - get_io_opcode_string(opc), qpair->id, cmd->cid, le32toh(cmd->nsid)); + get_io_opcode_string(cmd->opc), qpair->id, cmd->cid, le32toh(cmd->nsid)); break; default: nvme_printf(qpair->ctrlr, "%s (%02x) sqid:%d cid:%d nsid:%d\n", - get_io_opcode_string(opc), opc, qpair->id, + get_io_opcode_string(cmd->opc), cmd->opc, qpair->id, cmd->cid, le32toh(cmd->nsid)); break; } @@ -715,7 +711,7 @@ tr = TAILQ_FIRST(&qpair->outstanding_tr); while (tr != NULL) { - if ((le16toh(tr->req->cmd.opc_fuse) & NVME_CMD_OPC_MASK) == NVME_OPC_ASYNC_EVENT_REQUEST) { + if (tr->req->cmd.opc == NVME_OPC_ASYNC_EVENT_REQUEST) { nvme_qpair_manual_complete_tracker(qpair, tr, NVME_SCT_GENERIC, NVME_SC_ABORTED_SQ_DELETION, 0, FALSE);