|
@@ -1098,35 +1098,24 @@ static int get_bus_io_range(struct pci_bus *bus, unsigned long *start_phys,
|
|
unsigned long *start_virt, unsigned long *size)
|
|
unsigned long *start_virt, unsigned long *size)
|
|
{
|
|
{
|
|
struct pci_controller *hose = pci_bus_to_host(bus);
|
|
struct pci_controller *hose = pci_bus_to_host(bus);
|
|
- struct pci_bus_region region;
|
|
|
|
struct resource *res;
|
|
struct resource *res;
|
|
|
|
|
|
- if (bus->self) {
|
|
|
|
|
|
+ if (bus->self)
|
|
res = bus->resource[0];
|
|
res = bus->resource[0];
|
|
- pcibios_resource_to_bus(bus->self, ®ion, res);
|
|
|
|
- *start_phys = hose->io_base_phys + region.start;
|
|
|
|
- *start_virt = (unsigned long) hose->io_base_virt +
|
|
|
|
- region.start;
|
|
|
|
- if (region.end > region.start)
|
|
|
|
- *size = region.end - region.start + 1;
|
|
|
|
- else {
|
|
|
|
- printk("%s(): unexpected region 0x%lx->0x%lx\n",
|
|
|
|
- __FUNCTION__, region.start, region.end);
|
|
|
|
- return 1;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
|
|
+ else
|
|
/* Root Bus */
|
|
/* Root Bus */
|
|
res = &hose->io_resource;
|
|
res = &hose->io_resource;
|
|
- *start_phys = hose->io_base_phys + res->start;
|
|
|
|
- *start_virt = (unsigned long) hose->io_base_virt + res->start;
|
|
|
|
- if (res->end > res->start)
|
|
|
|
- *size = res->end - res->start + 1;
|
|
|
|
- else {
|
|
|
|
- printk("%s(): unexpected region 0x%lx->0x%lx\n",
|
|
|
|
- __FUNCTION__, res->start, res->end);
|
|
|
|
- return 1;
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ *start_virt = pci_io_base + res->start;
|
|
|
|
+ *start_phys = *start_virt + hose->io_base_phys
|
|
|
|
+ - (unsigned long) hose->io_base_virt;
|
|
|
|
+
|
|
|
|
+ if (res->end > res->start)
|
|
|
|
+ *size = res->end - res->start + 1;
|
|
|
|
+ else {
|
|
|
|
+ printk("%s(): unexpected region 0x%lx->0x%lx\n",
|
|
|
|
+ __FUNCTION__, res->start, res->end);
|
|
|
|
+ return 1;
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|