1 // See MultiProcessor Specification Version 1.[14]
3 struct mp
{ // floating pointer
4 uchar signature
[4]; // "_MP_"
5 void *physaddr
; // phys addr of MP config table
8 uchar checksum
; // all bytes must add up to 0
9 uchar type
; // MP system config type
14 struct mpconf
{ // configuration table header
15 uchar signature
[4]; // "PCMP"
16 ushort length
; // total table length
17 uchar version
; // [14]
18 uchar checksum
; // all bytes must add up to 0
19 uchar product
[20]; // product id
20 uint
*oemtable
; // OEM table pointer
21 ushort oemlength
; // OEM table length
22 ushort entry
; // entry count
23 uint
*lapicaddr
; // address of local APIC
24 ushort xlength
; // extended table length
25 uchar xchecksum
; // extended table checksum
29 struct mpproc
{ // processor table entry
30 uchar type
; // entry type (0)
31 uchar apicid
; // local APIC id
32 uchar version
; // local APIC verison
33 uchar flags
; // CPU flags
34 #define MPBOOT 0x02 // This proc is the bootstrap processor.
35 uchar signature
[4]; // CPU signature
36 uint feature
; // feature flags from CPUID instruction
40 struct mpioapic
{ // I/O APIC table entry
41 uchar type
; // entry type (2)
42 uchar apicno
; // I/O APIC id
43 uchar version
; // I/O APIC version
44 uchar flags
; // I/O APIC flags
45 uint
*addr
; // I/O APIC address
49 #define MPPROC 0x00 // One per processor
50 #define MPBUS 0x01 // One per bus
51 #define MPIOAPIC 0x02 // One per I/O APIC
52 #define MPIOINTR 0x03 // One per bus interrupt source
53 #define MPLINTR 0x04 // One per system interrupt source