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:
committed by
Jesse Barnes
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);
|
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)
|
static void pci_set_bus_speed(struct pci_bus *bus)
|
||||||
{
|
{
|
||||||
struct pci_dev *bridge = bus->self;
|
struct pci_dev *bridge = bus->self;
|
||||||
int pos;
|
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);
|
pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
|
||||||
if (pos) {
|
if (pos) {
|
||||||
u16 status;
|
u16 status;
|
||||||
|
@@ -61,11 +61,11 @@ static char *pci_bus_speed_strings[] = {
|
|||||||
"66 MHz PCI-X 266", /* 0x09 */
|
"66 MHz PCI-X 266", /* 0x09 */
|
||||||
"100 MHz PCI-X 266", /* 0x0a */
|
"100 MHz PCI-X 266", /* 0x0a */
|
||||||
"133 MHz PCI-X 266", /* 0x0b */
|
"133 MHz PCI-X 266", /* 0x0b */
|
||||||
NULL, /* 0x0c */
|
"Unknown AGP", /* 0x0c */
|
||||||
NULL, /* 0x0d */
|
"1x AGP", /* 0x0d */
|
||||||
NULL, /* 0x0e */
|
"2x AGP", /* 0x0e */
|
||||||
NULL, /* 0x0f */
|
"4x AGP", /* 0x0f */
|
||||||
NULL, /* 0x10 */
|
"8x AGP", /* 0x10 */
|
||||||
"66 MHz PCI-X 533", /* 0x11 */
|
"66 MHz PCI-X 533", /* 0x11 */
|
||||||
"100 MHz PCI-X 533", /* 0x12 */
|
"100 MHz PCI-X 533", /* 0x12 */
|
||||||
"133 MHz PCI-X 533", /* 0x13 */
|
"133 MHz PCI-X 533", /* 0x13 */
|
||||||
|
@@ -200,6 +200,11 @@ enum pci_bus_speed {
|
|||||||
PCI_SPEED_66MHz_PCIX_266 = 0x09,
|
PCI_SPEED_66MHz_PCIX_266 = 0x09,
|
||||||
PCI_SPEED_100MHz_PCIX_266 = 0x0a,
|
PCI_SPEED_100MHz_PCIX_266 = 0x0a,
|
||||||
PCI_SPEED_133MHz_PCIX_266 = 0x0b,
|
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_66MHz_PCIX_533 = 0x11,
|
||||||
PCI_SPEED_100MHz_PCIX_533 = 0x12,
|
PCI_SPEED_100MHz_PCIX_533 = 0x12,
|
||||||
PCI_SPEED_133MHz_PCIX_533 = 0x13,
|
PCI_SPEED_133MHz_PCIX_533 = 0x13,
|
||||||
|
Reference in New Issue
Block a user