Commit | Line | Data |
---|---|---|
1f21d2bd BM |
1 | /* |
2 | * This file is subject to the terms and conditions of the GNU General Public | |
3 | * License. See the file "COPYING" in the main directory of this archive | |
4 | * for more details. | |
5 | * | |
6 | * Copyright (C) 2000, 2001, 04 Keith M Wesolowski | |
7 | */ | |
1f21d2bd | 8 | #include <linux/init.h> |
89becf5c | 9 | #include <linux/kernel.h> |
1f21d2bd BM |
10 | #include <linux/pci.h> |
11 | #include <linux/types.h> | |
89becf5c | 12 | |
b27418aa | 13 | #include <asm/lasat/lasat.h> |
89becf5c YY |
14 | |
15 | #include <irq.h> | |
1f21d2bd BM |
16 | |
17 | extern struct pci_ops nile4_pci_ops; | |
18 | extern struct pci_ops gt64xxx_pci0_ops; | |
19 | static struct resource lasat_pci_mem_resource = { | |
20 | .name = "LASAT PCI MEM", | |
21 | .start = 0x18000000, | |
22 | .end = 0x19ffffff, | |
23 | .flags = IORESOURCE_MEM, | |
24 | }; | |
25 | ||
26 | static struct resource lasat_pci_io_resource = { | |
27 | .name = "LASAT PCI IO", | |
28 | .start = 0x1a000000, | |
29 | .end = 0x1bffffff, | |
30 | .flags = IORESOURCE_IO, | |
31 | }; | |
32 | ||
33 | static struct pci_controller lasat_pci_controller = { | |
34 | .mem_resource = &lasat_pci_mem_resource, | |
35 | .io_resource = &lasat_pci_io_resource, | |
36 | }; | |
37 | ||
38 | static int __init lasat_pci_setup(void) | |
39 | { | |
40 | printk(KERN_DEBUG "PCI: starting\n"); | |
41 | ||
b27418aa | 42 | if (IS_LASAT_200()) |
1f21d2bd | 43 | lasat_pci_controller.pci_ops = &nile4_pci_ops; |
b27418aa TB |
44 | else |
45 | lasat_pci_controller.pci_ops = >64xxx_pci0_ops; | |
1f21d2bd BM |
46 | |
47 | register_pci_controller(&lasat_pci_controller); | |
48 | ||
49 | return 0; | |
50 | } | |
51 | ||
52 | arch_initcall(lasat_pci_setup); | |
53 | ||
89becf5c YY |
54 | #define LASAT_IRQ_ETH1 (LASAT_IRQ_BASE + 0) |
55 | #define LASAT_IRQ_ETH0 (LASAT_IRQ_BASE + 1) | |
56 | #define LASAT_IRQ_HDC (LASAT_IRQ_BASE + 2) | |
57 | #define LASAT_IRQ_COMP (LASAT_IRQ_BASE + 3) | |
58 | #define LASAT_IRQ_HDLC (LASAT_IRQ_BASE + 4) | |
59 | #define LASAT_IRQ_PCIA (LASAT_IRQ_BASE + 5) | |
60 | #define LASAT_IRQ_PCIB (LASAT_IRQ_BASE + 6) | |
61 | #define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7) | |
62 | #define LASAT_IRQ_PCID (LASAT_IRQ_BASE + 8) | |
1f21d2bd BM |
63 | |
64 | int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | |
65 | { | |
66 | switch (slot) { | |
67 | case 1: | |
68 | case 2: | |
69 | case 3: | |
89becf5c | 70 | return LASAT_IRQ_PCIA + (((slot-1) + (pin-1)) % 4); |
1f21d2bd | 71 | case 4: |
89becf5c | 72 | return LASAT_IRQ_ETH1; /* Ethernet 1 (LAN 2) */ |
1f21d2bd | 73 | case 5: |
89becf5c | 74 | return LASAT_IRQ_ETH0; /* Ethernet 0 (LAN 1) */ |
1f21d2bd | 75 | case 6: |
89becf5c | 76 | return LASAT_IRQ_HDC; /* IDE controller */ |
1f21d2bd BM |
77 | default: |
78 | return 0xff; /* Illegal */ | |
79 | } | |
80 | ||
81 | return -1; | |
82 | } | |
83 | ||
84 | /* Do platform specific device initialization at pci_enable_device() time */ | |
85 | int pcibios_plat_dev_init(struct pci_dev *dev) | |
86 | { | |
87 | return 0; | |
88 | } |