summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel/io
diff options
context:
space:
mode:
authorJudy Chen <Judy.Chen@Sun.COM>2009-03-31 06:39:29 +0800
committerJudy Chen <Judy.Chen@Sun.COM>2009-03-31 06:39:29 +0800
commit1d6b7b3468e77d09221cfa23fe192cefcdb432c9 (patch)
treea01a8071d1df79e22248b25753931ebe811f46bb /usr/src/uts/intel/io
parent73a0bd151c1115bf39cc2caa30c7cbfdd86361c1 (diff)
downloadillumos-gate-1d6b7b3468e77d09221cfa23fe192cefcdb432c9.tar.gz
6821665 WARNING: kb8042: inconsistent getinfo(9E) implementation
6822266 2009-03-25 nightly bits hang x2200 m2 system 6822869 potential address conflict: used isa resources haven't been removed from available bus resources
Diffstat (limited to 'usr/src/uts/intel/io')
-rw-r--r--usr/src/uts/intel/io/pci/pci_boot.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/usr/src/uts/intel/io/pci/pci_boot.c b/usr/src/uts/intel/io/pci/pci_boot.c
index fe962be16e..014614760f 100644
--- a/usr/src/uts/intel/io/pci/pci_boot.c
+++ b/usr/src/uts/intel/io/pci/pci_boot.c
@@ -124,6 +124,15 @@ extern int pci_slot_names_prop(int, char *, int);
int pci_bus_always_renumber = 0;
/*
+ * used to register ISA resource usage which must not be made
+ * "available" from other PCI node' resource maps
+ */
+static struct {
+ struct memlist *io_ports_used;
+ struct memlist *mem_space_used;
+} isa_res;
+
+/*
* Enumerate all PCI devices
*/
void
@@ -299,21 +308,11 @@ pci_renumber_root_busses(void)
}
void
-pci_remove_isa_resources(int type, uint32_t base, uint32_t size)
+pci_register_isa_resources(int type, uint32_t base, uint32_t size)
{
- int bus;
- struct memlist **list;
-
- for (bus = 0; bus <= pci_bios_nbus; bus++) {
- if (type == 1)
- list = &pci_bus_res[bus].io_ports;
- else
- list = &pci_bus_res[bus].mem_space;
- /* skip if list is or has become empty */
- if (*list == NULL)
- continue;
- (void) memlist_remove(list, base, size);
- }
+ (void) memlist_insert(
+ (type == 1) ? &isa_res.io_ports_used : &isa_res.mem_space_used,
+ base, size);
}
/*
@@ -908,7 +907,7 @@ pci_reprogram(void)
/*
- * 2. Remove the used resource lists from the bus resources
+ * 2. Remove used PCI and ISA resources from bus resource map
*/
memlist_remove_list(&pci_bus_res[bus].io_ports,
@@ -921,8 +920,15 @@ pci_reprogram(void)
pci_bus_res[bus].pmem_space_used);
memlist_remove_list(&pci_bus_res[bus].pmem_space,
pci_bus_res[bus].mem_space_used);
+
+ memlist_remove_list(&pci_bus_res[bus].io_ports,
+ isa_res.io_ports_used);
+ memlist_remove_list(&pci_bus_res[bus].mem_space,
+ isa_res.mem_space_used);
}
+ memlist_free_all(&isa_res.io_ports_used);
+ memlist_free_all(&isa_res.mem_space_used);
/* add bus-range property for root/peer bus nodes */
for (i = 0; i <= pci_bios_nbus; i++) {