Cleanup JOS references and add typedefs
[akaros.git] / inc / trap.h
1 #ifndef ROS_INC_TRAP_H
2 #define ROS_INC_TRAP_H
3
4 // Trap numbers
5 // These are processor defined:
6 #define T_DIVIDE     0          // divide error
7 #define T_DEBUG      1          // debug exception
8 #define T_NMI        2          // non-maskable interrupt
9 #define T_BRKPT      3          // breakpoint
10 #define T_OFLOW      4          // overflow
11 #define T_BOUND      5          // bounds check
12 #define T_ILLOP      6          // illegal opcode
13 #define T_DEVICE     7          // device not available 
14 #define T_DBLFLT     8          // double fault
15 /* #define T_COPROC  9 */       // reserved (not generated by recent processors)
16 #define T_TSS       10          // invalid task switch segment
17 #define T_SEGNP     11          // segment not present
18 #define T_STACK     12          // stack exception
19 #define T_GPFLT     13          // genernal protection fault
20 #define T_PGFLT     14          // page fault
21 /* #define T_RES    15 */       // reserved
22 #define T_FPERR     16          // floating point error
23 #define T_ALIGN     17          // aligment check
24 #define T_MCHK      18          // machine check
25 #define T_SIMDERR   19          // SIMD floating point error
26
27 // These are arbitrarily chosen, but with care not to overlap
28 // processor defined exceptions or interrupt vectors.
29 #define T_SYSCALL   48                          // system call
30 #define T_DEFAULT   0xdeadbeef          // catchall
31
32 #ifndef __ASSEMBLER__
33
34 #include <inc/types.h>
35
36 typedef struct PushRegs {
37         /* registers as pushed by pusha */
38         uint32_t reg_edi;
39         uint32_t reg_esi;
40         uint32_t reg_ebp;
41         uint32_t reg_oesp;              /* Useless */
42         uint32_t reg_ebx;
43         uint32_t reg_edx;
44         uint32_t reg_ecx;
45         uint32_t reg_eax;
46 } push_regs_t;
47
48 typedef struct Trapframe {
49         push_regs_t tf_regs;
50         uint16_t tf_es;
51         uint16_t tf_padding1;
52         uint16_t tf_ds;
53         uint16_t tf_padding2;
54         uint32_t tf_trapno;
55         /* below here defined by x86 hardware */
56         uint32_t tf_err;
57         uintptr_t tf_eip;
58         uint16_t tf_cs;
59         uint16_t tf_padding3;
60         uint32_t tf_eflags;
61         /* below here only when crossing rings, such as from user to kernel */
62         uintptr_t tf_esp;
63         uint16_t tf_ss;
64         uint16_t tf_padding4;
65 } trapframe_t;
66
67
68 #endif /* !__ASSEMBLER__ */
69
70 // Must equal 'sizeof(trapframe_t)'.
71 // A static_assert in kern/trap.c checks this.
72 #define SIZEOF_STRUCT_TRAPFRAME 0x44
73
74 #endif /* !ROS_INC_TRAP_H */