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