After this has been brought up many times before, rename src/arch/i386 to
[coreboot.git] / src / mainboard / intel / xe7501devkit / irq_tables.c
1 /* Run checkpir to verify any changes to this table...
2    Documentation at : http://www.microsoft.com/whdc/archive/pciirq.mspx
3 */
4
5 #include <arch/pirq_routing.h>
6 #include <device/pci_def.h>
7 #include <device/pci_ids.h>
8 #include "bus.h"
9
10 #define UNUSED_INTERRUPT {0, 0}
11 #define PIRQ_A 0x60
12 #define PIRQ_B 0x61
13 #define PIRQ_C 0x62
14 #define PIRQ_D 0x63
15 #define PIRQ_E 0x68
16 #define PIRQ_F 0x69
17 #define PIRQ_G 0x6A
18 #define PIRQ_H 0x6B
19
20 const struct irq_routing_table intel_irq_routing_table = {
21         PIRQ_SIGNATURE,
22         PIRQ_VERSION,
23         32 + 16 * CONFIG_IRQ_SLOT_COUNT,                // Size of this struct in bytes
24         0,                                                                              // PCI bus number on which the interrupt router resides
25         PCI_DEVFN(31, 0),                                       // PCI device/function number of the interrupt router
26         0,                                                                              // PCI-exclusive IRQ bitmap
27         PCI_VENDOR_ID_INTEL,                                    // Vendor ID of compatible PCI interrupt router
28         PCI_DEVICE_ID_INTEL_82801CA_LPC,                // Device ID of compatible PCI interrupt router
29         0,                                                                              // Additional miniport information
30         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },    // Reserved, must be zero
31         0xB1,                                                                   // Checksum of the entire structure (causes 8-bit sum == 0)
32         {
33                 // NOTE: For 82801, a nonzero link value is a pointer to a PIRQ[n]_ROUT register in PCI configuration space
34                 //               This was determined from linux-2.6.11/arch/x86/pci/irq.c
35                 // bitmap of 0xdcf8 == routable to IRQ3-IRQ7, IRQ10-IRQ12, or IRQ14-IRQ15
36                 // ICH-3 doesn't allow SERIRQ or PCI message to generate IRQ0, IRQ2, IRQ8, or IRQ13
37                 // Not sure why IRQ9 isn't routable (inherited from Tyan S2735)
38
39                 //                                                                                      INTA#                      INTB#                     INTC#                    INTD#
40         //  bus,                                device #                   {link  , bitmap}, {link  , bitmap}, {link  , bitmap}, {link  , bitmap},  slot, rfu
41
42                 {PCI_BUS_CHIPSET,       PCI_DEVFN(31, 0), {{PIRQ_C, 0xdcf8}, {PIRQ_B, 0xdcf8}, UNUSED_INTERRUPT, UNUSED_INTERRUPT},   0, 0},    // IDE / SMBus
43                 {PCI_BUS_CHIPSET,       PCI_DEVFN(29, 0), {{PIRQ_A, 0xdcf8}, {PIRQ_D, 0xdcf8}, {PIRQ_C, 0xdcf8}, UNUSED_INTERRUPT},   0, 0},    // USB 1.1
44
45                 // P64H2#2 Bus A
46                 {PCI_BUS_P64H2_2_A, PCI_DEVFN(1, 0),  {{PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, UNUSED_INTERRUPT, UNUSED_INTERRUPT},   0, 0},        // SCSI
47                         // NOTE: Hotplug disabled on this bus
48
49                 // P64H2#2 Bus B
50                 {PCI_BUS_P64H2_2_B, PCI_DEVFN(1, 0),  {{PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}},  23, 0},        // Slot 2A (J23)
51                 {PCI_BUS_P64H2_2_B, PCI_DEVFN(2, 0),  {{PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}},  24, 0},        // Slot 2B (J24)
52                 {PCI_BUS_P64H2_2_B, PCI_DEVFN(3, 0),  {{PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}},  25, 0},        // Slot 2C (J25)
53                 {PCI_BUS_P64H2_2_B, PCI_DEVFN(4, 0),  {{PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}, {PIRQ_B, 0xdcf8}},  12, 0},        // Slot 2D (J12)
54                         // NOTE: Hotplug disabled on this bus
55
56                 // P64H2#1 Bus A
57                 {PCI_BUS_P64H2_1_A, PCI_DEVFN(1, 0),  {{PIRQ_A, 0xdcf8}, {PIRQ_A, 0xdcf8}, {PIRQ_A, 0xdcf8}, {PIRQ_A, 0xdcf8}},  20, 0},        // Slot 1A (J20)
58                         // NOTE: Hotplug disabled on this bus
59
60                 // P64H2#1 Bus B
61                 {PCI_BUS_P64H2_1_B, PCI_DEVFN(1, 0),  {{PIRQ_A, 0xdcf8}, UNUSED_INTERRUPT, UNUSED_INTERRUPT, UNUSED_INTERRUPT},   0, 0},        // GB Ethernet
62                 {PCI_BUS_P64H2_1_B, PCI_DEVFN(2, 0),  {{PIRQ_A, 0xdcf8}, {PIRQ_A, 0xdcf8}, {PIRQ_A, 0xdcf8}, {PIRQ_A, 0xdcf8}},  21, 0},        // Slot 1B (J21)
63                         // NOTE: Hotplug disabled on this bus
64
65                 // ICH-3 PCI bus
66                 {PCI_BUS_ICH3,          PCI_DEVFN(0, 0),  {{PIRQ_A, 0xdcf8}, UNUSED_INTERRUPT, UNUSED_INTERRUPT, UNUSED_INTERRUPT},   0, 0},    // Video
67                 {PCI_BUS_ICH3,          PCI_DEVFN(2, 0),  {{PIRQ_C, 0xdcf8}, {PIRQ_D, 0xdcf8}, {PIRQ_A, 0xdcf8}, {PIRQ_B, 0xdcf8}},  11, 0},    // Debug slot (J11)
68         }
69 };
70
71 unsigned long write_pirq_routing_table(unsigned long addr)
72 {
73         return copy_pirq_routing_table(addr);
74 }