mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 06:32:08 +00:00
PCI: Add pci_speed_string()
Add pci_speed_string() to return a text description of the supplied bus or link speed. The slot code previously used the private pci_bus_speed_strings[] array for this purpose, but adding this interface will enable us to consolidate similar code elsewhere. Export pcie_link_speed[] and pci_speed_string() so they can be used by modules. Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
9cb3985af6
commit
e56faff57f
4 changed files with 43 additions and 38 deletions
|
@ -310,6 +310,7 @@ void pci_bus_put(struct pci_bus *bus);
|
||||||
(speed) == PCIE_SPEED_2_5GT ? 2500*8/10 : \
|
(speed) == PCIE_SPEED_2_5GT ? 2500*8/10 : \
|
||||||
0)
|
0)
|
||||||
|
|
||||||
|
const char *pci_speed_string(enum pci_bus_speed speed);
|
||||||
enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev);
|
enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev);
|
||||||
enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev);
|
enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev);
|
||||||
u32 pcie_bandwidth_capable(struct pci_dev *dev, enum pci_bus_speed *speed,
|
u32 pcie_bandwidth_capable(struct pci_dev *dev, enum pci_bus_speed *speed,
|
||||||
|
|
|
@ -640,6 +640,7 @@ void pci_free_host_bridge(struct pci_host_bridge *bridge)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pci_free_host_bridge);
|
EXPORT_SYMBOL(pci_free_host_bridge);
|
||||||
|
|
||||||
|
/* Indexed by PCI_X_SSTATUS_FREQ (secondary bus mode and frequency) */
|
||||||
static const unsigned char pcix_bus_speed[] = {
|
static const unsigned char pcix_bus_speed[] = {
|
||||||
PCI_SPEED_UNKNOWN, /* 0 */
|
PCI_SPEED_UNKNOWN, /* 0 */
|
||||||
PCI_SPEED_66MHz_PCIX, /* 1 */
|
PCI_SPEED_66MHz_PCIX, /* 1 */
|
||||||
|
@ -659,6 +660,7 @@ static const unsigned char pcix_bus_speed[] = {
|
||||||
PCI_SPEED_133MHz_PCIX_533 /* F */
|
PCI_SPEED_133MHz_PCIX_533 /* F */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Indexed by PCI_EXP_LNKCAP_SLS, PCI_EXP_LNKSTA_CLS */
|
||||||
const unsigned char pcie_link_speed[] = {
|
const unsigned char pcie_link_speed[] = {
|
||||||
PCI_SPEED_UNKNOWN, /* 0 */
|
PCI_SPEED_UNKNOWN, /* 0 */
|
||||||
PCIE_SPEED_2_5GT, /* 1 */
|
PCIE_SPEED_2_5GT, /* 1 */
|
||||||
|
@ -677,6 +679,44 @@ const unsigned char pcie_link_speed[] = {
|
||||||
PCI_SPEED_UNKNOWN, /* E */
|
PCI_SPEED_UNKNOWN, /* E */
|
||||||
PCI_SPEED_UNKNOWN /* F */
|
PCI_SPEED_UNKNOWN /* F */
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL_GPL(pcie_link_speed);
|
||||||
|
|
||||||
|
const char *pci_speed_string(enum pci_bus_speed speed)
|
||||||
|
{
|
||||||
|
/* Indexed by the pci_bus_speed enum */
|
||||||
|
static const char *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 */
|
||||||
|
"Unknown AGP", /* 0x0c */
|
||||||
|
"1x AGP", /* 0x0d */
|
||||||
|
"2x AGP", /* 0x0e */
|
||||||
|
"4x AGP", /* 0x0f */
|
||||||
|
"8x AGP", /* 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 */
|
||||||
|
"8.0 GT/s PCIe", /* 0x16 */
|
||||||
|
"16.0 GT/s PCIe", /* 0x17 */
|
||||||
|
"32.0 GT/s PCIe", /* 0x18 */
|
||||||
|
};
|
||||||
|
|
||||||
|
if (speed < ARRAY_SIZE(speed_strings))
|
||||||
|
return speed_strings[speed];
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(pci_speed_string);
|
||||||
|
|
||||||
void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
|
void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
|
||||||
{
|
{
|
||||||
|
|
|
@ -49,45 +49,9 @@ static ssize_t address_read_file(struct pci_slot *slot, char *buf)
|
||||||
slot->number);
|
slot->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* these strings match up with the values in pci_bus_speed */
|
|
||||||
static const 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 */
|
|
||||||
"Unknown AGP", /* 0x0c */
|
|
||||||
"1x AGP", /* 0x0d */
|
|
||||||
"2x AGP", /* 0x0e */
|
|
||||||
"4x AGP", /* 0x0f */
|
|
||||||
"8x AGP", /* 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 */
|
|
||||||
"8.0 GT/s PCIe", /* 0x16 */
|
|
||||||
"16.0 GT/s PCIe", /* 0x17 */
|
|
||||||
"32.0 GT/s PCIe", /* 0x18 */
|
|
||||||
};
|
|
||||||
|
|
||||||
static ssize_t bus_speed_read(enum pci_bus_speed speed, char *buf)
|
static ssize_t bus_speed_read(enum pci_bus_speed speed, char *buf)
|
||||||
{
|
{
|
||||||
const char *speed_string;
|
return sprintf(buf, "%s\n", pci_speed_string(speed));
|
||||||
|
|
||||||
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)
|
static ssize_t max_speed_read_file(struct pci_slot *slot, char *buf)
|
||||||
|
|
|
@ -236,7 +236,7 @@ enum pcie_link_width {
|
||||||
PCIE_LNK_WIDTH_UNKNOWN = 0xff,
|
PCIE_LNK_WIDTH_UNKNOWN = 0xff,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Based on the PCI Hotplug Spec, but some values are made up by us */
|
/* See matching string table in pci_speed_string() */
|
||||||
enum pci_bus_speed {
|
enum pci_bus_speed {
|
||||||
PCI_SPEED_33MHz = 0x00,
|
PCI_SPEED_33MHz = 0x00,
|
||||||
PCI_SPEED_66MHz = 0x01,
|
PCI_SPEED_66MHz = 0x01,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue