diff options
Diffstat (limited to 'hw/xfree86/os-support/bus')
-rw-r--r-- | hw/xfree86/os-support/bus/Pci.c | 3 | ||||
-rw-r--r-- | hw/xfree86/os-support/bus/Pci.h | 6 | ||||
-rw-r--r-- | hw/xfree86/os-support/bus/ix86Pci.c | 15 | ||||
-rw-r--r-- | hw/xfree86/os-support/bus/linuxPci.c | 22 |
4 files changed, 30 insertions, 16 deletions
diff --git a/hw/xfree86/os-support/bus/Pci.c b/hw/xfree86/os-support/bus/Pci.c index 6b36fdaf2..ffa906505 100644 --- a/hw/xfree86/os-support/bus/Pci.c +++ b/hw/xfree86/os-support/bus/Pci.c @@ -1203,7 +1203,8 @@ handlePciBIOS(PCITAG Tag, int basereg, if ((xf86ReadDomainMemory(Tag, hostbase, sizeof(tmp), tmp) != sizeof(tmp)) || (tmp[0] != 0x55) || (tmp[1] != 0xaa) || !tmp[2] ) { - /* Restore the base register if it was changed. */ + /* Restore the base registers if they were changed. */ + pciWriteLong(Tag, PCI_MAP_ROM_REG, romsave); if (savebase) pciWriteLong(Tag, PCI_MAP_REG_START + (b_reg << 2), (CARD32) savebase); diff --git a/hw/xfree86/os-support/bus/Pci.h b/hw/xfree86/os-support/bus/Pci.h index b0c767d5c..3e965265b 100644 --- a/hw/xfree86/os-support/bus/Pci.h +++ b/hw/xfree86/os-support/bus/Pci.h @@ -112,7 +112,7 @@ /* * Global Definitions */ -#define MAX_PCI_DEVICES 64 /* Max number of devices accomodated */ +#define MAX_PCI_DEVICES 128 /* Max number of devices accomodated */ /* by xf86scanpci */ #if defined(sun) && defined(SVR4) && defined(sparc) # define MAX_PCI_BUSES 4096 /* Max number of PCI buses */ @@ -280,7 +280,7 @@ # define INCLUDE_XF86_MAP_PCI_MEM # define INCLUDE_XF86_NO_DOMAIN # endif -#elif defined(__powerpc__) +#elif defined(__powerpc__) || defined(__powerpc64__) # if defined(linux) # define ARCH_PCI_INIT linuxPciInit # define INCLUDE_XF86_MAP_PCI_MEM @@ -312,7 +312,7 @@ # define INCLUDE_XF86_MAP_PCI_MEM # define INCLUDE_XF86_NO_DOMAIN # endif -#elif defined(__sparc__) +#elif defined(__sparc__) || defined(sparc) # if defined(linux) # define ARCH_PCI_INIT linuxPciInit # define INCLUDE_XF86_MAP_PCI_MEM diff --git a/hw/xfree86/os-support/bus/ix86Pci.c b/hw/xfree86/os-support/bus/ix86Pci.c index b135d0b73..da1aa7d2f 100644 --- a/hw/xfree86/os-support/bus/ix86Pci.c +++ b/hw/xfree86/os-support/bus/ix86Pci.c @@ -272,10 +272,16 @@ void ix86PciSelectCfgmech(void) */ switch (xf86Info.pciFlags) { - case PCIProbe1: /* { */ + case PCIOsConfig: +#if ARCH_PCI_OS_INIT + return; +#endif + + case PCIProbe1: - xf86MsgVerb(X_INFO, 2, "PCI: Probing config type using method 1\n"); - oldVal1 = inl(PCI_CFGMECH1_ADDRESS_REG); + xf86MsgVerb(X_INFO, 2, + "PCI: Probing config type using method 1\n"); + oldVal1 = inl(PCI_CFGMECH1_ADDRESS_REG); #ifdef DEBUGPCI if (xf86Verbose > 2) { @@ -492,9 +498,6 @@ void ix86PciSelectCfgmech(void) ix86Pci0.funcs = &ix86Funcs2; return; - case PCIOsConfig: - return; - case PCIForceNone: break; } diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c index 4846ee0ed..6e33c2550 100644 --- a/hw/xfree86/os-support/bus/linuxPci.c +++ b/hw/xfree86/os-support/bus/linuxPci.c @@ -104,6 +104,7 @@ linuxPciOpenFile(PCITAG tag) static int lbus,ldev,lfunc,fd = -1; int bus, dev, func; char file[32]; + struct stat ignored; bus = PCI_BUS_FROM_TAG(tag); dev = PCI_DEV_FROM_TAG(tag); @@ -111,12 +112,21 @@ linuxPciOpenFile(PCITAG tag) if (fd == -1 || bus != lbus || dev != ldev || func != lfunc) { if (fd != -1) close(fd); - if (bus < 256) - sprintf(file, "/proc/bus/pci/%02x/%02x.%1x", - bus, dev, func); - else - sprintf(file, "/proc/bus/pci/%04x/%02x.%1x", - bus, dev, func); + if (bus < 256) { + if (stat("/proc/bus/pci/00", &ignored) < 0) + sprintf(file, "/proc/bus/pci/0000:%02x/%02x.%1x", + bus, dev, func); + else + sprintf(file, "/proc/bus/pci/%02x/%02x.%1x", + bus, dev, func); + } else { + if (stat("/proc/bus/pci/00", &ignored) < 0) + sprintf(file, "/proc/bus/pci/0000:%04x/%02x.%1x", + bus, dev, func); + else + sprintf(file, "/proc/bus/pci/%04x/%02x.%1x", + bus, dev, func); + } fd = open(file,O_RDWR); lbus = bus; ldev = dev; |