#ifndef _NUCLEUS_CPU_H #define _NUCLEUS_CPU_H #include typedef unsigned int cpu_t; /* Structure for an Interrupt Frame */ struct InterruptFrame { uint32_t ds; uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; uint32_t intnum, err; uint32_t eip, cs, eflags, useresp, ss; }; typedef void (*exc_handler_t)(struct InterruptFrame *); typedef void (*int_handler_t)(struct InterruptFrame *); extern int apic; extern uintptr_t lapicPtr, ioapicPtr; #define LAPIC(off) (*((uint32_t *) ((uint32_t) lapicPtr + (off)))) #define IOAPIC(off) (*((uint32_t *) ((uint32_t) ioapicPtr + (off)))) extern cpu_t lapicNums[]; #define CPUID (apic ? lapicNums[(cpu_t) (LAPIC(0x20) >> 24)] : 0) #define MAX_CPUS 2 void register_exception(int num, exc_handler_t addr); void register_interrupt(int num, int_handler_t addr); #endif