source: trunk/hal/x86_64/core/hal_kentry.h @ 146

Last change on this file since 146 was 146, checked in by max@…, 5 years ago

remove my fake_apic shit from yesterday

File size: 4.3 KB
Line 
1/*
2 * hal_kentry.h - General values used in the different kernel entries
3 *
4 * Copyright (c) 2017 Maxime Villard
5 *
6 * This file is part of ALMOS-MKH.
7 *
8 * ALMOS-MKH is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; version 2.0 of the License.
11 *
12 * ALMOS-MKH is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with ALMOS-MKH.; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#define T_PRIVINFLT      0      /* privileged instruction */
23#define T_BPTFLT         1      /* breakpoint trap */
24#define T_ARITHTRAP      2      /* arithmetic trap */
25#define T_ASTFLT         3      /* asynchronous system trap */
26#define T_PROTFLT        4      /* protection fault */
27#define T_TRCTRAP        5      /* trace trap */
28#define T_PAGEFLT        6      /* page fault */
29#define T_ALIGNFLT       7      /* alignment fault */
30#define T_DIVIDE         8      /* integer divide fault */
31#define T_NMI            9      /* non-maskable interrupt */
32#define T_OFLOW         10      /* overflow trap */
33#define T_BOUND         11      /* bounds check fault */
34#define T_DNA           12      /* device not available fault */
35#define T_DOUBLEFLT     13      /* double fault */
36#define T_FPOPFLT       14      /* fp coprocessor operand fetch fault */
37#define T_TSSFLT        15      /* invalid tss fault */
38#define T_SEGNPFLT      16      /* segment not present fault */
39#define T_STKFLT        17      /* stack fault */
40#define T_MCA           18      /* machine check */
41#define T_XMM           19      /* SSE FP exception */
42#define T_RESERVED      20      /* reserved fault base */
43
44/* Trap's coming from user mode */
45#define T_USER  0x100
46
47#define CPUVAR(off)     %gs:CPU_INFO_ ## off
48
49#define TF_REGSIZE      (19 * 8)
50
51#define INTR_SAVE_REGS  \
52        subq    $TF_REGSIZE,%rsp        ; \
53        movq    %rax,TF_RAX(%rsp)       ; \
54        movq    %rbx,TF_RBX(%rsp)       ; \
55        movq    %rcx,TF_RCX(%rsp)       ; \
56        movq    %rdx,TF_RDX(%rsp)       ; \
57        movq    %rbp,TF_RBP(%rsp)       ; \
58        movq    %rdi,TF_RDI(%rsp)       ; \
59        movq    %rsi,TF_RSI(%rsp)       ; \
60        movq    %r8,TF_R8(%rsp)         ; \
61        movq    %r9,TF_R9(%rsp)         ; \
62        movq    %r10,TF_R10(%rsp)       ; \
63        movq    %r11,TF_R11(%rsp)       ; \
64        movq    %r12,TF_R12(%rsp)       ; \
65        movq    %r13,TF_R13(%rsp)       ; \
66        movq    %r14,TF_R14(%rsp)       ; \
67        movq    %r15,TF_R15(%rsp)       ; \
68        /* movw %gs,TF_GS(%rsp) */      ; \
69        movw    %fs,TF_FS(%rsp)         ; \
70        movw    %es,TF_ES(%rsp)         ; \
71        movw    %ds,TF_DS(%rsp)         ; \
72        cld
73
74#define INTR_RESTORE_REGS       \
75        movq    TF_RAX(%rsp),%rax       ; \
76        movq    TF_RBX(%rsp),%rbx       ; \
77        movq    TF_RCX(%rsp),%rcx       ; \
78        movq    TF_RDX(%rsp),%rdx       ; \
79        movq    TF_RBP(%rsp),%rbp       ; \
80        movq    TF_RDI(%rsp),%rdi       ; \
81        movq    TF_RSI(%rsp),%rsi       ; \
82        movq    TF_R8(%rsp),%r8         ; \
83        movq    TF_R9(%rsp),%r9         ; \
84        movq    TF_R10(%rsp),%r10       ; \
85        movq    TF_R11(%rsp),%r11       ; \
86        movq    TF_R12(%rsp),%r12       ; \
87        movq    TF_R13(%rsp),%r13       ; \
88        movq    TF_R14(%rsp),%r14       ; \
89        movq    TF_R15(%rsp),%r15       ; \
90        /* movw TF_GS(%rsp),%gs */      ; \
91        movw    TF_FS(%rsp),%fs         ; \
92        movw    TF_ES(%rsp),%es         ; \
93        movw    TF_DS(%rsp),%ds         ; \
94        addq    $TF_REGSIZE,%rsp        ; \
95        cld
96
97#ifndef x86_ASM
98
99/*
100 * The x86_64 trap frame.
101 */
102struct trapframe {
103        /* Pushed by INTR_SAVE_REGS */
104        uint64_t tf_rax;
105        uint64_t tf_rbx;
106        uint64_t tf_rcx;
107        uint64_t tf_rdx;
108        uint64_t tf_rdi;
109        uint64_t tf_rsi;
110        uint64_t tf_rbp;
111        uint64_t tf_r8;
112        uint64_t tf_r9;
113        uint64_t tf_r10;
114        uint64_t tf_r11;
115        uint64_t tf_r12;
116        uint64_t tf_r13;
117        uint64_t tf_r14;
118        uint64_t tf_r15;
119        uint64_t tf_gs;
120        uint64_t tf_fs;
121        uint64_t tf_es;
122        uint64_t tf_ds;
123
124        /* Pushed by the ISR */
125        uint64_t tf_trapno;
126
127        /* These are pushed for a trap */
128        uint64_t tf_err;
129        uint64_t tf_rip;
130        uint64_t tf_cs;
131        uint64_t tf_rflags;
132
133        /* These are always pushed */
134        uint64_t tf_rsp;
135        uint64_t tf_ss;
136};
137
138/*
139 * Our small trap frame.
140 */
141struct small_trapframe {
142        uint64_t tf_trapno;
143
144        /* These are pushed for a trap */
145        uint64_t tf_err;        /* in fact, this one may not... */
146        uint64_t tf_rip;
147        uint64_t tf_cs;
148        uint64_t tf_rflags;
149
150        /* These are always pushed */
151        uint64_t tf_rsp;
152        uint64_t tf_ss;
153};
154
155#else
156
157/* offsets in the trapframe structure */
158#define TF_RAX  0
159#define TF_RBX  8
160#define TF_RCX  16
161#define TF_RDX  24
162#define TF_RDI  32
163#define TF_RSI  40
164#define TF_RBP  48
165#define TF_R8   56
166#define TF_R9   64
167#define TF_R10  72
168#define TF_R11  80
169#define TF_R12  88
170#define TF_R13  96
171#define TF_R14  104
172#define TF_R15  112
173#define TF_GS   120
174#define TF_FS   128
175#define TF_ES   136
176#define TF_DS   144
177
178#endif
179
Note: See TracBrowser for help on using the repository browser.