-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
s390/pci: s390 specific PCI sysfs attributes
Add some s390 specific sysfs attributes to the PCI device directory. The following attributes are introduced: - function_id (PCI function ID) - function_handle (PCI function handle) - pchid (PCI channel ID) - pfgid (PCI function group ID aka PCI root complex) Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
- Loading branch information
Jan Glauber
authored and
Martin Schwidefsky
committed
Nov 30, 2012
1 parent
7441b06
commit 1e8da95
Showing
4 changed files
with
97 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,4 +3,4 @@ | |
# | ||
|
||
obj-$(CONFIG_PCI) += pci.o pci_dma.o pci_clp.o pci_msi.o \ | ||
pci_event.o | ||
pci_sysfs.o pci_event.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/* | ||
* Copyright IBM Corp. 2012 | ||
* | ||
* Author(s): | ||
* Jan Glauber <jang@linux.vnet.ibm.com> | ||
*/ | ||
|
||
#define COMPONENT "zPCI" | ||
#define pr_fmt(fmt) COMPONENT ": " fmt | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/stat.h> | ||
#include <linux/pci.h> | ||
|
||
static ssize_t show_fid(struct device *dev, struct device_attribute *attr, | ||
char *buf) | ||
{ | ||
struct zpci_dev *zdev = get_zdev(container_of(dev, struct pci_dev, dev)); | ||
|
||
sprintf(buf, "0x%08x\n", zdev->fid); | ||
return strlen(buf); | ||
} | ||
static DEVICE_ATTR(function_id, S_IRUGO, show_fid, NULL); | ||
|
||
static ssize_t show_fh(struct device *dev, struct device_attribute *attr, | ||
char *buf) | ||
{ | ||
struct zpci_dev *zdev = get_zdev(container_of(dev, struct pci_dev, dev)); | ||
|
||
sprintf(buf, "0x%08x\n", zdev->fh); | ||
return strlen(buf); | ||
} | ||
static DEVICE_ATTR(function_handle, S_IRUGO, show_fh, NULL); | ||
|
||
static ssize_t show_pchid(struct device *dev, struct device_attribute *attr, | ||
char *buf) | ||
{ | ||
struct zpci_dev *zdev = get_zdev(container_of(dev, struct pci_dev, dev)); | ||
|
||
sprintf(buf, "0x%04x\n", zdev->pchid); | ||
return strlen(buf); | ||
} | ||
static DEVICE_ATTR(pchid, S_IRUGO, show_pchid, NULL); | ||
|
||
static ssize_t show_pfgid(struct device *dev, struct device_attribute *attr, | ||
char *buf) | ||
{ | ||
struct zpci_dev *zdev = get_zdev(container_of(dev, struct pci_dev, dev)); | ||
|
||
sprintf(buf, "0x%02x\n", zdev->pfgid); | ||
return strlen(buf); | ||
} | ||
static DEVICE_ATTR(pfgid, S_IRUGO, show_pfgid, NULL); | ||
|
||
static struct device_attribute *zpci_dev_attrs[] = { | ||
&dev_attr_function_id, | ||
&dev_attr_function_handle, | ||
&dev_attr_pchid, | ||
&dev_attr_pfgid, | ||
NULL, | ||
}; | ||
|
||
int zpci_sysfs_add_device(struct device *dev) | ||
{ | ||
int i, rc = 0; | ||
|
||
for (i = 0; zpci_dev_attrs[i]; i++) { | ||
rc = device_create_file(dev, zpci_dev_attrs[i]); | ||
if (rc) | ||
goto error; | ||
} | ||
return 0; | ||
|
||
error: | ||
while (--i >= 0) | ||
device_remove_file(dev, zpci_dev_attrs[i]); | ||
return rc; | ||
} | ||
|
||
void zpci_sysfs_remove_device(struct device *dev) | ||
{ | ||
int i; | ||
|
||
for (i = 0; zpci_dev_attrs[i]; i++) | ||
device_remove_file(dev, zpci_dev_attrs[i]); | ||
} |