resPtr xf86PciBusAccWindowsFromOS(void) { pciConfigPtr *ppPCI, pPCI; resPtr pRes = NULL; resRange range; unsigned long io_size, mem_size; int domain; if ((ppPCI = xf86scanpci(0))) { for (; (pPCI = *ppPCI); ppPCI++) { if ((pPCI->pci_base_class != PCI_CLASS_BRIDGE) || (pPCI->pci_sub_class != PCI_SUBCLASS_BRIDGE_HOST)) continue; domain = xf86GetPciDomain(pPCI->tag); linuxGetSizes(pPCI->tag, &io_size, &mem_size); RANGE(range, 0, (ADDRESS)(mem_size - 1), RANGE_TYPE(ResExcMemBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); RANGE(range, 0, (IOADDRESS)(io_size - 1), RANGE_TYPE(ResExcIoBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); if (domain <= 0) break; } } return pRes; }
resPtr xf86BusAccWindowsFromOS(void) { resPtr ret = NULL; resRange range; RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock); ret = xf86AddResToList(ret, &range, -1); return ret; }
/* Retrieves a list of the resources routed to a host bridge's secondary bus */ static void Get460GXBridgeResources(int bus, pointer *ppIoRes, pointer *ppMemRes, pointer *ppPmemRes) { pciConfigPtr pPCI = Verify460GXBus(bus); resRange range; unsigned int i, j; if (ppIoRes) { xf86FreeResList(*ppIoRes); *ppIoRes = NULL; if (pPCI) { for (i = 0; i <= 0x0F; i++) { if (iomap_460gx[i] != pPCI->devnum) continue; RANGE(range, i << 12, ((i + 1) << 12) - 1, RANGE_TYPE(ResExcIoBlock, 0)); *ppIoRes = xf86AddResToList(*ppIoRes, &range, -1); } } } if (ppMemRes) { xf86FreeResList(*ppMemRes); *ppMemRes = NULL; if (pPCI) { if (!(i = (pPCI->devnum - 0x10))) j = 127; /* (4GB - 32M) / 32M */ else j = pcis_460gx[i - 1] & 0x7F; i = pcis_460gx[i] & 0x7F; if (i < j) { RANGE(range, i << 25, (j << 25) - 1, RANGE_TYPE(ResExcMemBlock, 0)); *ppMemRes = xf86AddResToList(*ppMemRes, &range, -1); } } } if (ppPmemRes) { xf86FreeResList(*ppPmemRes); *ppPmemRes = NULL; } }
resPtr xf86IsaBusAccWindowsFromOS(void) { resPtr ret = NULL; resRange range; RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); #if defined(__sparc__) || defined(__powerpc__) RANGE(range, 0x00000000, 0x00ffffff, ResExcIoBlock); #else RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock); #endif ret = xf86AddResToList(ret, &range, -1); return ret; }
resPtr xf86AccResFromOS(resPtr ret) { resRange range; /* * Fallback is to claim the following areas: * * 0x000c0000 - 0x000effff location of VGA and other extensions ROMS */ RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); /* * Fallback would be to claim well known ports in the 0x0 - 0x3ff range * along with their sparse I/O aliases, but that's too imprecise. Instead * claim a bare minimum here. */ RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock); /* For mainboard */ ret = xf86AddResToList(ret, &range, -1); /* * At minimum, the top and bottom resources must be claimed, so that * resources that are (or appear to be) unallocated can be relocated. */ RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); /* RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock); ret = xf86AddResToList(ret, &range, -1); */ RANGE(range, 0xffffffff, 0xffffffff, ResExcIoBlock); ret = xf86AddResToList(ret, &range, -1); /* XXX add others */ return ret; }
resPtr xf86AccResFromOS(resPtr ret) { resRange range; /* * At minimum, the top and bottom resources must be claimed, so that * resources that are (or appear to be) unallocated can be relocated. */ RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock); ret = xf86AddResToList(ret, &range, -1); #if defined(__sparc__) || defined(__powerpc__) RANGE(range, 0x00ffffff, 0x00ffffff, ResExcIoBlock); #else RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock); #endif ret = xf86AddResToList(ret, &range, -1); return ret; }
resPtr xf86AccResFromOS(resPtr pRes) { pciConfigPtr *ppPCI, pPCI; resRange range; unsigned long io_size, mem_size; int domain; if ((ppPCI = xf86scanpci(0))) { for (; (pPCI = *ppPCI); ppPCI++) { if ((pPCI->pci_base_class != PCI_CLASS_BRIDGE) || (pPCI->pci_sub_class != PCI_SUBCLASS_BRIDGE_HOST)) continue; domain = xf86GetPciDomain(pPCI->tag); linuxGetSizes(pPCI->tag, &io_size, &mem_size); /* * At minimum, the top and bottom resources must be claimed, so * that resources that are (or appear to be) unallocated can be * relocated. */ RANGE(range, 0x00000000u, 0x0009ffffu, RANGE_TYPE(ResExcMemBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); RANGE(range, 0x000c0000u, 0x000effffu, RANGE_TYPE(ResExcMemBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); RANGE(range, 0x000f0000u, 0x000fffffu, RANGE_TYPE(ResExcMemBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); RANGE(range, (ADDRESS)(mem_size - 1), (ADDRESS)(mem_size - 1), RANGE_TYPE(ResExcMemBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); RANGE(range, 0x00000000u, 0x00000000u, RANGE_TYPE(ResExcIoBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); RANGE(range, (IOADDRESS)(io_size - 1), (IOADDRESS)(io_size - 1), RANGE_TYPE(ResExcIoBlock, domain)); pRes = xf86AddResToList(pRes, &range, -1); if (domain <= 0) break; } } return pRes; }
resPtr xf86PciBusAccWindowsFromOS(void) { resPtr ret = NULL; resRange range; /* * On the Alpha the first 16MB of every 128 Mb segment in * sparse address space are an image of the ISA bus range */ if (_bus_base_sparse()) { RANGE(range, 0x00000000, 0x07ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x09000000, 0x0fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x11000000, 0x17ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x19000000, 0x1fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x21000000, 0x27ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x29000000, 0x2fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x31000000, 0x37ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x39000000, 0x3fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x41000000, 0x47ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x49000000, 0x4fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x51000000, 0x57ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x59000000, 0x5fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x61000000, 0x67ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x69000000, 0x6fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x71000000, 0x77ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x79000000, 0x7fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x81000000, 0x87ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x89000000, 0x8fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x91000000, 0x97ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0x99000000, 0x9fffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xa1000000, 0xa7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xa9000000, 0xafffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xb1000000, 0xb7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xb9000000, 0xbfffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xc1000000, 0xc7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xc9000000, 0xcfffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xd1000000, 0xd7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xd9000000, 0xdfffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xe1000000, 0xe7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xe9000000, 0xefffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xf1000000, 0xf7ffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); RANGE(range, 0xf9000000, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); } else { RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock); ret = xf86AddResToList(ret, &range, -1); } RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock); ret = xf86AddResToList(ret, &range, -1); return ret; }