+#ifndef SMP_H_
+#define SMP_H_ 1
+
+#include <stdint.h>
+
+void init_smp(void);
+
+struct mpfp {
+ uint32_t signature;
+ uint32_t mpconfigptr;
+ uint8_t length;
+ uint8_t version;
+ uint8_t checksum;
+ uint8_t features1;
+ uint8_t features2;
+ uint8_t features3;
+ uint8_t features4;
+ uint8_t features5;
+};
+
+struct mpconfig {
+ uint32_t signature;
+ uint16_t tablelength;
+ uint8_t revision;
+ uint8_t checksum;
+ char oemid[8];
+ char productid[12];
+ uint32_t oemtableptr;
+ uint16_t oemtablesize;
+ uint16_t entrycount;
+ uint32_t localapicaddr;
+ uint16_t extendedtablen;
+ uint8_t extendedchecksum;
+ uint8_t reserved;
+};
+
+struct processorentry {
+ uint8_t etype;
+ uint8_t apicid;
+ uint8_t apicversion;
+ uint8_t enabled:1;
+ uint8_t bootstrap:1;
+ uint8_t unused:6;
+ uint32_t signature;
+ uint32_t features;
+ char unused2[8];
+};
+
+struct ioapic {
+ uint8_t etype;
+ uint8_t id;
+ uint8_t ioapicversion;
+ uint8_t enabled:1;
+ uint8_t unused:7;
+ uint32_t address;
+};
+
+#endif