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