[SeaBIOS] [PATCH 2/4] pciinit: make pci ressources configurable
Gerd Hoffmann
kraxel at redhat.com
Thu Jun 7 10:34:32 CEST 2012
This patch adds variables for the pci io window, so they are
runtime-configurable. They are initialized with the values
from config.h
Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
---
src/pci.h | 2 ++
src/pciinit.c | 15 ++++++++++-----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/pci.h b/src/pci.h
index 6be838c..ebf934c 100644
--- a/src/pci.h
+++ b/src/pci.h
@@ -56,6 +56,8 @@ struct pci_device {
// Local information on device.
int have_driver;
};
+extern u64 pcimem_start, pcimem_end;
+extern u64 pcimem64_start, pcimem64_end;
extern struct pci_device *PCIDevices;
extern int MaxPCIBus;
int pci_probe_host(void);
diff --git a/src/pciinit.c b/src/pciinit.c
index 8452572..dc33f83 100644
--- a/src/pciinit.c
+++ b/src/pciinit.c
@@ -30,6 +30,11 @@ static const char *region_type_name[] = {
[ PCI_REGION_TYPE_PREFMEM ] = "prefmem",
};
+u64 pcimem_start = BUILD_PCIMEM_START;
+u64 pcimem_end = BUILD_PCIMEM_END;
+u64 pcimem64_start = BUILD_PCIMEM64_START;
+u64 pcimem64_end = BUILD_PCIMEM64_END;
+
struct pci_region_entry {
struct pci_device *dev;
int bar;
@@ -520,13 +525,13 @@ static int pci_bios_init_root_regions(struct pci_bus *bus)
}
u64 sum = pci_region_sum(r_end);
u64 align = pci_region_align(r_end);
- r_end->base = ALIGN_DOWN((BUILD_PCIMEM_END - sum), align);
+ r_end->base = ALIGN_DOWN((pcimem_end - sum), align);
sum = pci_region_sum(r_start);
align = pci_region_align(r_start);
r_start->base = ALIGN_DOWN((r_end->base - sum), align);
- if ((r_start->base < BUILD_PCIMEM_START) ||
- (r_start->base > BUILD_PCIMEM_END))
+ if ((r_start->base < pcimem_start) ||
+ (r_start->base > pcimem_end))
// Memory range requested is larger than available.
return -1;
return 0;
@@ -599,11 +604,11 @@ static void pci_bios_map_devices(struct pci_bus *busses)
if (pci_bios_init_root_regions(busses))
panic("PCI: out of 32bit address space\n");
- r64_mem.base = BUILD_PCIMEM64_START;
+ r64_mem.base = pcimem64_start;
u64 sum = pci_region_sum(&r64_mem);
u64 align = pci_region_align(&r64_pref);
r64_pref.base = ALIGN(r64_mem.base + sum, align);
- if (r64_pref.base + pci_region_sum(&r64_pref) > BUILD_PCIMEM64_END)
+ if (r64_pref.base + pci_region_sum(&r64_pref) > pcimem64_end)
panic("PCI: out of 64bit address space\n");
pci_region_map_entries(busses, &r64_mem);
pci_region_map_entries(busses, &r64_pref);
--
1.7.1
More information about the SeaBIOS
mailing list