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 | 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 | 924 | static ssize_t flags_show(struct device *dev, |
| 901 | 925 | struct device_attribute *attr, char *buf) |
| 902 | 926 | { |
| @@ -920,6 +944,8 @@ static struct attribute *acpi_nfit_dimm_attributes[] = { · 17 unmodified lines | ||
| 920 | 944 | &dev_attr_serial.attr, |
| 921 | 945 | &dev_attr_rev_id.attr, |
| 922 | 946 | &dev_attr_flags.attr, |
| 947 | + &dev_attr_family.attr, | |
| 948 | + &dev_attr_dsm_mask.attr, | |
| 923 | 949 | NULL, |
| 924 | 950 | }; |
| 925 | 951 | |