// See MultiProcessor Specification Version 1.[14] struct mp { // floating pointer uchar signature[4]; // "_MP_" void *physaddr; // phys addr of MP config table uchar length; // 1 uchar specrev; // [14] uchar checksum; // all bytes must add up to 0 uchar type; // MP system config type uchar imcrp; uchar reserved[3]; }; struct mpconf { // configuration table header uchar signature[4]; // "PCMP" ushort length; // total table length uchar version; // [14] uchar checksum; // all bytes must add up to 0 uchar product[20]; // product id uint *oemtable; // OEM table pointer ushort oemlength; // OEM table length ushort entry; // entry count uint *lapicaddr; // address of local APIC ushort xlength; // extended table length uchar xchecksum; // extended table checksum uchar reserved; }; struct mpproc { // processor table entry uchar type; // entry type (0) uchar apicid; // local APIC id uchar version; // local APIC verison uchar flags; // CPU flags #define MPBOOT 0x02 // This proc is the bootstrap processor. uchar signature[4]; // CPU signature uint feature; // feature flags from CPUID instruction uchar reserved[8]; }; struct mpioapic { // I/O APIC table entry uchar type; // entry type (2) uchar apicno; // I/O APIC id uchar version; // I/O APIC version uchar flags; // I/O APIC flags uint *addr; // I/O APIC address }; // Table entry types #define MPPROC 0x00 // One per processor #define MPBUS 0x01 // One per bus #define MPIOAPIC 0x02 // One per I/O APIC #define MPIOINTR 0x03 // One per bus interrupt source #define MPLINTR 0x04 // One per system interrupt source //PAGEBREAK! // Blank page.