Initial revision
[pintos-anon] / src / threads / interrupt.h
1 #ifndef HEADER_INTERRUPT_H
2 #define HEADER_INTERRUPT_H 1
3
4 #include <stdbool.h>
5 #include <stdint.h>
6
7 enum if_level 
8   {
9     IF_OFF,             /* Interrupts disabled. */
10     IF_ON               /* Interrupts enabled. */
11   };
12
13 enum if_level intr_get_level (void);
14 enum if_level intr_set_level (enum if_level);
15 enum if_level intr_enable (void);
16 enum if_level intr_disable (void);
17 \f
18 struct intr_args
19   {
20     uint32_t edi;
21     uint32_t esi;
22     uint32_t ebp;
23     uint32_t esp;
24     uint32_t ebx;
25     uint32_t edx;
26     uint32_t ecx;
27     uint32_t eax;
28     uint16_t es, :16;
29     uint16_t ds, :16;
30     uint32_t vec_no;
31     uint32_t error_code;
32     uint32_t eip;
33   };
34
35 typedef void intr_handler_func (struct intr_args *);
36
37 void intr_init (void);
38 void intr_register (uint8_t vec, int dpl, enum if_level, intr_handler_func *);
39 bool intr_context (void);
40 void intr_yield_on_return (void);
41
42 #endif /* interrupt.h */