1
2
3
4
5
6
7
8#define COMPONENT "zPCI"
9#define pr_fmt(fmt) COMPONENT ": " fmt
10
11#include <linux/kernel.h>
12#include <linux/stat.h>
13#include <linux/pci.h>
14
15static ssize_t show_fid(struct device *dev, struct device_attribute *attr,
16 char *buf)
17{
18 struct zpci_dev *zdev = get_zdev(to_pci_dev(dev));
19
20 return sprintf(buf, "0x%08x\n", zdev->fid);
21}
22static DEVICE_ATTR(function_id, S_IRUGO, show_fid, NULL);
23
24static ssize_t show_fh(struct device *dev, struct device_attribute *attr,
25 char *buf)
26{
27 struct zpci_dev *zdev = get_zdev(to_pci_dev(dev));
28
29 return sprintf(buf, "0x%08x\n", zdev->fh);
30}
31static DEVICE_ATTR(function_handle, S_IRUGO, show_fh, NULL);
32
33static ssize_t show_pchid(struct device *dev, struct device_attribute *attr,
34 char *buf)
35{
36 struct zpci_dev *zdev = get_zdev(to_pci_dev(dev));
37
38 return sprintf(buf, "0x%04x\n", zdev->pchid);
39}
40static DEVICE_ATTR(pchid, S_IRUGO, show_pchid, NULL);
41
42static ssize_t show_pfgid(struct device *dev, struct device_attribute *attr,
43 char *buf)
44{
45 struct zpci_dev *zdev = get_zdev(to_pci_dev(dev));
46
47 return sprintf(buf, "0x%02x\n", zdev->pfgid);
48}
49static DEVICE_ATTR(pfgid, S_IRUGO, show_pfgid, NULL);
50
51static struct device_attribute *zpci_dev_attrs[] = {
52 &dev_attr_function_id,
53 &dev_attr_function_handle,
54 &dev_attr_pchid,
55 &dev_attr_pfgid,
56 NULL,
57};
58
59int zpci_sysfs_add_device(struct device *dev)
60{
61 int i, rc = 0;
62
63 for (i = 0; zpci_dev_attrs[i]; i++) {
64 rc = device_create_file(dev, zpci_dev_attrs[i]);
65 if (rc)
66 goto error;
67 }
68 return 0;
69
70error:
71 while (--i >= 0)
72 device_remove_file(dev, zpci_dev_attrs[i]);
73 return rc;
74}
75
76void zpci_sysfs_remove_device(struct device *dev)
77{
78 int i;
79
80 for (i = 0; zpci_dev_attrs[i]; i++)
81 device_remove_file(dev, zpci_dev_attrs[i]);
82}
83