X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/7b0dccbab69e806a63c4504c3ddb82e45241985b..fdb1a59e488e5cab8a47e6852b47ada116e08825:/lunaix-os/includes/arch/x86/interrupts.h diff --git a/lunaix-os/includes/arch/x86/interrupts.h b/lunaix-os/includes/arch/x86/interrupts.h index 3ac415a..664d69d 100644 --- a/lunaix-os/includes/arch/x86/interrupts.h +++ b/lunaix-os/includes/arch/x86/interrupts.h @@ -25,8 +25,26 @@ #define FAULT_VIRTUALIZATION_EXCEPTION 20 #define FAULT_CONTROL_PROTECTION 21 +// LunaixOS related #define LUNAIX_SYS_PANIC 32 +#define EX_INTERRUPT_BEGIN 200 + +// Keyboard +#define PC_KBD_IV 201 + +#define RTC_TIMER_IV 210 + +// 来自APIC的中断有着最高的优先级。 +// APIC related +#define APIC_ERROR_IV 250 +#define APIC_LINT0_IV 251 +#define APIC_SPIV_IV 252 +#define APIC_TIMER_IV 253 + +#define PC_AT_IRQ_RTC 8 +#define PC_AT_IRQ_KBD 1 + #ifndef __ASM__ #include typedef struct { @@ -40,78 +58,63 @@ typedef struct { unsigned int ss; } __attribute__((packed)) isr_param; -void -_asm_isr0(); - -void -_asm_isr1(); - -void -_asm_isr2(); +typedef void (*int_subscriber)(isr_param*); -void -_asm_isr3(); +#pragma region ISR_DECLARATION -void -_asm_isr4(); +#define ISR(iv) void _asm_isr##iv(); -void -_asm_isr5(); +ISR(0) +ISR(1) +ISR(2) +ISR(3) +ISR(4) +ISR(5) +ISR(6) +ISR(7) +ISR(8) +ISR(9) +ISR(10) +ISR(11) +ISR(12) +ISR(13) +ISR(14) +ISR(15) +ISR(16) +ISR(17) +ISR(18) +ISR(19) +ISR(20) +ISR(21) -void -_asm_isr6(); +ISR(32) -void -_asm_isr7(); +ISR(201) -void -_asm_isr8(); +ISR(210) -void -_asm_isr9(); +ISR(250) +ISR(251) +ISR(252) +ISR(253) +ISR(254) -void -_asm_isr10(); +#pragma endregion void -_asm_isr11(); +intr_subscribe(const uint8_t vector, int_subscriber); void -_asm_isr12(); +intr_unsubscribe(const uint8_t vector, int_subscriber); void -_asm_isr13(); - -void -_asm_isr14(); - -void -_asm_isr15(); - -void -_asm_isr16(); - -void -_asm_isr17(); - -void -_asm_isr18(); - -void -_asm_isr19(); - -void -_asm_isr20(); - -void -_asm_isr21(); - +intr_set_fallback_handler(int_subscriber); void -_asm_isr32(); +intr_handler(isr_param* param); void -interrupt_handler(isr_param* param); +intr_routine_init(); #endif