Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / seabios / src / fw / pirtable.c
1 // PIR table generation (for emulators)
2 // DO NOT ADD NEW FEATURES HERE.  (See paravirt.c / biostables.c instead.)
3 //
4 // Copyright (C) 2008  Kevin O'Connor <kevin@koconnor.net>
5 // Copyright (C) 2002  MandrakeSoft S.A.
6 //
7 // This file may be distributed under the terms of the GNU LGPLv3 license.
8
9 #include "config.h" // CONFIG_*
10 #include "output.h" // dprintf
11 #include "std/pirtable.h" // struct pir_header
12 #include "string.h" // checksum
13 #include "util.h" // PirAddr
14
15 struct pir_table {
16     struct pir_header pir;
17     struct pir_slot slots[6];
18 } PACKED;
19
20 static struct pir_table PIR_TABLE = {
21     .pir = {
22         .version = 0x0100,
23         .size = sizeof(struct pir_table),
24         .router_devfunc = 0x08,
25         .compatible_devid = 0x122e8086,
26     },
27     .slots = {
28         {
29             // first slot entry PCI-to-ISA (embedded)
30             .dev = 1<<3,
31             .links = {
32                 {.link = 0x60, .bitmap = 0xdef8}, // INTA#
33                 {.link = 0x61, .bitmap = 0xdef8}, // INTB#
34                 {.link = 0x62, .bitmap = 0xdef8}, // INTC#
35                 {.link = 0x63, .bitmap = 0xdef8}, // INTD#
36             },
37             .slot_nr = 0, // embedded
38         }, {
39             // second slot entry: 1st PCI slot
40             .dev = 2<<3,
41             .links = {
42                 {.link = 0x61, .bitmap = 0xdef8}, // INTA#
43                 {.link = 0x62, .bitmap = 0xdef8}, // INTB#
44                 {.link = 0x63, .bitmap = 0xdef8}, // INTC#
45                 {.link = 0x60, .bitmap = 0xdef8}, // INTD#
46             },
47             .slot_nr = 1,
48         }, {
49             // third slot entry: 2nd PCI slot
50             .dev = 3<<3,
51             .links = {
52                 {.link = 0x62, .bitmap = 0xdef8}, // INTA#
53                 {.link = 0x63, .bitmap = 0xdef8}, // INTB#
54                 {.link = 0x60, .bitmap = 0xdef8}, // INTC#
55                 {.link = 0x61, .bitmap = 0xdef8}, // INTD#
56             },
57             .slot_nr = 2,
58         }, {
59             // 4th slot entry: 3rd PCI slot
60             .dev = 4<<3,
61             .links = {
62                 {.link = 0x63, .bitmap = 0xdef8}, // INTA#
63                 {.link = 0x60, .bitmap = 0xdef8}, // INTB#
64                 {.link = 0x61, .bitmap = 0xdef8}, // INTC#
65                 {.link = 0x62, .bitmap = 0xdef8}, // INTD#
66             },
67             .slot_nr = 3,
68         }, {
69             // 5th slot entry: 4rd PCI slot
70             .dev = 5<<3,
71             .links = {
72                 {.link = 0x60, .bitmap = 0xdef8}, // INTA#
73                 {.link = 0x61, .bitmap = 0xdef8}, // INTB#
74                 {.link = 0x62, .bitmap = 0xdef8}, // INTC#
75                 {.link = 0x63, .bitmap = 0xdef8}, // INTD#
76             },
77             .slot_nr = 4,
78         }, {
79             // 6th slot entry: 5rd PCI slot
80             .dev = 6<<3,
81             .links = {
82                 {.link = 0x61, .bitmap = 0xdef8}, // INTA#
83                 {.link = 0x62, .bitmap = 0xdef8}, // INTB#
84                 {.link = 0x63, .bitmap = 0xdef8}, // INTC#
85                 {.link = 0x60, .bitmap = 0xdef8}, // INTD#
86             },
87             .slot_nr = 5,
88         },
89     }
90 };
91
92 void
93 pirtable_setup(void)
94 {
95     if (! CONFIG_PIRTABLE)
96         return;
97
98     dprintf(3, "init PIR table\n");
99
100     PIR_TABLE.pir.signature = PIR_SIGNATURE;
101     PIR_TABLE.pir.checksum -= checksum(&PIR_TABLE, sizeof(PIR_TABLE));
102     copy_pir(&PIR_TABLE);
103 }