diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2014-04-16 10:12:05 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-05-20 02:58:50 -0400 |
commit | ac4995b9d5705f10a69ea74d440e3943db41f2ca (patch) | |
tree | 2d346083802c68ab66ab6a0a81c86a1d68d8e781 /arch/s390/pci | |
parent | 93065d045a99391c60fa9ab8aca6b503f51b2e95 (diff) |
s390/pci: add some new arch specific pci attributes
Add a bunch of s390 specific pci attributes to help
identifying pci functions.
Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/pci')
-rw-r--r-- | arch/s390/pci/pci_clp.c | 10 | ||||
-rw-r--r-- | arch/s390/pci/pci_sysfs.c | 42 |
2 files changed, 52 insertions, 0 deletions
diff --git a/arch/s390/pci/pci_clp.c b/arch/s390/pci/pci_clp.c index c747394029ee..96545d7659fd 100644 --- a/arch/s390/pci/pci_clp.c +++ b/arch/s390/pci/pci_clp.c | |||
@@ -114,6 +114,16 @@ static int clp_store_query_pci_fn(struct zpci_dev *zdev, | |||
114 | zdev->end_dma = response->edma; | 114 | zdev->end_dma = response->edma; |
115 | zdev->pchid = response->pchid; | 115 | zdev->pchid = response->pchid; |
116 | zdev->pfgid = response->pfgid; | 116 | zdev->pfgid = response->pfgid; |
117 | zdev->pft = response->pft; | ||
118 | zdev->vfn = response->vfn; | ||
119 | zdev->uid = response->uid; | ||
120 | |||
121 | memcpy(zdev->pfip, response->pfip, sizeof(zdev->pfip)); | ||
122 | if (response->util_str_avail) { | ||
123 | memcpy(zdev->util_str, response->util_str, | ||
124 | sizeof(zdev->util_str)); | ||
125 | } | ||
126 | |||
117 | return 0; | 127 | return 0; |
118 | } | 128 | } |
119 | 129 | ||
diff --git a/arch/s390/pci/pci_sysfs.c b/arch/s390/pci/pci_sysfs.c index f23da1c0a489..9190214b8702 100644 --- a/arch/s390/pci/pci_sysfs.c +++ b/arch/s390/pci/pci_sysfs.c | |||
@@ -26,6 +26,13 @@ zpci_attr(function_id, "0x%08x\n", fid); | |||
26 | zpci_attr(function_handle, "0x%08x\n", fh); | 26 | zpci_attr(function_handle, "0x%08x\n", fh); |
27 | zpci_attr(pchid, "0x%04x\n", pchid); | 27 | zpci_attr(pchid, "0x%04x\n", pchid); |
28 | zpci_attr(pfgid, "0x%02x\n", pfgid); | 28 | zpci_attr(pfgid, "0x%02x\n", pfgid); |
29 | zpci_attr(vfn, "0x%04x\n", vfn); | ||
30 | zpci_attr(pft, "0x%02x\n", pft); | ||
31 | zpci_attr(uid, "0x%x\n", uid); | ||
32 | zpci_attr(segment0, "0x%02x\n", pfip[0]); | ||
33 | zpci_attr(segment1, "0x%02x\n", pfip[1]); | ||
34 | zpci_attr(segment2, "0x%02x\n", pfip[2]); | ||
35 | zpci_attr(segment3, "0x%02x\n", pfip[3]); | ||
29 | 36 | ||
30 | static ssize_t recover_store(struct device *dev, struct device_attribute *attr, | 37 | static ssize_t recover_store(struct device *dev, struct device_attribute *attr, |
31 | const char *buf, size_t count) | 38 | const char *buf, size_t count) |
@@ -51,18 +58,53 @@ static ssize_t recover_store(struct device *dev, struct device_attribute *attr, | |||
51 | } | 58 | } |
52 | static DEVICE_ATTR_WO(recover); | 59 | static DEVICE_ATTR_WO(recover); |
53 | 60 | ||
61 | static ssize_t util_string_read(struct file *filp, struct kobject *kobj, | ||
62 | struct bin_attribute *attr, char *buf, | ||
63 | loff_t off, size_t count) | ||
64 | { | ||
65 | struct device *dev = kobj_to_dev(kobj); | ||
66 | struct pci_dev *pdev = to_pci_dev(dev); | ||
67 | struct zpci_dev *zdev = get_zdev(pdev); | ||
68 | |||
69 | return memory_read_from_buffer(buf, count, &off, zdev->util_str, | ||
70 | sizeof(zdev->util_str)); | ||
71 | } | ||
72 | static BIN_ATTR_RO(util_string, CLP_UTIL_STR_LEN); | ||
73 | static struct bin_attribute *zpci_bin_attrs[] = { | ||
74 | &bin_attr_util_string, | ||
75 | NULL, | ||
76 | }; | ||
77 | |||
54 | static struct attribute *zpci_dev_attrs[] = { | 78 | static struct attribute *zpci_dev_attrs[] = { |
55 | &dev_attr_function_id.attr, | 79 | &dev_attr_function_id.attr, |
56 | &dev_attr_function_handle.attr, | 80 | &dev_attr_function_handle.attr, |
57 | &dev_attr_pchid.attr, | 81 | &dev_attr_pchid.attr, |
58 | &dev_attr_pfgid.attr, | 82 | &dev_attr_pfgid.attr, |
83 | &dev_attr_pft.attr, | ||
84 | &dev_attr_vfn.attr, | ||
85 | &dev_attr_uid.attr, | ||
59 | &dev_attr_recover.attr, | 86 | &dev_attr_recover.attr, |
60 | NULL, | 87 | NULL, |
61 | }; | 88 | }; |
62 | static struct attribute_group zpci_attr_group = { | 89 | static struct attribute_group zpci_attr_group = { |
63 | .attrs = zpci_dev_attrs, | 90 | .attrs = zpci_dev_attrs, |
91 | .bin_attrs = zpci_bin_attrs, | ||
92 | }; | ||
93 | |||
94 | static struct attribute *pfip_attrs[] = { | ||
95 | &dev_attr_segment0.attr, | ||
96 | &dev_attr_segment1.attr, | ||
97 | &dev_attr_segment2.attr, | ||
98 | &dev_attr_segment3.attr, | ||
99 | NULL, | ||
100 | }; | ||
101 | static struct attribute_group pfip_attr_group = { | ||
102 | .name = "pfip", | ||
103 | .attrs = pfip_attrs, | ||
64 | }; | 104 | }; |
105 | |||
65 | const struct attribute_group *zpci_attr_groups[] = { | 106 | const struct attribute_group *zpci_attr_groups[] = { |
66 | &zpci_attr_group, | 107 | &zpci_attr_group, |
108 | &pfip_attr_group, | ||
67 | NULL, | 109 | NULL, |
68 | }; | 110 | }; |