isr.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #ifndef ISR_H
  2. #define ISR_H
  3. #include <stdint.h>
  4. /* ISRs reserved for CPU exceptions */
  5. extern void isr0();
  6. extern void isr1();
  7. extern void isr2();
  8. extern void isr3();
  9. extern void isr4();
  10. extern void isr5();
  11. extern void isr6();
  12. extern void isr7();
  13. extern void isr8();
  14. extern void isr9();
  15. extern void isr10();
  16. extern void isr11();
  17. extern void isr12();
  18. extern void isr13();
  19. extern void isr14();
  20. extern void isr15();
  21. extern void isr16();
  22. extern void isr17();
  23. extern void isr18();
  24. extern void isr19();
  25. extern void isr20();
  26. extern void isr21();
  27. extern void isr22();
  28. extern void isr23();
  29. extern void isr24();
  30. extern void isr25();
  31. extern void isr26();
  32. extern void isr27();
  33. extern void isr28();
  34. extern void isr29();
  35. extern void isr30();
  36. extern void isr31();
  37. /* IRQ definitions */
  38. extern void irq0();
  39. extern void irq1();
  40. extern void irq2();
  41. extern void irq3();
  42. extern void irq4();
  43. extern void irq5();
  44. extern void irq6();
  45. extern void irq7();
  46. extern void irq8();
  47. extern void irq9();
  48. extern void irq10();
  49. extern void irq11();
  50. extern void irq12();
  51. extern void irq13();
  52. extern void irq14();
  53. extern void irq15();
  54. #define IRQ0 32
  55. #define IRQ1 33
  56. #define IRQ2 34
  57. #define IRQ3 35
  58. #define IRQ4 36
  59. #define IRQ5 37
  60. #define IRQ6 38
  61. #define IRQ7 39
  62. #define IRQ8 40
  63. #define IRQ9 41
  64. #define IRQ10 42
  65. #define IRQ11 43
  66. #define IRQ12 44
  67. #define IRQ13 45
  68. #define IRQ14 46
  69. #define IRQ15 47
  70. /* Struct which aggregates many registers.
  71. * It matches exactly the pushes on interrupt.asm. From the bottom:
  72. * - Pushed by the processor automatically
  73. * - `push byte`s on the isr-specific code: error code, then int number
  74. * - All the registers by pusha
  75. * - `push eax` whose lower 16-bits contain DS
  76. */
  77. typedef struct {
  78. uint32_t ds; /* Data segment selector */
  79. uint32_t edi, esi, ebp, useless, ebx, edx, ecx, eax; /* Pushed by pusha. */
  80. uint32_t int_no, err_code; /* Interrupt number and error code (if applicable) */
  81. uint32_t eip, cs, eflags, esp, ss; /* Pushed by the processor automatically */
  82. } registers_t;
  83. void isr_install();
  84. void isr_handler(registers_t *r);
  85. void irq_install();
  86. typedef void (*isr_t)(registers_t*);
  87. void register_interrupt_handler(uint8_t n, isr_t handler);
  88. #endif