]> pd.if.org Git - zos/blob - interrupt.h
add a readme with a public domain note
[zos] / interrupt.h
1 #ifndef _SYS_INTERRUPT_H_
2 #define _SYS_INTERRUPT_H_
3
4 #include <stddef.h>
5
6 struct interrupt_context {
7         /* pushed on the stack, before the handler is called */
8         uint64_t kerrno;
9         uint64_t cr2;
10         uint64_t rdi;
11         uint64_t rsi;
12         uint64_t rbp;
13         uint64_t not_rsp;
14         uint64_t rbx;
15         uint64_t rdx;
16         uint64_t rcx;
17         uint64_t rax;
18         uint64_t r8;
19         uint64_t r9;
20         uint64_t r10;
21         uint64_t r11;
22         uint64_t r12;
23         uint64_t r13;
24         uint64_t r14;
25         uint64_t r15;
26         /* assembly interrupt trampoline handles these */
27         uint64_t int_no;
28         uint64_t err_code;
29         /* following pushed onto stack by CPU */
30         uint64_t rip;
31         uint64_t cs;
32         uint64_t rflags;
33         uint64_t rsp;
34         uint64_t ss;
35 };
36
37 struct interrupt_handler {
38         void (*handler)(struct interrupt_context *, void *);
39         void *context;
40         struct interrupt_handler *next;
41         struct interrupt_handler *prev;
42 };
43
44 void interrupt_handler_null();
45 void isr128();
46 void isr129();
47 void isr0();
48 void isr1();
49 void isr2();
50 void isr3();
51 void isr4();
52 void isr5();
53 void isr6();
54 void isr7();
55 void isr8();
56 void isr9();
57 void isr10();
58 void isr11();
59 void isr12();
60 void isr13();
61 void isr14();
62 void isr15();
63 void isr16();
64 void isr17();
65 void isr18();
66 void isr19();
67 void isr20();
68 void isr21();
69 void isr22();
70 void isr23();
71 void isr24();
72 void isr25();
73 void isr26();
74 void isr27();
75 void isr28();
76 void isr29();
77 void isr30();
78 void isr31();
79 void isr128();
80 void isr130();
81 void isr131();
82
83 void irq0();
84 void irq1();
85 void irq2();
86 void irq3();
87 void irq4();
88 void irq5();
89 void irq6();
90 void irq7();
91 void irq8();
92 void irq9();
93 void irq10();
94 void irq11();
95 void irq12();
96 void irq13();
97 void irq14();
98 void irq15();
99
100 #define IRQ0 32
101 #define IRQ1 33
102 #define IRQ2 34
103 #define IRQ3 35
104 #define IRQ4 36
105 #define IRQ5 37
106 #define IRQ6 38
107 #define IRQ7 39
108 #define IRQ8 40
109 #define IRQ9 41
110 #define IRQ10 42
111 #define IRQ11 43
112 #define IRQ12 44
113 #define IRQ13 45
114 #define IRQ14 46
115 #define IRQ15 47
116
117 void init_interrupts();
118
119 int interrupts_enabled(); 
120 void enable_interrupts();
121 void disable_interrupts(); 
122 int interrupts_set(int enable);
123
124 void interrupt_add_handler(unsigned int intno, struct interrupt_handler *handler);
125 void interrupt_remove_handler(unsigned int intno, struct interrupt_handler *handler);
126
127 #endif