summaryrefslogtreecommitdiffstats
path: root/sys/dev/nvme/nvme.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/nvme/nvme.h')
-rw-r--r--sys/dev/nvme/nvme.h30
1 files changed, 19 insertions, 11 deletions
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index f7653fc..748261f 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -223,26 +223,31 @@ struct nvme_command
uint32_t cdw15; /* command-specific */
} __packed;
+struct nvme_status {
+
+ uint16_t p : 1; /* phase tag */
+ uint16_t sc : 8; /* status code */
+ uint16_t sct : 3; /* status code type */
+ uint16_t rsvd2 : 2;
+ uint16_t m : 1; /* more */
+ uint16_t dnr : 1; /* do not retry */
+} __packed;
+
struct nvme_completion {
/* dword 0 */
- uint32_t cdw0; /* command-specific */
+ uint32_t cdw0; /* command-specific */
/* dword 1 */
- uint32_t rsvd1;
+ uint32_t rsvd1;
/* dword 2 */
- uint16_t sqhd; /* submission queue head pointer */
- uint16_t sqid; /* submission queue identifier */
+ uint16_t sqhd; /* submission queue head pointer */
+ uint16_t sqid; /* submission queue identifier */
/* dword 3 */
- uint16_t cid; /* command identifier */
- uint16_t p : 1; /* phase tag */
- uint16_t sf_sc : 8; /* status field - status code */
- uint16_t sf_sct : 3; /* status field - status code type */
- uint16_t rsvd2 : 2;
- uint16_t sf_m : 1; /* status field - more */
- uint16_t sf_dnr : 1; /* status field - do not retry */
+ uint16_t cid; /* command identifier */
+ struct nvme_status status;
} __packed;
struct nvme_dsm_range {
@@ -686,6 +691,9 @@ enum nvme_io_test_flags {
NVME_TEST_FLAG_REFTHREAD = 0x1,
};
+#define nvme_completion_is_error(cpl) \
+ ((cpl)->status.sc != 0 || (cpl)->status.sct != 0)
+
#ifdef _KERNEL
struct bio;
OpenPOWER on IntegriCloud