|
@@ -912,6 +912,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
|
|
|
ctrl->oncs = le16_to_cpup(&id->oncs);
|
|
|
atomic_set(&ctrl->abort_limit, id->acl + 1);
|
|
|
ctrl->vwc = id->vwc;
|
|
|
+ ctrl->cntlid = le16_to_cpup(&id->cntlid);
|
|
|
memcpy(ctrl->serial, id->sn, sizeof(id->sn));
|
|
|
memcpy(ctrl->model, id->mn, sizeof(id->mn));
|
|
|
memcpy(ctrl->firmware_rev, id->fr, sizeof(id->fr));
|
|
@@ -1099,7 +1100,7 @@ static const struct attribute_group nvme_ns_attr_group = {
|
|
|
.is_visible = nvme_attrs_are_visible,
|
|
|
};
|
|
|
|
|
|
-#define nvme_show_function(field) \
|
|
|
+#define nvme_show_str_function(field) \
|
|
|
static ssize_t field##_show(struct device *dev, \
|
|
|
struct device_attribute *attr, char *buf) \
|
|
|
{ \
|
|
@@ -1108,15 +1109,26 @@ static ssize_t field##_show(struct device *dev, \
|
|
|
} \
|
|
|
static DEVICE_ATTR(field, S_IRUGO, field##_show, NULL);
|
|
|
|
|
|
-nvme_show_function(model);
|
|
|
-nvme_show_function(serial);
|
|
|
-nvme_show_function(firmware_rev);
|
|
|
+#define nvme_show_int_function(field) \
|
|
|
+static ssize_t field##_show(struct device *dev, \
|
|
|
+ struct device_attribute *attr, char *buf) \
|
|
|
+{ \
|
|
|
+ struct nvme_ctrl *ctrl = dev_get_drvdata(dev); \
|
|
|
+ return sprintf(buf, "%d\n", ctrl->field); \
|
|
|
+} \
|
|
|
+static DEVICE_ATTR(field, S_IRUGO, field##_show, NULL);
|
|
|
+
|
|
|
+nvme_show_str_function(model);
|
|
|
+nvme_show_str_function(serial);
|
|
|
+nvme_show_str_function(firmware_rev);
|
|
|
+nvme_show_int_function(cntlid);
|
|
|
|
|
|
static struct attribute *nvme_dev_attrs[] = {
|
|
|
&dev_attr_reset_controller.attr,
|
|
|
&dev_attr_model.attr,
|
|
|
&dev_attr_serial.attr,
|
|
|
&dev_attr_firmware_rev.attr,
|
|
|
+ &dev_attr_cntlid.attr,
|
|
|
NULL
|
|
|
};
|
|
|
|