Communicate the command format and supported functions to userspace tooling.
Unified · Split
| @@ -897,6 +897,30 @@ static ssize_t serial_show(struct device *dev, · 896 unmodified lines | |||
| 897 | } | 897 | } |
| 898 | static DEVICE_ATTR_RO(serial); | 898 | static DEVICE_ATTR_RO(serial); |
| 899 | 899 | ||
| 900 | static ssize_t family_show(struct device *dev, | ||
| 901 | struct device_attribute *attr, char *buf) | ||
| 902 | { | ||
| 903 | struct nvdimm *nvdimm = to_nvdimm(dev); | ||
| 904 | struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); | ||
| 905 | |||
| 906 | if (nfit_mem->family < 0) | ||
| 907 | return -ENXIO; | ||
| 908 | return sprintf(buf, "%d\n", nfit_mem->family); | ||
| 909 | } | ||
| 910 | static DEVICE_ATTR_RO(family); | ||
| 911 | |||
| 912 | static ssize_t dsm_mask_show(struct device *dev, | ||
| 913 | struct device_attribute *attr, char *buf) | ||
| 914 | { | ||
| 915 | struct nvdimm *nvdimm = to_nvdimm(dev); | ||
| 916 | struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); | ||
| 917 | |||
| 918 | if (nfit_mem->family < 0) | ||
| 919 | return -ENXIO; | ||
| 920 | return sprintf(buf, "%#lx\n", nfit_mem->dsm_mask); | ||
| 921 | } | ||
| 922 | static DEVICE_ATTR_RO(dsm_mask); | ||
| 923 | |||
| 900 | static ssize_t flags_show(struct device *dev, | 924 | static ssize_t flags_show(struct device *dev, |
| 901 | struct device_attribute *attr, char *buf) | 925 | struct device_attribute *attr, char *buf) |
| 902 | { | 926 | { |
| @@ -920,6 +944,8 @@ static struct attribute *acpi_nfit_dimm_attributes[] = { · 17 unmodified lines | |||
| 920 | &dev_attr_serial.attr, | 944 | &dev_attr_serial.attr, |
| 921 | &dev_attr_rev_id.attr, | 945 | &dev_attr_rev_id.attr, |
| 922 | &dev_attr_flags.attr, | 946 | &dev_attr_flags.attr, |
| 947 | &dev_attr_family.attr, | ||
| 948 | &dev_attr_dsm_mask.attr, | ||
| 923 | NULL, | 949 | NULL, |
| 924 | }; | 950 | }; |
| 925 | 951 | ||