]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - include/linux/nvme.h
Merge tag 'm68k-for-v5.3-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert...
[linux.git] / include / linux / nvme.h
index 8028adacaff351179ee2de1ce4c50e42c4f9d994..d98b2d8baf4e5db4407a091f8d5c1ea1b7f5d187 100644 (file)
@@ -562,6 +562,22 @@ enum nvme_opcode {
        nvme_cmd_resv_release   = 0x15,
 };
 
+#define nvme_opcode_name(opcode)       { opcode, #opcode }
+#define show_nvm_opcode_name(val)                              \
+       __print_symbolic(val,                                   \
+               nvme_opcode_name(nvme_cmd_flush),               \
+               nvme_opcode_name(nvme_cmd_write),               \
+               nvme_opcode_name(nvme_cmd_read),                \
+               nvme_opcode_name(nvme_cmd_write_uncor),         \
+               nvme_opcode_name(nvme_cmd_compare),             \
+               nvme_opcode_name(nvme_cmd_write_zeroes),        \
+               nvme_opcode_name(nvme_cmd_dsm),                 \
+               nvme_opcode_name(nvme_cmd_resv_register),       \
+               nvme_opcode_name(nvme_cmd_resv_report),         \
+               nvme_opcode_name(nvme_cmd_resv_acquire),        \
+               nvme_opcode_name(nvme_cmd_resv_release))
+
+
 /*
  * Descriptor subtype - lower 4 bits of nvme_(keyed_)sgl_desc identifier
  *
@@ -794,6 +810,32 @@ enum nvme_admin_opcode {
        nvme_admin_sanitize_nvm         = 0x84,
 };
 
+#define nvme_admin_opcode_name(opcode) { opcode, #opcode }
+#define show_admin_opcode_name(val)                                    \
+       __print_symbolic(val,                                           \
+               nvme_admin_opcode_name(nvme_admin_delete_sq),           \
+               nvme_admin_opcode_name(nvme_admin_create_sq),           \
+               nvme_admin_opcode_name(nvme_admin_get_log_page),        \
+               nvme_admin_opcode_name(nvme_admin_delete_cq),           \
+               nvme_admin_opcode_name(nvme_admin_create_cq),           \
+               nvme_admin_opcode_name(nvme_admin_identify),            \
+               nvme_admin_opcode_name(nvme_admin_abort_cmd),           \
+               nvme_admin_opcode_name(nvme_admin_set_features),        \
+               nvme_admin_opcode_name(nvme_admin_get_features),        \
+               nvme_admin_opcode_name(nvme_admin_async_event),         \
+               nvme_admin_opcode_name(nvme_admin_ns_mgmt),             \
+               nvme_admin_opcode_name(nvme_admin_activate_fw),         \
+               nvme_admin_opcode_name(nvme_admin_download_fw),         \
+               nvme_admin_opcode_name(nvme_admin_ns_attach),           \
+               nvme_admin_opcode_name(nvme_admin_keep_alive),          \
+               nvme_admin_opcode_name(nvme_admin_directive_send),      \
+               nvme_admin_opcode_name(nvme_admin_directive_recv),      \
+               nvme_admin_opcode_name(nvme_admin_dbbuf),               \
+               nvme_admin_opcode_name(nvme_admin_format_nvm),          \
+               nvme_admin_opcode_name(nvme_admin_security_send),       \
+               nvme_admin_opcode_name(nvme_admin_security_recv),       \
+               nvme_admin_opcode_name(nvme_admin_sanitize_nvm))
+
 enum {
        NVME_QUEUE_PHYS_CONTIG  = (1 << 0),
        NVME_CQ_IRQ_ENABLED     = (1 << 1),
@@ -1008,6 +1050,23 @@ enum nvmf_capsule_command {
        nvme_fabrics_type_property_get  = 0x04,
 };
 
+#define nvme_fabrics_type_name(type)   { type, #type }
+#define show_fabrics_type_name(type)                                   \
+       __print_symbolic(type,                                          \
+               nvme_fabrics_type_name(nvme_fabrics_type_property_set), \
+               nvme_fabrics_type_name(nvme_fabrics_type_connect),      \
+               nvme_fabrics_type_name(nvme_fabrics_type_property_get))
+
+/*
+ * If not fabrics command, fctype will be ignored.
+ */
+#define show_opcode_name(qid, opcode, fctype)                  \
+       ((opcode) == nvme_fabrics_command ?                     \
+        show_fabrics_type_name(fctype) :                       \
+       ((qid) ?                                                \
+        show_nvm_opcode_name(opcode) :                         \
+        show_admin_opcode_name(opcode)))
+
 struct nvmf_common_command {
        __u8    opcode;
        __u8    resv1;
@@ -1165,6 +1224,11 @@ struct nvme_command {
        };
 };
 
+static inline bool nvme_is_fabrics(struct nvme_command *cmd)
+{
+       return cmd->common.opcode == nvme_fabrics_command;
+}
+
 struct nvme_error_slot {
        __le64          error_count;
        __le16          sqid;
@@ -1186,7 +1250,7 @@ static inline bool nvme_is_write(struct nvme_command *cmd)
         *
         * Why can't we simply have a Fabrics In and Fabrics out command?
         */
-       if (unlikely(cmd->common.opcode == nvme_fabrics_command))
+       if (unlikely(nvme_is_fabrics(cmd)))
                return cmd->fabrics.fctype & 1;
        return cmd->common.opcode & 1;
 }