/* * Search for the biggest gap in the low 32 bits of the e820 * memory space. We pass this space to PCI to assign MMIO resources * for hotplug or unconfigured devices in. * Hopefully the BIOS let enough space left. */ __init void e820_setup_gap(void) { unsigned long gapstart, gapsize, round; int found; gapstart = 0x10000000; gapsize = 0x400000; found = e820_search_gap(&gapstart, &gapsize, 0, MAX_GAP_END); #ifdef CONFIG_X86_64 if (!found) { gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024; printk(KERN_ERR "PCI: Warning: Cannot find a gap in the 32bit " "address range\n" KERN_ERR "PCI: Unassigned devices with 32bit resource " "registers may break!\n"); } #endif /* * See how much we want to round up: start off with * rounding to the next 1MB area. */ round = 0x100000; while ((gapsize >> 4) > round) round += round; /* Fun with two's complement */ pci_mem_start = (gapstart + round) & -round; printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n", pci_mem_start, gapstart, gapsize); }
__init void e820_setup_gap(void) { unsigned long gapstart, gapsize; int found; gapstart = 0x10000000; gapsize = 0x400000; found = e820_search_gap(&gapstart, &gapsize, 0, MAX_GAP_END); #ifdef CONFIG_X86_64 if (!found) { gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024; printk(KERN_ERR "PCI: Warning: Cannot find a gap in the 32bit address range\n" "PCI: Unassigned devices with 32bit resource registers may break!\n"); } #endif pci_mem_start = gapstart; printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n", pci_mem_start, gapstart, gapsize); }