diff options
| author | Matthew Wilcox <matthew@wil.cx> | 2009-12-13 08:11:32 -0500 | 
|---|---|---|
| committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2010-02-22 16:15:17 -0800 | 
| commit | 3749c51ac6c1560aa1cb1520066bed84c6f8152a (patch) | |
| tree | 3cbfb6a6d2df821e3e80ccce29ede8011b94246e /drivers/pci/slot.c | |
| parent | 536c8cb49eccd4f753b4782e7e975ef87359cb44 (diff) | |
PCI: Make current and maximum bus speeds part of the PCI core
Move the max_bus_speed and cur_bus_speed into the pci_bus.  Expose the
values through the PCI slot driver instead of the hotplug slot driver.
Update all the hotplug drivers to use the pci_bus instead of their own
data structures.
Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/pci/slot.c')
| -rw-r--r-- | drivers/pci/slot.c | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c index 8c02b6c53bdb..6f6b8d24786a 100644 --- a/drivers/pci/slot.c +++ b/drivers/pci/slot.c @@ -47,6 +47,54 @@ static ssize_t address_read_file(struct pci_slot *slot, char *buf)  				slot->number);  } +/* these strings match up with the values in pci_bus_speed */ +static char *pci_bus_speed_strings[] = { +	"33 MHz PCI",		/* 0x00 */ +	"66 MHz PCI",		/* 0x01 */ +	"66 MHz PCI-X", 	/* 0x02 */ +	"100 MHz PCI-X",	/* 0x03 */ +	"133 MHz PCI-X",	/* 0x04 */ +	NULL,			/* 0x05 */ +	NULL,			/* 0x06 */ +	NULL,			/* 0x07 */ +	NULL,			/* 0x08 */ +	"66 MHz PCI-X 266",	/* 0x09 */ +	"100 MHz PCI-X 266",	/* 0x0a */ +	"133 MHz PCI-X 266",	/* 0x0b */ +	NULL,			/* 0x0c */ +	NULL,			/* 0x0d */ +	NULL,			/* 0x0e */ +	NULL,			/* 0x0f */ +	NULL,			/* 0x10 */ +	"66 MHz PCI-X 533",	/* 0x11 */ +	"100 MHz PCI-X 533",	/* 0x12 */ +	"133 MHz PCI-X 533",	/* 0x13 */ +	"2.5 GT/s PCIe",	/* 0x14 */ +	"5.0 GT/s PCIe",	/* 0x15 */ +}; + +static ssize_t bus_speed_read(enum pci_bus_speed speed, char *buf) +{ +	const char *speed_string; + +	if (speed < ARRAY_SIZE(pci_bus_speed_strings)) +		speed_string = pci_bus_speed_strings[speed]; +	else +		speed_string = "Unknown"; + +	return sprintf(buf, "%s\n", speed_string); +} + +static ssize_t max_speed_read_file(struct pci_slot *slot, char *buf) +{ +	return bus_speed_read(slot->bus->max_bus_speed, buf); +} + +static ssize_t cur_speed_read_file(struct pci_slot *slot, char *buf) +{ +	return bus_speed_read(slot->bus->cur_bus_speed, buf); +} +  static void pci_slot_release(struct kobject *kobj)  {  	struct pci_dev *dev; @@ -66,9 +114,15 @@ static void pci_slot_release(struct kobject *kobj)  static struct pci_slot_attribute pci_slot_attr_address =  	__ATTR(address, (S_IFREG | S_IRUGO), address_read_file, NULL); +static struct pci_slot_attribute pci_slot_attr_max_speed = +	__ATTR(max_bus_speed, (S_IFREG | S_IRUGO), max_speed_read_file, NULL); +static struct pci_slot_attribute pci_slot_attr_cur_speed = +	__ATTR(cur_bus_speed, (S_IFREG | S_IRUGO), cur_speed_read_file, NULL);  static struct attribute *pci_slot_default_attrs[] = {  	&pci_slot_attr_address.attr, +	&pci_slot_attr_max_speed.attr, +	&pci_slot_attr_cur_speed.attr,  	NULL,  }; | 
