nfit, libnvdimm: limited/whitelisted dimm command marshaling mechanism
[sfrench/cifs-2.6.git] / include / uapi / linux / ndctl.h
index 7cc28ab05b87724136869c4ae09f65ba7fdc12ab..45daa0be5ff90074e606c8ce96e2297727afa8be 100644 (file)
@@ -125,6 +125,7 @@ enum {
        ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7,
        ND_CMD_VENDOR_EFFECT_LOG = 8,
        ND_CMD_VENDOR = 9,
+       ND_CMD_CALL = 10,
 };
 
 enum {
@@ -158,6 +159,7 @@ static inline const char *nvdimm_cmd_name(unsigned cmd)
                [ND_CMD_VENDOR_EFFECT_LOG_SIZE] = "effect_size",
                [ND_CMD_VENDOR_EFFECT_LOG] = "effect_log",
                [ND_CMD_VENDOR] = "vendor",
+               [ND_CMD_CALL] = "cmd_call",
        };
 
        if (cmd < ARRAY_SIZE(names) && names[cmd])
@@ -224,4 +226,44 @@ enum ars_masks {
        ARS_STATUS_MASK = 0x0000FFFF,
        ARS_EXT_STATUS_SHIFT = 16,
 };
+
+/*
+ * struct nd_cmd_pkg
+ *
+ * is a wrapper to a quasi pass thru interface for invoking firmware
+ * associated with nvdimms.
+ *
+ * INPUT PARAMETERS
+ *
+ * nd_family corresponds to the firmware (e.g. DSM) interface.
+ *
+ * nd_command are the function index advertised by the firmware.
+ *
+ * nd_size_in is the size of the input parameters being passed to firmware
+ *
+ * OUTPUT PARAMETERS
+ *
+ * nd_fw_size is the size of the data firmware wants to return for
+ * the call.  If nd_fw_size is greater than size of nd_size_out, only
+ * the first nd_size_out bytes are returned.
+ */
+
+struct nd_cmd_pkg {
+       __u64   nd_family;              /* family of commands */
+       __u64   nd_command;
+       __u32   nd_size_in;             /* INPUT: size of input args */
+       __u32   nd_size_out;            /* INPUT: size of payload */
+       __u32   nd_reserved2[9];        /* reserved must be zero */
+       __u32   nd_fw_size;             /* OUTPUT: size fw wants to return */
+       unsigned char nd_payload[];     /* Contents of call      */
+};
+
+/* These NVDIMM families represent pre-standardization command sets */
+#define NVDIMM_FAMILY_INTEL 0
+#define NVDIMM_FAMILY_HPE1 1
+#define NVDIMM_FAMILY_HPE2 2
+
+#define ND_IOCTL_CALL                  _IOWR(ND_IOCTL, ND_CMD_CALL,\
+                                       struct nd_cmd_pkg)
+
 #endif /* __NDCTL_H__ */