PCI: Add support for AGP in cur/max bus speed
Take advantage of some gaps in the table to fit in support for AGP speeds. Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
9be60ca049
commit
45b4cdd57e
|
@ -437,11 +437,56 @@ void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(pcie_update_link_speed);
|
||||
|
||||
static unsigned char agp_speeds[] = {
|
||||
AGP_UNKNOWN,
|
||||
AGP_1X,
|
||||
AGP_2X,
|
||||
AGP_4X,
|
||||
AGP_8X
|
||||
};
|
||||
|
||||
static enum pci_bus_speed agp_speed(int agp3, int agpstat)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
if (agpstat & 4)
|
||||
index = 3;
|
||||
else if (agpstat & 2)
|
||||
index = 2;
|
||||
else if (agpstat & 1)
|
||||
index = 1;
|
||||
else
|
||||
goto out;
|
||||
|
||||
if (agp3) {
|
||||
index += 2;
|
||||
if (index == 5)
|
||||
index = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
return agp_speeds[index];
|
||||
}
|
||||
|
||||
|
||||
static void pci_set_bus_speed(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_dev *bridge = bus->self;
|
||||
int pos;
|
||||
|
||||
pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
|
||||
if (!pos)
|
||||
pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
|
||||
if (pos) {
|
||||
u32 agpstat, agpcmd;
|
||||
|
||||
pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
|
||||
bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
|
||||
|
||||
pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
|
||||
bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
|
||||
}
|
||||
|
||||
pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
|
||||
if (pos) {
|
||||
u16 status;
|
||||
|
|
|
@ -61,11 +61,11 @@ static char *pci_bus_speed_strings[] = {
|
|||
"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 */
|
||||
"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 */
|
||||
|
|
|
@ -200,6 +200,11 @@ enum pci_bus_speed {
|
|||
PCI_SPEED_66MHz_PCIX_266 = 0x09,
|
||||
PCI_SPEED_100MHz_PCIX_266 = 0x0a,
|
||||
PCI_SPEED_133MHz_PCIX_266 = 0x0b,
|
||||
AGP_UNKNOWN = 0x0c,
|
||||
AGP_1X = 0x0d,
|
||||
AGP_2X = 0x0e,
|
||||
AGP_4X = 0x0f,
|
||||
AGP_8X = 0x10,
|
||||
PCI_SPEED_66MHz_PCIX_533 = 0x11,
|
||||
PCI_SPEED_100MHz_PCIX_533 = 0x12,
|
||||
PCI_SPEED_133MHz_PCIX_533 = 0x13,
|
||||
|
|
Loading…
Reference in a new issue