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 #ifndef _I386_MPBIOSREG_H_
43 #define _I386_MPBIOSREG_H_
44
45 #define BIOS_BASE (0xf0000)
46 #define BIOS_SIZE (0x10000)
47 #define BIOS_COUNT (BIOS_SIZE)
48
49
50
51
52
53 #define MPS_MCT_CPU 0
54 #define MPS_MCT_BUS 1
55 #define MPS_MCT_IOAPIC 2
56 #define MPS_MCT_IOINT 3
57 #define MPS_MCT_LINT 4
58
59 #define MPS_MCT_NTYPES 5
60
61
62
63
64
65 #define MPS_INTTYPE_INT 0
66 #define MPS_INTTYPE_NMI 1
67 #define MPS_INTTYPE_SMI 2
68 #define MPS_INTTYPE_ExtINT 3
69
70 #define MPS_INTPO_DEF 0
71 #define MPS_INTPO_ACTHI 1
72 #define MPS_INTPO_ACTLO 3
73 #define MPS_INTPO_SHIFT 0
74 #define MPS_INTPO_MASK 3
75
76 #define MPS_INTTR_DEF 0
77 #define MPS_INTTR_EDGE 1
78 #define MPS_INTTR_LEVEL 3
79 #define MPS_INTTR_SHIFT 2
80 #define MPS_INTTR_MASK 3
81
82 #define MPS_INT(p,t) \
83 ((((p) & MPS_INTPO_MASK) << MPS_INTPO_SHIFT) | \
84 (((t) & MPS_INTTR_MASK) << MPS_INTTR_SHIFT))
85
86
87 struct mpbios_fps {
88 u_int32_t signature;
89
90 #define MP_FP_SIG 0x5f504d5f
91
92 u_int32_t pap;
93 u_int8_t length;
94 u_int8_t spec_rev;
95 u_int8_t checksum;
96 u_int8_t mpfb1;
97 u_int8_t mpfb2;
98 #define MPFPS_FLAG_IMCR 0x80
99 u_int8_t mpfb3;
100 u_int8_t mpfb4;
101 u_int8_t mpfb5;
102 };
103
104
105 struct mpbios_cth {
106 u_int32_t signature;
107 #define MP_CT_SIG 0x504d4350
108
109 u_int16_t base_len;
110 u_int8_t spec_rev;
111 u_int8_t checksum;
112 u_int8_t oem_id[8];
113 u_int8_t product_id[12];
114 u_int32_t oem_table_pointer;
115 u_int16_t oem_table_size;
116 u_int16_t entry_count;
117 u_int32_t apic_address;
118 u_int16_t ext_len;
119 u_int8_t ext_cksum;
120 u_int8_t reserved;
121 };
122
123 struct mpbios_proc {
124 u_int8_t type;
125 u_int8_t apic_id;
126 u_int8_t apic_version;
127 u_int8_t cpu_flags;
128 #define PROCENTRY_FLAG_EN 0x01
129 #define PROCENTRY_FLAG_BP 0x02
130 u_long cpu_signature;
131 u_long feature_flags;
132 u_long reserved1;
133 u_long reserved2;
134 };
135
136 struct mpbios_bus {
137 u_int8_t type;
138 u_int8_t bus_id;
139 char bus_type[6];
140 };
141
142 struct mpbios_ioapic {
143 u_int8_t type;
144 u_int8_t apic_id;
145 u_int8_t apic_version;
146 u_int8_t apic_flags;
147 #define IOAPICENTRY_FLAG_EN 0x01
148 void *apic_address;
149 };
150
151 struct mpbios_int {
152 u_int8_t type;
153 u_int8_t int_type;
154 u_int16_t int_flags;
155 u_int8_t src_bus_id;
156 u_int8_t src_bus_irq;
157 u_int8_t dst_apic_id;
158 #define MPS_ALL_APICS 0xff
159 u_int8_t dst_apic_int;
160 };
161
162 #endif