#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 #define MPT_TYPE_LOCAL_INT 4 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