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