d86e79a21bac872d972759f1590352885780870b
[akaros.git] / kern / arch / x86 / ros / trapframe64.h
1 #ifndef ROS_INC_ARCH_TRAPFRAME64_H
2 #define ROS_INC_ARCH_TRAPFRAME64_H
3
4 #ifndef ROS_INC_ARCH_TRAPFRAME_H
5 #error "Do not include include ros/arch/trapframe64.h directly"
6 #endif
7
8 typedef struct pushregs {
9         /* registers as pushed by pusha */
10         uint32_t reg_edi;
11         uint32_t reg_esi;
12         uint32_t reg_ebp; uint32_t reg_oesp;            /* Useless */
13         uint32_t reg_ebx;
14         uint32_t reg_edx;
15         uint32_t reg_ecx;
16         uint32_t reg_eax;
17 } push_regs_t;
18
19 struct hw_trapframe {
20         push_regs_t tf_regs;
21         uint16_t tf_gs;
22         uint16_t tf_padding1;
23         uint16_t tf_fs;
24         uint16_t tf_padding2;
25         uint16_t tf_es;
26         uint16_t tf_padding3;
27         uint16_t tf_ds;
28         uint16_t tf_padding4;
29         uint32_t tf_trapno;
30         /* below here defined by x86 hardware */
31         uint32_t tf_err;
32         uintptr_t tf_eip;
33         uint16_t tf_cs;
34         uint16_t tf_padding5;
35         uint32_t tf_eflags;
36         /* below here only when crossing rings, such as from user to kernel */
37         uintptr_t tf_esp;
38         uint16_t tf_ss;
39         uint16_t tf_padding6;
40 };
41
42 struct sw_trapframe {
43         uint32_t tf_ebp;
44         uint32_t tf_ebx;
45         uint32_t tf_esi;
46         uint32_t tf_edi;
47         uint32_t tf_esp;
48         uint32_t tf_eip;
49         uint32_t tf_mxcsr;
50         uint16_t tf_fpucw;
51         uint16_t tf_gs;         /* something to track TLS is callee-saved (sort of) */
52 };
53
54 #endif /* ROS_INC_ARCH_TRAPFRAME64_H */