1 // PIR table generation (for emulators)
3 // Copyright (C) 2008 Kevin O'Connor <kevin@koconnor.net>
4 // Copyright (C) 2002 MandrakeSoft S.A.
6 // This file may be distributed under the terms of the GNU GPLv3 license.
8 #include "pci.h" // struct pir_header
9 #include "util.h" // checksum
10 #include "biosvar.h" // SET_EBDA
13 struct pir_header pir;
14 struct pir_slot slots[6];
15 } PACKED PIR_TABLE __aligned(16) = {
19 .size = sizeof(struct pir_table),
20 .router_devfunc = 0x08,
21 .compatible_devid = 0x122e8086,
25 // first slot entry PCI-to-ISA (embedded)
28 {.link = 0x60, .bitmap = 0xdef8}, // INTA#
29 {.link = 0x61, .bitmap = 0xdef8}, // INTB#
30 {.link = 0x62, .bitmap = 0xdef8}, // INTC#
31 {.link = 0x63, .bitmap = 0xdef8}, // INTD#
33 .slot_nr = 0, // embedded
35 // second slot entry: 1st PCI slot
38 {.link = 0x61, .bitmap = 0xdef8}, // INTA#
39 {.link = 0x62, .bitmap = 0xdef8}, // INTB#
40 {.link = 0x63, .bitmap = 0xdef8}, // INTC#
41 {.link = 0x60, .bitmap = 0xdef8}, // INTD#
45 // third slot entry: 2nd PCI slot
48 {.link = 0x62, .bitmap = 0xdef8}, // INTA#
49 {.link = 0x63, .bitmap = 0xdef8}, // INTB#
50 {.link = 0x60, .bitmap = 0xdef8}, // INTC#
51 {.link = 0x61, .bitmap = 0xdef8}, // INTD#
55 // 4th slot entry: 3rd PCI slot
58 {.link = 0x63, .bitmap = 0xdef8}, // INTA#
59 {.link = 0x60, .bitmap = 0xdef8}, // INTB#
60 {.link = 0x61, .bitmap = 0xdef8}, // INTC#
61 {.link = 0x62, .bitmap = 0xdef8}, // INTD#
65 // 5th slot entry: 4rd PCI slot
68 {.link = 0x60, .bitmap = 0xdef8}, // INTA#
69 {.link = 0x61, .bitmap = 0xdef8}, // INTB#
70 {.link = 0x62, .bitmap = 0xdef8}, // INTC#
71 {.link = 0x63, .bitmap = 0xdef8}, // INTD#
75 // 6th slot entry: 5rd PCI slot
78 {.link = 0x61, .bitmap = 0xdef8}, // INTA#
79 {.link = 0x62, .bitmap = 0xdef8}, // INTB#
80 {.link = 0x63, .bitmap = 0xdef8}, // INTC#
81 {.link = 0x60, .bitmap = 0xdef8}, // INTD#
86 #endif // CONFIG_PIRTABLE
92 if (! CONFIG_PIRTABLE)
95 dprintf(3, "init PIR table\n");
97 PIR_TABLE.pir.signature = PIR_SIGNATURE;
98 PIR_TABLE.pir.checksum = -checksum((u8*)&PIR_TABLE, sizeof(PIR_TABLE));
99 SET_EBDA(pir_loc, &PIR_TABLE.pir);