1 /* 2 * Port for PPC64 David Engebretsen, IBM Corp. 3 * Contains common pci routines for ppc64 platform, pSeries and iSeries brands. 4 * 5 * Copyright (C) 2003 Anton Blanchard <anton@au.ibm.com>, IBM 6 * Rework, based on alpha PCI code. 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * as published by the Free Software Foundation; either version 11 * 2 of the License, or (at your option) any later version. 12 */ 13 14 #undef DEBUG 15 16 #include <linux/kernel.h> 17 #include <linux/pci.h> 18 #include <linux/string.h> 19 #include <linux/init.h> 20 #include <linux/bootmem.h> 21 #include <linux/mm.h> 22 #include <linux/list.h> 23 #include <linux/syscalls.h> 24 #include <linux/irq.h> 25 26 #include <asm/processor.h> 27 #include <asm/io.h> 28 #include <asm/prom.h> 29 #include <asm/pci-bridge.h> 30 #include <asm/byteorder.h> 31 #include <asm/machdep.h> 32 #include <asm/ppc-pci.h> 33 #include <asm/firmware.h> 34 35 #ifdef DEBUG 36 #include <asm/udbg.h> 37 #define DBG(fmt...) printk(fmt) 38 #else 39 #define DBG(fmt...) 40 #endif 41 42 unsigned long pci_probe_only = 1; 43 int pci_assign_all_buses = 0; 44 45 static void fixup_resource(struct resource *res, struct pci_dev *dev); 46 static void do_bus_setup(struct pci_bus *bus); 47 static void phbs_remap_io(void); 48 49 /* pci_io_base -- the base address from which io bars are offsets. 50 * This is the lowest I/O base address (so bar values are always positive), 51 * and it *must* be the start of ISA space if an ISA bus exists because 52 * ISA drivers use hard coded offsets. If no ISA bus exists a dummy 53 * page is mapped and isa_io_limit prevents access to it. 54 */ 55 unsigned long isa_io_base; /* NULL if no ISA bus */ 56 EXPORT_SYMBOL(isa_io_base); 57 unsigned long pci_io_base; 58 EXPORT_SYMBOL(pci_io_base); 59 60 void iSeries_pcibios_init(void); 61 62 LIST_HEAD(hose_list); 63 64 struct dma_mapping_ops *pci_dma_ops; 65 EXPORT_SYMBOL(pci_dma_ops); 66 67 int global_phb_number; /* Global phb counter */ 68 69 /* Cached ISA bridge dev. */ 70 struct pci_dev *ppc64_isabridge_dev = NULL; 71 EXPORT_SYMBOL_GPL(ppc64_isabridge_dev); 72 73 static void fixup_broken_pcnet32(struct pci_dev* dev) 74 { 75 if ((dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET)) { 76 dev->vendor = PCI_VENDOR_ID_AMD; 77 pci_write_config_word(dev, PCI_VENDOR_ID, PCI_VENDOR_ID_AMD); 78 } 79 } 80 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TRIDENT, PCI_ANY_ID, fixup_broken_pcnet32); 81 82 void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, 83 struct resource *res) 84 { 85 unsigned long offset = 0; 86 struct pci_controller *hose = pci_bus_to_host(dev->bus); 87 88 if (!hose) 89 return; 90 91 if (res->flags & IORESOURCE_IO) 92 offset = (unsigned long)hose->io_base_virt - pci_io_base; 93 94 if (res->flags & IORESOURCE_MEM) 95 offset = hose->pci_mem_offset; 96 97 region->start = res->start - offset; 98 region->end = res->end - offset; 99 } 100 101 void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, 102 struct pci_bus_region *region) 103 { 104 unsigned long offset = 0; 105 struct pci_controller *hose = pci_bus_to_host(dev->bus); 106 107 if (!hose) 108 return; 109 110 if (res->flags & IORESOURCE_IO) 111 offset = (unsigned long)hose->io_base_virt - pci_io_base; 112 113 if (res->flags & IORESOURCE_MEM) 114 offset = hose->pci_mem_offset; 115 116 res->start = region->start + offset; 117 res->end = region->end + offset; 118 } 119 120 #ifdef CONFIG_HOTPLUG 121 EXPORT_SYMBOL(pcibios_resource_to_bus); 122 EXPORT_SYMBOL(pcibios_bus_to_resource); 123 #endif 124 125 /* 126 * We need to avoid collisions with `mirrored' VGA ports 127 * and other strange ISA hardware, so we always want the 128 * addresses to be allocated in the 0x000-0x0ff region 129 * modulo 0x400. 130 * 131 * Why? Because some silly external IO cards only decode 132 * the low 10 bits of the IO address. The 0x00-0xff region 133 * is reserved for motherboard devices that decode all 16 134 * bits, so it's ok to allocate at, say, 0x2800-0x28ff, 135 * but we want to try to avoid allocating at 0x2900-0x2bff 136 * which might have be mirrored at 0x0100-0x03ff.. 137 */ 138 void pcibios_align_resource(void *data, struct resource *res, 139 resource_size_t size, resource_size_t align) 140 { 141 struct pci_dev *dev = data; 142 struct pci_controller *hose = pci_bus_to_host(dev->bus); 143 resource_size_t start = res->start; 144 unsigned long alignto; 145 146 if (res->flags & IORESOURCE_IO) { 147 unsigned long offset = (unsigned long)hose->io_base_virt - 148 pci_io_base; 149 /* Make sure we start at our min on all hoses */ 150 if (start - offset < PCIBIOS_MIN_IO) 151 start = PCIBIOS_MIN_IO + offset; 152 153 /* 154 * Put everything into 0x00-0xff region modulo 0x400 155 */ 156 if (start & 0x300) 157 start = (start + 0x3ff) & ~0x3ff; 158 159 } else if (res->flags & IORESOURCE_MEM) { 160 /* Make sure we start at our min on all hoses */ 161 if (start - hose->pci_mem_offset < PCIBIOS_MIN_MEM) 162 start = PCIBIOS_MIN_MEM + hose->pci_mem_offset; 163 164 /* Align to multiple of size of minimum base. */ 165 alignto = max(0x1000UL, align); 166 start = ALIGN(start, alignto); 167 } 168 169 res->start = start; 170 } 171 172 static DEFINE_SPINLOCK(hose_spinlock); 173 174 /* 175 * pci_controller(phb) initialized common variables. 176 */ 177 static void __devinit pci_setup_pci_controller(struct pci_controller *hose) 178 { 179 memset(hose, 0, sizeof(struct pci_controller)); 180 181 spin_lock(&hose_spinlock); 182 hose->global_number = global_phb_number++; 183 list_add_tail(&hose->list_node, &hose_list); 184 spin_unlock(&hose_spinlock); 185 } 186 187 struct pci_controller * pcibios_alloc_controller(struct device_node *dev) 188 { 189 struct pci_controller *phb; 190 191 if (mem_init_done) 192 phb = kmalloc(sizeof(struct pci_controller), GFP_KERNEL); 193 else 194 phb = alloc_bootmem(sizeof (struct pci_controller)); 195 if (phb == NULL) 196 return NULL; 197 pci_setup_pci_controller(phb); 198 phb->arch_data = dev; 199 phb->is_dynamic = mem_init_done; 200 if (dev) { 201 int nid = of_node_to_nid(dev); 202 203 if (nid < 0 || !node_online(nid)) 204 nid = -1; 205 206 PHB_SET_NODE(phb, nid); 207 } 208 return phb; 209 } 210 211 void pcibios_free_controller(struct pci_controller *phb) 212 { 213 spin_lock(&hose_spinlock); 214 list_del(&phb->list_node); 215 spin_unlock(&hose_spinlock); 216 217 if (phb->is_dynamic) 218 kfree(phb); 219 } 220 221 void __devinit pcibios_claim_one_bus(struct pci_bus *b) 222 { 223 struct pci_dev *dev; 224 struct pci_bus *child_bus; 225 226 list_for_each_entry(dev, &b->devices, bus_list) { 227 int i; 228 229 for (i = 0; i < PCI_NUM_RESOURCES; i++) { 230 struct resource *r = &dev->resource[i]; 231 232 if (r->parent || !r->start || !r->flags) 233 continue; 234 pci_claim_resource(dev, i); 235 } 236 } 237 238 list_for_each_entry(child_bus, &b->children, node) 239 pcibios_claim_one_bus(child_bus); 240 } 241 #ifdef CONFIG_HOTPLUG 242 EXPORT_SYMBOL_GPL(pcibios_claim_one_bus); 243 #endif 244 245 static void __init pcibios_claim_of_setup(void) 246 { 247 struct pci_bus *b; 248 249 if (firmware_has_feature(FW_FEATURE_ISERIES)) 250 return; 251 252 list_for_each_entry(b, &pci_root_buses, node) 253 pcibios_claim_one_bus(b); 254 } 255 256 static u32 get_int_prop(struct device_node *np, const char *name, u32 def) 257 { 258 const u32 *prop; 259 int len; 260 261 prop = get_property(np, name, &len); 262 if (prop && len >= 4) 263 return *prop; 264 return def; 265 } 266 267 static unsigned int pci_parse_of_flags(u32 addr0) 268 { 269 unsigned int flags = 0; 270 271 if (addr0 & 0x02000000) { 272 flags = IORESOURCE_MEM | PCI_BASE_ADDRESS_SPACE_MEMORY; 273 flags |= (addr0 >> 22) & PCI_BASE_ADDRESS_MEM_TYPE_64; 274 flags |= (addr0 >> 28) & PCI_BASE_ADDRESS_MEM_TYPE_1M; 275 if (addr0 & 0x40000000) 276 flags |= IORESOURCE_PREFETCH 277 | PCI_BASE_ADDRESS_MEM_PREFETCH; 278 } else if (addr0 & 0x01000000) 279 flags = IORESOURCE_IO | PCI_BASE_ADDRESS_SPACE_IO; 280 return flags; 281 } 282 283 #define GET_64BIT(prop, i) ((((u64) (prop)[(i)]) << 32) | (prop)[(i)+1]) 284 285 static void pci_parse_of_addrs(struct device_node *node, struct pci_dev *dev) 286 { 287 u64 base, size; 288 unsigned int flags; 289 struct resource *res; 290 const u32 *addrs; 291 u32 i; 292 int proplen; 293 294 addrs = get_property(node, "assigned-addresses", &proplen); 295 if (!addrs) 296 return; 297 DBG(" parse addresses (%d bytes) @ %p\n", proplen, addrs); 298 for (; proplen >= 20; proplen -= 20, addrs += 5) { 299 flags = pci_parse_of_flags(addrs[0]); 300 if (!flags) 301 continue; 302 base = GET_64BIT(addrs, 1); 303 size = GET_64BIT(addrs, 3); 304 if (!size) 305 continue; 306 i = addrs[0] & 0xff; 307 DBG(" base: %llx, size: %llx, i: %x\n", 308 (unsigned long long)base, (unsigned long long)size, i); 309 310 if (PCI_BASE_ADDRESS_0 <= i && i <= PCI_BASE_ADDRESS_5) { 311 res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; 312 } else if (i == dev->rom_base_reg) { 313 res = &dev->resource[PCI_ROM_RESOURCE]; 314 flags |= IORESOURCE_READONLY | IORESOURCE_CACHEABLE; 315 } else { 316 printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i); 317 continue; 318 } 319 res->start = base; 320 res->end = base + size - 1; 321 res->flags = flags; 322 res->name = pci_name(dev); 323 fixup_resource(res, dev); 324 } 325 } 326 327 struct pci_dev *of_create_pci_dev(struct device_node *node, 328 struct pci_bus *bus, int devfn) 329 { 330 struct pci_dev *dev; 331 const char *type; 332 333 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL); 334 if (!dev) 335 return NULL; 336 type = get_property(node, "device_type", NULL); 337 if (type == NULL) 338 type = ""; 339 340 DBG(" create device, devfn: %x, type: %s\n", devfn, type); 341 342 dev->bus = bus; 343 dev->sysdata = node; 344 dev->dev.parent = bus->bridge; 345 dev->dev.bus = &pci_bus_type; 346 dev->devfn = devfn; 347 dev->multifunction = 0; /* maybe a lie? */ 348 349 dev->vendor = get_int_prop(node, "vendor-id", 0xffff); 350 dev->device = get_int_prop(node, "device-id", 0xffff); 351 dev->subsystem_vendor = get_int_prop(node, "subsystem-vendor-id", 0); 352 dev->subsystem_device = get_int_prop(node, "subsystem-id", 0); 353 354 dev->cfg_size = pci_cfg_space_size(dev); 355 356 sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(bus), 357 dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn)); 358 dev->class = get_int_prop(node, "class-code", 0); 359 360 DBG(" class: 0x%x\n", dev->class); 361 362 dev->current_state = 4; /* unknown power state */ 363 364 if (!strcmp(type, "pci") || !strcmp(type, "pciex")) { 365 /* a PCI-PCI bridge */ 366 dev->hdr_type = PCI_HEADER_TYPE_BRIDGE; 367 dev->rom_base_reg = PCI_ROM_ADDRESS1; 368 } else if (!strcmp(type, "cardbus")) { 369 dev->hdr_type = PCI_HEADER_TYPE_CARDBUS; 370 } else { 371 dev->hdr_type = PCI_HEADER_TYPE_NORMAL; 372 dev->rom_base_reg = PCI_ROM_ADDRESS; 373 /* Maybe do a default OF mapping here */ 374 dev->irq = NO_IRQ; 375 } 376 377 pci_parse_of_addrs(node, dev); 378 379 DBG(" adding to system ...\n"); 380 381 pci_device_add(dev, bus); 382 383 /* XXX pci_scan_msi_device(dev); */ 384 385 return dev; 386 } 387 EXPORT_SYMBOL(of_create_pci_dev); 388 389 void __devinit of_scan_bus(struct device_node *node, 390 struct pci_bus *bus) 391 { 392 struct device_node *child = NULL; 393 const u32 *reg; 394 int reglen, devfn; 395 struct pci_dev *dev; 396 397 DBG("of_scan_bus(%s) bus no %d... \n", node->full_name, bus->number); 398 399 while ((child = of_get_next_child(node, child)) != NULL) { 400 DBG(" * %s\n", child->full_name); 401 reg = get_property(child, "reg", ®len); 402 if (reg == NULL || reglen < 20) 403 continue; 404 devfn = (reg[0] >> 8) & 0xff; 405 406 /* create a new pci_dev for this device */ 407 dev = of_create_pci_dev(child, bus, devfn); 408 if (!dev) 409 continue; 410 DBG("dev header type: %x\n", dev->hdr_type); 411 412 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || 413 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) 414 of_scan_pci_bridge(child, dev); 415 } 416 417 do_bus_setup(bus); 418 } 419 EXPORT_SYMBOL(of_scan_bus); 420 421 void __devinit of_scan_pci_bridge(struct device_node *node, 422 struct pci_dev *dev) 423 { 424 struct pci_bus *bus; 425 const u32 *busrange, *ranges; 426 int len, i, mode; 427 struct resource *res; 428 unsigned int flags; 429 u64 size; 430 431 DBG("of_scan_pci_bridge(%s)\n", node->full_name); 432 433 /* parse bus-range property */ 434 busrange = get_property(node, "bus-range", &len); 435 if (busrange == NULL || len != 8) { 436 printk(KERN_DEBUG "Can't get bus-range for PCI-PCI bridge %s\n", 437 node->full_name); 438 return; 439 } 440 ranges = get_property(node, "ranges", &len); 441 if (ranges == NULL) { 442 printk(KERN_DEBUG "Can't get ranges for PCI-PCI bridge %s\n", 443 node->full_name); 444 return; 445 } 446 447 bus = pci_add_new_bus(dev->bus, dev, busrange[0]); 448 if (!bus) { 449 printk(KERN_ERR "Failed to create pci bus for %s\n", 450 node->full_name); 451 return; 452 } 453 454 bus->primary = dev->bus->number; 455 bus->subordinate = busrange[1]; 456 bus->bridge_ctl = 0; 457 bus->sysdata = node; 458 459 /* parse ranges property */ 460 /* PCI #address-cells == 3 and #size-cells == 2 always */ 461 res = &dev->resource[PCI_BRIDGE_RESOURCES]; 462 for (i = 0; i < PCI_NUM_RESOURCES - PCI_BRIDGE_RESOURCES; ++i) { 463 res->flags = 0; 464 bus->resource[i] = res; 465 ++res; 466 } 467 i = 1; 468 for (; len >= 32; len -= 32, ranges += 8) { 469 flags = pci_parse_of_flags(ranges[0]); 470 size = GET_64BIT(ranges, 6); 471 if (flags == 0 || size == 0) 472 continue; 473 if (flags & IORESOURCE_IO) { 474 res = bus->resource[0]; 475 if (res->flags) { 476 printk(KERN_ERR "PCI: ignoring extra I/O range" 477 " for bridge %s\n", node->full_name); 478 continue; 479 } 480 } else { 481 if (i >= PCI_NUM_RESOURCES - PCI_BRIDGE_RESOURCES) { 482 printk(KERN_ERR "PCI: too many memory ranges" 483 " for bridge %s\n", node->full_name); 484 continue; 485 } 486 res = bus->resource[i]; 487 ++i; 488 } 489 res->start = GET_64BIT(ranges, 1); 490 res->end = res->start + size - 1; 491 res->flags = flags; 492 fixup_resource(res, dev); 493 } 494 sprintf(bus->name, "PCI Bus %04x:%02x", pci_domain_nr(bus), 495 bus->number); 496 DBG(" bus name: %s\n", bus->name); 497 498 mode = PCI_PROBE_NORMAL; 499 if (ppc_md.pci_probe_mode) 500 mode = ppc_md.pci_probe_mode(bus); 501 DBG(" probe mode: %d\n", mode); 502 503 if (mode == PCI_PROBE_DEVTREE) 504 of_scan_bus(node, bus); 505 else if (mode == PCI_PROBE_NORMAL) 506 pci_scan_child_bus(bus); 507 } 508 EXPORT_SYMBOL(of_scan_pci_bridge); 509 510 void __devinit scan_phb(struct pci_controller *hose) 511 { 512 struct pci_bus *bus; 513 struct device_node *node = hose->arch_data; 514 int i, mode; 515 struct resource *res; 516 517 DBG("Scanning PHB %s\n", node ? node->full_name : "<NO NAME>"); 518 519 bus = pci_create_bus(hose->parent, hose->first_busno, hose->ops, node); 520 if (bus == NULL) { 521 printk(KERN_ERR "Failed to create bus for PCI domain %04x\n", 522 hose->global_number); 523 return; 524 } 525 bus->secondary = hose->first_busno; 526 hose->bus = bus; 527 528 bus->resource[0] = res = &hose->io_resource; 529 if (res->flags && request_resource(&ioport_resource, res)) 530 printk(KERN_ERR "Failed to request PCI IO region " 531 "on PCI domain %04x\n", hose->global_number); 532 533 for (i = 0; i < 3; ++i) { 534 res = &hose->mem_resources[i]; 535 bus->resource[i+1] = res; 536 if (res->flags && request_resource(&iomem_resource, res)) 537 printk(KERN_ERR "Failed to request PCI memory region " 538 "on PCI domain %04x\n", hose->global_number); 539 } 540 541 mode = PCI_PROBE_NORMAL; 542 543 if (node && ppc_md.pci_probe_mode) 544 mode = ppc_md.pci_probe_mode(bus); 545 DBG(" probe mode: %d\n", mode); 546 if (mode == PCI_PROBE_DEVTREE) { 547 bus->subordinate = hose->last_busno; 548 of_scan_bus(node, bus); 549 } 550 551 if (mode == PCI_PROBE_NORMAL) 552 hose->last_busno = bus->subordinate = pci_scan_child_bus(bus); 553 } 554 555 static int __init pcibios_init(void) 556 { 557 struct pci_controller *hose, *tmp; 558 559 /* For now, override phys_mem_access_prot. If we need it, 560 * later, we may move that initialization to each ppc_md 561 */ 562 ppc_md.phys_mem_access_prot = pci_phys_mem_access_prot; 563 564 if (firmware_has_feature(FW_FEATURE_ISERIES)) 565 iSeries_pcibios_init(); 566 567 printk(KERN_DEBUG "PCI: Probing PCI hardware\n"); 568 569 /* Scan all of the recorded PCI controllers. */ 570 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) { 571 scan_phb(hose); 572 pci_bus_add_devices(hose->bus); 573 } 574 575 if (!firmware_has_feature(FW_FEATURE_ISERIES)) { 576 if (pci_probe_only) 577 pcibios_claim_of_setup(); 578 else 579 /* FIXME: `else' will be removed when 580 pci_assign_unassigned_resources() is able to work 581 correctly with [partially] allocated PCI tree. */ 582 pci_assign_unassigned_resources(); 583 } 584 585 /* Call machine dependent final fixup */ 586 if (ppc_md.pcibios_fixup) 587 ppc_md.pcibios_fixup(); 588 589 /* Cache the location of the ISA bridge (if we have one) */ 590 ppc64_isabridge_dev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL); 591 if (ppc64_isabridge_dev != NULL) 592 printk(KERN_DEBUG "ISA bridge at %s\n", pci_name(ppc64_isabridge_dev)); 593 594 if (!firmware_has_feature(FW_FEATURE_ISERIES)) 595 /* map in PCI I/O space */ 596 phbs_remap_io(); 597 598 printk(KERN_DEBUG "PCI: Probing PCI hardware done\n"); 599 600 return 0; 601 } 602 603 subsys_initcall(pcibios_init); 604 605 char __init *pcibios_setup(char *str) 606 { 607 return str; 608 } 609 610 int pcibios_enable_device(struct pci_dev *dev, int mask) 611 { 612 u16 cmd, oldcmd; 613 int i; 614 615 pci_read_config_word(dev, PCI_COMMAND, &cmd); 616 oldcmd = cmd; 617 618 for (i = 0; i < PCI_NUM_RESOURCES; i++) { 619 struct resource *res = &dev->resource[i]; 620 621 /* Only set up the requested stuff */ 622 if (!(mask & (1<<i))) 623 continue; 624 625 if (res->flags & IORESOURCE_IO) 626 cmd |= PCI_COMMAND_IO; 627 if (res->flags & IORESOURCE_MEM) 628 cmd |= PCI_COMMAND_MEMORY; 629 } 630 631 if (cmd != oldcmd) { 632 printk(KERN_DEBUG "PCI: Enabling device: (%s), cmd %x\n", 633 pci_name(dev), cmd); 634 /* Enable the appropriate bits in the PCI command register. */ 635 pci_write_config_word(dev, PCI_COMMAND, cmd); 636 } 637 return 0; 638 } 639 640 /* 641 * Return the domain number for this bus. 642 */ 643 int pci_domain_nr(struct pci_bus *bus) 644 { 645 if (firmware_has_feature(FW_FEATURE_ISERIES)) 646 return 0; 647 else { 648 struct pci_controller *hose = pci_bus_to_host(bus); 649 650 return hose->global_number; 651 } 652 } 653 654 EXPORT_SYMBOL(pci_domain_nr); 655 656 /* Decide whether to display the domain number in /proc */ 657 int pci_proc_domain(struct pci_bus *bus) 658 { 659 if (firmware_has_feature(FW_FEATURE_ISERIES)) 660 return 0; 661 else { 662 struct pci_controller *hose = pci_bus_to_host(bus); 663 return hose->buid; 664 } 665 } 666 667 /* 668 * Platform support for /proc/bus/pci/X/Y mmap()s, 669 * modelled on the sparc64 implementation by Dave Miller. 670 * -- paulus. 671 */ 672 673 /* 674 * Adjust vm_pgoff of VMA such that it is the physical page offset 675 * corresponding to the 32-bit pci bus offset for DEV requested by the user. 676 * 677 * Basically, the user finds the base address for his device which he wishes 678 * to mmap. They read the 32-bit value from the config space base register, 679 * add whatever PAGE_SIZE multiple offset they wish, and feed this into the 680 * offset parameter of mmap on /proc/bus/pci/XXX for that device. 681 * 682 * Returns negative error code on failure, zero on success. 683 */ 684 static struct resource *__pci_mmap_make_offset(struct pci_dev *dev, 685 unsigned long *offset, 686 enum pci_mmap_state mmap_state) 687 { 688 struct pci_controller *hose = pci_bus_to_host(dev->bus); 689 unsigned long io_offset = 0; 690 int i, res_bit; 691 692 if (hose == 0) 693 return NULL; /* should never happen */ 694 695 /* If memory, add on the PCI bridge address offset */ 696 if (mmap_state == pci_mmap_mem) { 697 *offset += hose->pci_mem_offset; 698 res_bit = IORESOURCE_MEM; 699 } else { 700 io_offset = (unsigned long)hose->io_base_virt - pci_io_base; 701 *offset += io_offset; 702 res_bit = IORESOURCE_IO; 703 } 704 705 /* 706 * Check that the offset requested corresponds to one of the 707 * resources of the device. 708 */ 709 for (i = 0; i <= PCI_ROM_RESOURCE; i++) { 710 struct resource *rp = &dev->resource[i]; 711 int flags = rp->flags; 712 713 /* treat ROM as memory (should be already) */ 714 if (i == PCI_ROM_RESOURCE) 715 flags |= IORESOURCE_MEM; 716 717 /* Active and same type? */ 718 if ((flags & res_bit) == 0) 719 continue; 720 721 /* In the range of this resource? */ 722 if (*offset < (rp->start & PAGE_MASK) || *offset > rp->end) 723 continue; 724 725 /* found it! construct the final physical address */ 726 if (mmap_state == pci_mmap_io) 727 *offset += hose->io_base_phys - io_offset; 728 return rp; 729 } 730 731 return NULL; 732 } 733 734 /* 735 * Set vm_page_prot of VMA, as appropriate for this architecture, for a pci 736 * device mapping. 737 */ 738 static pgprot_t __pci_mmap_set_pgprot(struct pci_dev *dev, struct resource *rp, 739 pgprot_t protection, 740 enum pci_mmap_state mmap_state, 741 int write_combine) 742 { 743 unsigned long prot = pgprot_val(protection); 744 745 /* Write combine is always 0 on non-memory space mappings. On 746 * memory space, if the user didn't pass 1, we check for a 747 * "prefetchable" resource. This is a bit hackish, but we use 748 * this to workaround the inability of /sysfs to provide a write 749 * combine bit 750 */ 751 if (mmap_state != pci_mmap_mem) 752 write_combine = 0; 753 else if (write_combine == 0) { 754 if (rp->flags & IORESOURCE_PREFETCH) 755 write_combine = 1; 756 } 757 758 /* XXX would be nice to have a way to ask for write-through */ 759 prot |= _PAGE_NO_CACHE; 760 if (write_combine) 761 prot &= ~_PAGE_GUARDED; 762 else 763 prot |= _PAGE_GUARDED; 764 765 printk(KERN_DEBUG "PCI map for %s:%lx, prot: %lx\n", pci_name(dev), rp->start, 766 prot); 767 768 return __pgprot(prot); 769 } 770 771 /* 772 * This one is used by /dev/mem and fbdev who have no clue about the 773 * PCI device, it tries to find the PCI device first and calls the 774 * above routine 775 */ 776 pgprot_t pci_phys_mem_access_prot(struct file *file, 777 unsigned long pfn, 778 unsigned long size, 779 pgprot_t protection) 780 { 781 struct pci_dev *pdev = NULL; 782 struct resource *found = NULL; 783 unsigned long prot = pgprot_val(protection); 784 unsigned long offset = pfn << PAGE_SHIFT; 785 int i; 786 787 if (page_is_ram(pfn)) 788 return __pgprot(prot); 789 790 prot |= _PAGE_NO_CACHE | _PAGE_GUARDED; 791 792 for_each_pci_dev(pdev) { 793 for (i = 0; i <= PCI_ROM_RESOURCE; i++) { 794 struct resource *rp = &pdev->resource[i]; 795 int flags = rp->flags; 796 797 /* Active and same type? */ 798 if ((flags & IORESOURCE_MEM) == 0) 799 continue; 800 /* In the range of this resource? */ 801 if (offset < (rp->start & PAGE_MASK) || 802 offset > rp->end) 803 continue; 804 found = rp; 805 break; 806 } 807 if (found) 808 break; 809 } 810 if (found) { 811 if (found->flags & IORESOURCE_PREFETCH) 812 prot &= ~_PAGE_GUARDED; 813 pci_dev_put(pdev); 814 } 815 816 DBG("non-PCI map for %lx, prot: %lx\n", offset, prot); 817 818 return __pgprot(prot); 819 } 820 821 822 /* 823 * Perform the actual remap of the pages for a PCI device mapping, as 824 * appropriate for this architecture. The region in the process to map 825 * is described by vm_start and vm_end members of VMA, the base physical 826 * address is found in vm_pgoff. 827 * The pci device structure is provided so that architectures may make mapping 828 * decisions on a per-device or per-bus basis. 829 * 830 * Returns a negative error code on failure, zero on success. 831 */ 832 int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, 833 enum pci_mmap_state mmap_state, int write_combine) 834 { 835 unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; 836 struct resource *rp; 837 int ret; 838 839 rp = __pci_mmap_make_offset(dev, &offset, mmap_state); 840 if (rp == NULL) 841 return -EINVAL; 842 843 vma->vm_pgoff = offset >> PAGE_SHIFT; 844 vma->vm_page_prot = __pci_mmap_set_pgprot(dev, rp, 845 vma->vm_page_prot, 846 mmap_state, write_combine); 847 848 ret = remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, 849 vma->vm_end - vma->vm_start, vma->vm_page_prot); 850 851 return ret; 852 } 853 854 static ssize_t pci_show_devspec(struct device *dev, 855 struct device_attribute *attr, char *buf) 856 { 857 struct pci_dev *pdev; 858 struct device_node *np; 859 860 pdev = to_pci_dev (dev); 861 np = pci_device_to_OF_node(pdev); 862 if (np == NULL || np->full_name == NULL) 863 return 0; 864 return sprintf(buf, "%s", np->full_name); 865 } 866 static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL); 867 868 void pcibios_add_platform_entries(struct pci_dev *pdev) 869 { 870 device_create_file(&pdev->dev, &dev_attr_devspec); 871 } 872 873 #define ISA_SPACE_MASK 0x1 874 #define ISA_SPACE_IO 0x1 875 876 static void __devinit pci_process_ISA_OF_ranges(struct device_node *isa_node, 877 unsigned long phb_io_base_phys, 878 void __iomem * phb_io_base_virt) 879 { 880 /* Remove these asap */ 881 882 struct pci_address { 883 u32 a_hi; 884 u32 a_mid; 885 u32 a_lo; 886 }; 887 888 struct isa_address { 889 u32 a_hi; 890 u32 a_lo; 891 }; 892 893 struct isa_range { 894 struct isa_address isa_addr; 895 struct pci_address pci_addr; 896 unsigned int size; 897 }; 898 899 const struct isa_range *range; 900 unsigned long pci_addr; 901 unsigned int isa_addr; 902 unsigned int size; 903 int rlen = 0; 904 905 range = get_property(isa_node, "ranges", &rlen); 906 if (range == NULL || (rlen < sizeof(struct isa_range))) { 907 printk(KERN_ERR "no ISA ranges or unexpected isa range size," 908 "mapping 64k\n"); 909 __ioremap_explicit(phb_io_base_phys, 910 (unsigned long)phb_io_base_virt, 911 0x10000, _PAGE_NO_CACHE | _PAGE_GUARDED); 912 return; 913 } 914 915 /* From "ISA Binding to 1275" 916 * The ranges property is laid out as an array of elements, 917 * each of which comprises: 918 * cells 0 - 1: an ISA address 919 * cells 2 - 4: a PCI address 920 * (size depending on dev->n_addr_cells) 921 * cell 5: the size of the range 922 */ 923 if ((range->isa_addr.a_hi && ISA_SPACE_MASK) == ISA_SPACE_IO) { 924 isa_addr = range->isa_addr.a_lo; 925 pci_addr = (unsigned long) range->pci_addr.a_mid << 32 | 926 range->pci_addr.a_lo; 927 928 /* Assume these are both zero */ 929 if ((pci_addr != 0) || (isa_addr != 0)) { 930 printk(KERN_ERR "unexpected isa to pci mapping: %s\n", 931 __FUNCTION__); 932 return; 933 } 934 935 size = PAGE_ALIGN(range->size); 936 937 __ioremap_explicit(phb_io_base_phys, 938 (unsigned long) phb_io_base_virt, 939 size, _PAGE_NO_CACHE | _PAGE_GUARDED); 940 } 941 } 942 943 void __devinit pci_process_bridge_OF_ranges(struct pci_controller *hose, 944 struct device_node *dev, int prim) 945 { 946 const unsigned int *ranges; 947 unsigned int pci_space; 948 unsigned long size; 949 int rlen = 0; 950 int memno = 0; 951 struct resource *res; 952 int np, na = prom_n_addr_cells(dev); 953 unsigned long pci_addr, cpu_phys_addr; 954 955 np = na + 5; 956 957 /* From "PCI Binding to 1275" 958 * The ranges property is laid out as an array of elements, 959 * each of which comprises: 960 * cells 0 - 2: a PCI address 961 * cells 3 or 3+4: a CPU physical address 962 * (size depending on dev->n_addr_cells) 963 * cells 4+5 or 5+6: the size of the range 964 */ 965 ranges = get_property(dev, "ranges", &rlen); 966 if (ranges == NULL) 967 return; 968 hose->io_base_phys = 0; 969 while ((rlen -= np * sizeof(unsigned int)) >= 0) { 970 res = NULL; 971 pci_space = ranges[0]; 972 pci_addr = ((unsigned long)ranges[1] << 32) | ranges[2]; 973 cpu_phys_addr = of_translate_address(dev, &ranges[3]); 974 size = ((unsigned long)ranges[na+3] << 32) | ranges[na+4]; 975 ranges += np; 976 if (size == 0) 977 continue; 978 979 /* Now consume following elements while they are contiguous */ 980 while (rlen >= np * sizeof(unsigned int)) { 981 unsigned long addr, phys; 982 983 if (ranges[0] != pci_space) 984 break; 985 addr = ((unsigned long)ranges[1] << 32) | ranges[2]; 986 phys = ranges[3]; 987 if (na >= 2) 988 phys = (phys << 32) | ranges[4]; 989 if (addr != pci_addr + size || 990 phys != cpu_phys_addr + size) 991 break; 992 993 size += ((unsigned long)ranges[na+3] << 32) 994 | ranges[na+4]; 995 ranges += np; 996 rlen -= np * sizeof(unsigned int); 997 } 998 999 switch ((pci_space >> 24) & 0x3) { 1000 case 1: /* I/O space */ 1001 hose->io_base_phys = cpu_phys_addr; 1002 hose->pci_io_size = size; 1003 1004 res = &hose->io_resource; 1005 res->flags = IORESOURCE_IO; 1006 res->start = pci_addr; 1007 DBG("phb%d: IO 0x%lx -> 0x%lx\n", hose->global_number, 1008 res->start, res->start + size - 1); 1009 break; 1010 case 2: /* memory space */ 1011 memno = 0; 1012 while (memno < 3 && hose->mem_resources[memno].flags) 1013 ++memno; 1014 1015 if (memno == 0) 1016 hose->pci_mem_offset = cpu_phys_addr - pci_addr; 1017 if (memno < 3) { 1018 res = &hose->mem_resources[memno]; 1019 res->flags = IORESOURCE_MEM; 1020 res->start = cpu_phys_addr; 1021 DBG("phb%d: MEM 0x%lx -> 0x%lx\n", hose->global_number, 1022 res->start, res->start + size - 1); 1023 } 1024 break; 1025 } 1026 if (res != NULL) { 1027 res->name = dev->full_name; 1028 res->end = res->start + size - 1; 1029 res->parent = NULL; 1030 res->sibling = NULL; 1031 res->child = NULL; 1032 } 1033 } 1034 } 1035 1036 void __init pci_setup_phb_io(struct pci_controller *hose, int primary) 1037 { 1038 unsigned long size = hose->pci_io_size; 1039 unsigned long io_virt_offset; 1040 struct resource *res; 1041 struct device_node *isa_dn; 1042 1043 hose->io_base_virt = reserve_phb_iospace(size); 1044 DBG("phb%d io_base_phys 0x%lx io_base_virt 0x%lx\n", 1045 hose->global_number, hose->io_base_phys, 1046 (unsigned long) hose->io_base_virt); 1047 1048 if (primary) { 1049 pci_io_base = (unsigned long)hose->io_base_virt; 1050 isa_dn = of_find_node_by_type(NULL, "isa"); 1051 if (isa_dn) { 1052 isa_io_base = pci_io_base; 1053 pci_process_ISA_OF_ranges(isa_dn, hose->io_base_phys, 1054 hose->io_base_virt); 1055 of_node_put(isa_dn); 1056 } 1057 } 1058 1059 io_virt_offset = (unsigned long)hose->io_base_virt - pci_io_base; 1060 res = &hose->io_resource; 1061 res->start += io_virt_offset; 1062 res->end += io_virt_offset; 1063 } 1064 1065 void __devinit pci_setup_phb_io_dynamic(struct pci_controller *hose, 1066 int primary) 1067 { 1068 unsigned long size = hose->pci_io_size; 1069 unsigned long io_virt_offset; 1070 struct resource *res; 1071 1072 hose->io_base_virt = __ioremap(hose->io_base_phys, size, 1073 _PAGE_NO_CACHE | _PAGE_GUARDED); 1074 DBG("phb%d io_base_phys 0x%lx io_base_virt 0x%lx\n", 1075 hose->global_number, hose->io_base_phys, 1076 (unsigned long) hose->io_base_virt); 1077 1078 if (primary) 1079 pci_io_base = (unsigned long)hose->io_base_virt; 1080 1081 io_virt_offset = (unsigned long)hose->io_base_virt - pci_io_base; 1082 res = &hose->io_resource; 1083 res->start += io_virt_offset; 1084 res->end += io_virt_offset; 1085 } 1086 1087 1088 static int get_bus_io_range(struct pci_bus *bus, unsigned long *start_phys, 1089 unsigned long *start_virt, unsigned long *size) 1090 { 1091 struct pci_controller *hose = pci_bus_to_host(bus); 1092 struct pci_bus_region region; 1093 struct resource *res; 1094 1095 if (bus->self) { 1096 res = bus->resource[0]; 1097 pcibios_resource_to_bus(bus->self, ®ion, res); 1098 *start_phys = hose->io_base_phys + region.start; 1099 *start_virt = (unsigned long) hose->io_base_virt + 1100 region.start; 1101 if (region.end > region.start) 1102 *size = region.end - region.start + 1; 1103 else { 1104 printk("%s(): unexpected region 0x%lx->0x%lx\n", 1105 __FUNCTION__, region.start, region.end); 1106 return 1; 1107 } 1108 1109 } else { 1110 /* Root Bus */ 1111 res = &hose->io_resource; 1112 *start_phys = hose->io_base_phys; 1113 *start_virt = (unsigned long) hose->io_base_virt; 1114 if (res->end > res->start) 1115 *size = res->end - res->start + 1; 1116 else { 1117 printk("%s(): unexpected region 0x%lx->0x%lx\n", 1118 __FUNCTION__, res->start, res->end); 1119 return 1; 1120 } 1121 } 1122 1123 return 0; 1124 } 1125 1126 int unmap_bus_range(struct pci_bus *bus) 1127 { 1128 unsigned long start_phys; 1129 unsigned long start_virt; 1130 unsigned long size; 1131 1132 if (!bus) { 1133 printk(KERN_ERR "%s() expected bus\n", __FUNCTION__); 1134 return 1; 1135 } 1136 1137 if (get_bus_io_range(bus, &start_phys, &start_virt, &size)) 1138 return 1; 1139 if (__iounmap_explicit((void __iomem *) start_virt, size)) 1140 return 1; 1141 1142 return 0; 1143 } 1144 EXPORT_SYMBOL(unmap_bus_range); 1145 1146 int remap_bus_range(struct pci_bus *bus) 1147 { 1148 unsigned long start_phys; 1149 unsigned long start_virt; 1150 unsigned long size; 1151 1152 if (!bus) { 1153 printk(KERN_ERR "%s() expected bus\n", __FUNCTION__); 1154 return 1; 1155 } 1156 1157 1158 if (get_bus_io_range(bus, &start_phys, &start_virt, &size)) 1159 return 1; 1160 if (start_phys == 0) 1161 return 1; 1162 printk(KERN_DEBUG "mapping IO %lx -> %lx, size: %lx\n", start_phys, start_virt, size); 1163 if (__ioremap_explicit(start_phys, start_virt, size, 1164 _PAGE_NO_CACHE | _PAGE_GUARDED)) 1165 return 1; 1166 1167 return 0; 1168 } 1169 EXPORT_SYMBOL(remap_bus_range); 1170 1171 static void phbs_remap_io(void) 1172 { 1173 struct pci_controller *hose, *tmp; 1174 1175 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) 1176 remap_bus_range(hose->bus); 1177 } 1178 1179 static void __devinit fixup_resource(struct resource *res, struct pci_dev *dev) 1180 { 1181 struct pci_controller *hose = pci_bus_to_host(dev->bus); 1182 unsigned long offset; 1183 1184 if (res->flags & IORESOURCE_IO) { 1185 offset = (unsigned long)hose->io_base_virt - pci_io_base; 1186 1187 res->start += offset; 1188 res->end += offset; 1189 } else if (res->flags & IORESOURCE_MEM) { 1190 res->start += hose->pci_mem_offset; 1191 res->end += hose->pci_mem_offset; 1192 } 1193 } 1194 1195 void __devinit pcibios_fixup_device_resources(struct pci_dev *dev, 1196 struct pci_bus *bus) 1197 { 1198 /* Update device resources. */ 1199 int i; 1200 1201 for (i = 0; i < PCI_NUM_RESOURCES; i++) 1202 if (dev->resource[i].flags) 1203 fixup_resource(&dev->resource[i], dev); 1204 } 1205 EXPORT_SYMBOL(pcibios_fixup_device_resources); 1206 1207 void __devinit pcibios_setup_new_device(struct pci_dev *dev) 1208 { 1209 struct dev_archdata *sd = &dev->dev.archdata; 1210 1211 sd->of_node = pci_device_to_OF_node(dev); 1212 1213 DBG("PCI device %s OF node: %s\n", pci_name(dev), 1214 sd->of_node ? sd->of_node->full_name : "<none>"); 1215 1216 sd->dma_ops = pci_dma_ops; 1217 #ifdef CONFIG_NUMA 1218 sd->numa_node = pcibus_to_node(dev->bus); 1219 #else 1220 sd->numa_node = -1; 1221 #endif 1222 if (ppc_md.pci_dma_dev_setup) 1223 ppc_md.pci_dma_dev_setup(dev); 1224 } 1225 EXPORT_SYMBOL(pcibios_setup_new_device); 1226 1227 static void __devinit do_bus_setup(struct pci_bus *bus) 1228 { 1229 struct pci_dev *dev; 1230 1231 if (ppc_md.pci_dma_bus_setup) 1232 ppc_md.pci_dma_bus_setup(bus); 1233 1234 list_for_each_entry(dev, &bus->devices, bus_list) 1235 pcibios_setup_new_device(dev); 1236 1237 /* Read default IRQs and fixup if necessary */ 1238 list_for_each_entry(dev, &bus->devices, bus_list) { 1239 pci_read_irq_line(dev); 1240 if (ppc_md.pci_irq_fixup) 1241 ppc_md.pci_irq_fixup(dev); 1242 } 1243 } 1244 1245 void __devinit pcibios_fixup_bus(struct pci_bus *bus) 1246 { 1247 struct pci_dev *dev = bus->self; 1248 struct device_node *np; 1249 1250 np = pci_bus_to_OF_node(bus); 1251 1252 DBG("pcibios_fixup_bus(%s)\n", np ? np->full_name : "<???>"); 1253 1254 if (dev && pci_probe_only && 1255 (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { 1256 /* This is a subordinate bridge */ 1257 1258 pci_read_bridge_bases(bus); 1259 pcibios_fixup_device_resources(dev, bus); 1260 } 1261 1262 do_bus_setup(bus); 1263 1264 if (!pci_probe_only) 1265 return; 1266 1267 list_for_each_entry(dev, &bus->devices, bus_list) 1268 if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) 1269 pcibios_fixup_device_resources(dev, bus); 1270 } 1271 EXPORT_SYMBOL(pcibios_fixup_bus); 1272 1273 /* 1274 * Reads the interrupt pin to determine if interrupt is use by card. 1275 * If the interrupt is used, then gets the interrupt line from the 1276 * openfirmware and sets it in the pci_dev and pci_config line. 1277 */ 1278 int pci_read_irq_line(struct pci_dev *pci_dev) 1279 { 1280 struct of_irq oirq; 1281 unsigned int virq; 1282 1283 DBG("Try to map irq for %s...\n", pci_name(pci_dev)); 1284 1285 #ifdef DEBUG 1286 memset(&oirq, 0xff, sizeof(oirq)); 1287 #endif 1288 /* Try to get a mapping from the device-tree */ 1289 if (of_irq_map_pci(pci_dev, &oirq)) { 1290 u8 line, pin; 1291 1292 /* If that fails, lets fallback to what is in the config 1293 * space and map that through the default controller. We 1294 * also set the type to level low since that's what PCI 1295 * interrupts are. If your platform does differently, then 1296 * either provide a proper interrupt tree or don't use this 1297 * function. 1298 */ 1299 if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_PIN, &pin)) 1300 return -1; 1301 if (pin == 0) 1302 return -1; 1303 if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &line) || 1304 line == 0xff) { 1305 return -1; 1306 } 1307 DBG(" -> no map ! Using irq line %d from PCI config\n", line); 1308 1309 virq = irq_create_mapping(NULL, line); 1310 if (virq != NO_IRQ) 1311 set_irq_type(virq, IRQ_TYPE_LEVEL_LOW); 1312 } else { 1313 DBG(" -> got one, spec %d cells (0x%08x 0x%08x...) on %s\n", 1314 oirq.size, oirq.specifier[0], oirq.specifier[1], 1315 oirq.controller->full_name); 1316 1317 virq = irq_create_of_mapping(oirq.controller, oirq.specifier, 1318 oirq.size); 1319 } 1320 if(virq == NO_IRQ) { 1321 DBG(" -> failed to map !\n"); 1322 return -1; 1323 } 1324 1325 DBG(" -> mapped to linux irq %d\n", virq); 1326 1327 pci_dev->irq = virq; 1328 pci_write_config_byte(pci_dev, PCI_INTERRUPT_LINE, virq); 1329 1330 return 0; 1331 } 1332 EXPORT_SYMBOL(pci_read_irq_line); 1333 1334 void pci_resource_to_user(const struct pci_dev *dev, int bar, 1335 const struct resource *rsrc, 1336 u64 *start, u64 *end) 1337 { 1338 struct pci_controller *hose = pci_bus_to_host(dev->bus); 1339 unsigned long offset = 0; 1340 1341 if (hose == NULL) 1342 return; 1343 1344 if (rsrc->flags & IORESOURCE_IO) 1345 offset = pci_io_base - (unsigned long)hose->io_base_virt + 1346 hose->io_base_phys; 1347 1348 *start = rsrc->start + offset; 1349 *end = rsrc->end + offset; 1350 } 1351 1352 struct pci_controller* pci_find_hose_for_OF_device(struct device_node* node) 1353 { 1354 if (!have_of) 1355 return NULL; 1356 while(node) { 1357 struct pci_controller *hose, *tmp; 1358 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) 1359 if (hose->arch_data == node) 1360 return hose; 1361 node = node->parent; 1362 } 1363 return NULL; 1364 } 1365 1366 unsigned long pci_address_to_pio(phys_addr_t address) 1367 { 1368 struct pci_controller *hose, *tmp; 1369 1370 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) { 1371 if (address >= hose->io_base_phys && 1372 address < (hose->io_base_phys + hose->pci_io_size)) { 1373 unsigned long base = 1374 (unsigned long)hose->io_base_virt - pci_io_base; 1375 return base + (address - hose->io_base_phys); 1376 } 1377 } 1378 return (unsigned int)-1; 1379 } 1380 EXPORT_SYMBOL_GPL(pci_address_to_pio); 1381 1382 1383 #define IOBASE_BRIDGE_NUMBER 0 1384 #define IOBASE_MEMORY 1 1385 #define IOBASE_IO 2 1386 #define IOBASE_ISA_IO 3 1387 #define IOBASE_ISA_MEM 4 1388 1389 long sys_pciconfig_iobase(long which, unsigned long in_bus, 1390 unsigned long in_devfn) 1391 { 1392 struct pci_controller* hose; 1393 struct list_head *ln; 1394 struct pci_bus *bus = NULL; 1395 struct device_node *hose_node; 1396 1397 /* Argh ! Please forgive me for that hack, but that's the 1398 * simplest way to get existing XFree to not lockup on some 1399 * G5 machines... So when something asks for bus 0 io base 1400 * (bus 0 is HT root), we return the AGP one instead. 1401 */ 1402 if (machine_is_compatible("MacRISC4")) 1403 if (in_bus == 0) 1404 in_bus = 0xf0; 1405 1406 /* That syscall isn't quite compatible with PCI domains, but it's 1407 * used on pre-domains setup. We return the first match 1408 */ 1409 1410 for (ln = pci_root_buses.next; ln != &pci_root_buses; ln = ln->next) { 1411 bus = pci_bus_b(ln); 1412 if (in_bus >= bus->number && in_bus < (bus->number + bus->subordinate)) 1413 break; 1414 bus = NULL; 1415 } 1416 if (bus == NULL || bus->sysdata == NULL) 1417 return -ENODEV; 1418 1419 hose_node = (struct device_node *)bus->sysdata; 1420 hose = PCI_DN(hose_node)->phb; 1421 1422 switch (which) { 1423 case IOBASE_BRIDGE_NUMBER: 1424 return (long)hose->first_busno; 1425 case IOBASE_MEMORY: 1426 return (long)hose->pci_mem_offset; 1427 case IOBASE_IO: 1428 return (long)hose->io_base_phys; 1429 case IOBASE_ISA_IO: 1430 return (long)isa_io_base; 1431 case IOBASE_ISA_MEM: 1432 return -EINVAL; 1433 } 1434 1435 return -EOPNOTSUPP; 1436 } 1437 1438 #ifdef CONFIG_NUMA 1439 int pcibus_to_node(struct pci_bus *bus) 1440 { 1441 struct pci_controller *phb = pci_bus_to_host(bus); 1442 return phb->node; 1443 } 1444 EXPORT_SYMBOL(pcibus_to_node); 1445 #endif 1446