The pass thru calls return command mask. Previously, bit zero
wasn't part of command mask, but as it is now, this left commands_show
displaying "unknown" for function zero. Add an ioctl interface
to return command mask.
Signed-off-by: Jerry Hoemann <jerry.hoemann(a)hpe.com>
---
drivers/nvdimm/bus.c | 10 ++++++++--
include/uapi/linux/ndctl.h | 9 +++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
index dcfcd8e..a61f069 100644
--- a/drivers/nvdimm/bus.c
+++ b/drivers/nvdimm/bus.c
@@ -404,7 +404,10 @@ void nvdimm_bus_destroy_ndctl(struct nvdimm_bus *nvdimm_bus)
}
static const struct nd_cmd_desc __nd_cmd_dimm_descs[] = {
- [ND_CMD_IMPLEMENTED] = { },
+ [ND_CMD_IMPLEMENTED] = {
+ .out_num = 1,
+ .out_sizes = { 8, },
+ },
[ND_CMD_SMART] = {
.out_num = 2,
.out_sizes = { 4, 8, },
@@ -456,7 +459,10 @@ const struct nd_cmd_desc *nd_cmd_dimm_desc(int cmd)
EXPORT_SYMBOL_GPL(nd_cmd_dimm_desc);
static const struct nd_cmd_desc __nd_cmd_bus_descs[] = {
- [ND_CMD_IMPLEMENTED] = { },
+ [ND_CMD_IMPLEMENTED] = {
+ .out_num = 1,
+ .out_sizes = { 1, },
+ },
[ND_CMD_ARS_CAP] = {
.in_num = 2,
.in_sizes = { 8, 8, },
diff --git a/include/uapi/linux/ndctl.h b/include/uapi/linux/ndctl.h
index c043cd1..cae7c34 100644
--- a/include/uapi/linux/ndctl.h
+++ b/include/uapi/linux/ndctl.h
@@ -20,6 +20,10 @@ struct nd_cmd_smart {
__u8 data[128];
} __packed;
+struct nd_cmd_mask {
+ __u8 data[8];
+} __packed;
+
struct nd_cmd_smart_threshold {
__u32 status;
__u8 data[8];
@@ -137,6 +141,7 @@ enum {
static inline const char *nvdimm_bus_cmd_name(unsigned cmd)
{
static const char * const names[] = {
+ [ND_CMD_IMPLEMENTED] = "cmd_mask",
[ND_CMD_ARS_CAP] = "ars_cap",
[ND_CMD_ARS_START] = "ars_start",
[ND_CMD_ARS_STATUS] = "ars_status",
@@ -152,6 +157,7 @@ static inline const char *nvdimm_bus_cmd_name(unsigned cmd)
static inline const char *nvdimm_cmd_name(unsigned cmd)
{
static const char * const names[] = {
+ [ND_CMD_IMPLEMENTED] = "cmd_mask",
[ND_CMD_SMART] = "smart",
[ND_CMD_SMART_THRESHOLD] = "smart_thresh",
[ND_CMD_DIMM_FLAGS] = "flags",
@@ -171,6 +177,9 @@ static inline const char *nvdimm_cmd_name(unsigned cmd)
#define ND_IOCTL 'N'
+#define ND_IOCTL_CMD_MASK _IOWR(ND_IOCTL, ND_CMD_IMPLEMENTED,\
+ struct nd_cmd_mask)
+
#define ND_IOCTL_SMART _IOWR(ND_IOCTL, ND_CMD_SMART,\
struct nd_cmd_smart)
--
1.7.11.3