| #ifndef __MPTABLE_H |
| #define __MPTABLE_H |
| |
| #include "types.h" // u32 |
| |
| #define MPTABLE_SIGNATURE 0x5f504d5f // "_MP_" |
| |
| struct mptable_floating_s { |
| u32 signature; |
| u32 physaddr; |
| u8 length; |
| u8 spec_rev; |
| u8 checksum; |
| u8 feature1; |
| u8 feature2; |
| u8 reserved[3]; |
| }; |
| |
| #define MPCONFIG_SIGNATURE 0x504d4350 // "PCMP" |
| |
| struct mptable_config_s { |
| u32 signature; |
| u16 length; |
| u8 spec; |
| u8 checksum; |
| char oemid[8]; |
| char productid[12]; |
| u32 oemptr; |
| u16 oemsize; |
| u16 entrycount; |
| u32 lapic; |
| u16 exttable_length; |
| u8 exttable_checksum; |
| u8 reserved; |
| } PACKED; |
| |
| #define MPT_TYPE_CPU 0 |
| #define MPT_TYPE_BUS 1 |
| #define MPT_TYPE_IOAPIC 2 |
| #define MPT_TYPE_INTSRC 3 |
| |
| struct mpt_cpu { |
| u8 type; |
| u8 apicid; |
| u8 apicver; |
| u8 cpuflag; |
| u32 cpusignature; |
| u32 featureflag; |
| u32 reserved[2]; |
| } PACKED; |
| |
| struct mpt_bus { |
| u8 type; |
| u8 busid; |
| char bustype[6]; |
| } PACKED; |
| |
| struct mpt_ioapic { |
| u8 type; |
| u8 apicid; |
| u8 apicver; |
| u8 flags; |
| u32 apicaddr; |
| } PACKED; |
| |
| struct mpt_intsrc { |
| u8 type; |
| u8 irqtype; |
| u16 irqflag; |
| u8 srcbus; |
| u8 srcbusirq; |
| u8 dstapic; |
| u8 dstirq; |
| } PACKED; |
| |
| // mptable.c |
| void mptable_init(void); |
| |
| #endif // mptable.h |