Rev 1705 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1705 | Rev 1780 | ||
|---|---|---|---|
| Line 68... | Line 68... | ||
| 68 | #define VECTOR_WAKEUP_IPI (IVT_FREEBASE+1) |
68 | #define VECTOR_WAKEUP_IPI (IVT_FREEBASE+1) |
| 69 | #define VECTOR_DEBUG_IPI (IVT_FREEBASE+2) |
69 | #define VECTOR_DEBUG_IPI (IVT_FREEBASE+2) |
| 70 | 70 | ||
| 71 | /** This is passed to interrupt handlers */ |
71 | /** This is passed to interrupt handlers */ |
| 72 | struct istate { |
72 | struct istate { |
| 73 | __u64 rax; |
73 | uint64_t rax; |
| 74 | __u64 rbx; |
74 | uint64_t rbx; |
| 75 | __u64 rcx; |
75 | uint64_t rcx; |
| 76 | __u64 rdx; |
76 | uint64_t rdx; |
| 77 | __u64 rsi; |
77 | uint64_t rsi; |
| 78 | __u64 rdi; |
78 | uint64_t rdi; |
| 79 | __u64 r8; |
79 | uint64_t r8; |
| 80 | __u64 r9; |
80 | uint64_t r9; |
| 81 | __u64 r10; |
81 | uint64_t r10; |
| 82 | __u64 r11; |
82 | uint64_t r11; |
| 83 | __u64 r12; |
83 | uint64_t r12; |
| 84 | __u64 r13; |
84 | uint64_t r13; |
| 85 | __u64 r14; |
85 | uint64_t r14; |
| 86 | __u64 r15; |
86 | uint64_t r15; |
| 87 | __u64 rbp; |
87 | uint64_t rbp; |
| 88 | __u64 error_word; |
88 | uint64_t error_word; |
| 89 | __u64 rip; |
89 | uint64_t rip; |
| 90 | __u64 cs; |
90 | uint64_t cs; |
| 91 | __u64 rflags; |
91 | uint64_t rflags; |
| 92 | __u64 stack[]; /* Additional data on stack */ |
92 | uint64_t stack[]; /* Additional data on stack */ |
| 93 | }; |
93 | }; |
| 94 | 94 | ||
| 95 | /** Return true if exception happened while in userspace */ |
95 | /** Return true if exception happened while in userspace */ |
| 96 | static inline int istate_from_uspace(istate_t *istate) |
96 | static inline int istate_from_uspace(istate_t *istate) |
| 97 | { |
97 | { |
| 98 | return !(istate->rip & 0x8000000000000000); |
98 | return !(istate->rip & 0x8000000000000000); |
| 99 | } |
99 | } |
| 100 | 100 | ||
| 101 | static inline void istate_set_retaddr(istate_t *istate, __address retaddr) |
101 | static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) |
| 102 | { |
102 | { |
| 103 | istate->rip = retaddr; |
103 | istate->rip = retaddr; |
| 104 | } |
104 | } |
| 105 | static inline __native istate_get_pc(istate_t *istate) |
105 | static inline unative_t istate_get_pc(istate_t *istate) |
| 106 | { |
106 | { |
| 107 | return istate->rip; |
107 | return istate->rip; |
| 108 | } |
108 | } |
| 109 | 109 | ||
| 110 | extern void (* disable_irqs_function)(__u16 irqmask); |
110 | extern void (* disable_irqs_function)(uint16_t irqmask); |
| 111 | extern void (* enable_irqs_function)(__u16 irqmask); |
111 | extern void (* enable_irqs_function)(uint16_t irqmask); |
| 112 | extern void (* eoi_function)(void); |
112 | extern void (* eoi_function)(void); |
| 113 | 113 | ||
| 114 | extern void print_info_errcode(int n, istate_t *istate); |
114 | extern void print_info_errcode(int n, istate_t *istate); |
| 115 | extern void null_interrupt(int n, istate_t *istate); |
115 | extern void null_interrupt(int n, istate_t *istate); |
| 116 | extern void gp_fault(int n, istate_t *istate); |
116 | extern void gp_fault(int n, istate_t *istate); |
| Line 118... | Line 118... | ||
| 118 | extern void ss_fault(int n, istate_t *istate); |
118 | extern void ss_fault(int n, istate_t *istate); |
| 119 | extern void page_fault(int n, istate_t *istate); |
119 | extern void page_fault(int n, istate_t *istate); |
| 120 | extern void syscall(int n, istate_t *istate); |
120 | extern void syscall(int n, istate_t *istate); |
| 121 | extern void tlb_shootdown_ipi(int n, istate_t *istate); |
121 | extern void tlb_shootdown_ipi(int n, istate_t *istate); |
| 122 | 122 | ||
| 123 | extern void trap_virtual_enable_irqs(__u16 irqmask); |
123 | extern void trap_virtual_enable_irqs(uint16_t irqmask); |
| 124 | extern void trap_virtual_disable_irqs(__u16 irqmask); |
124 | extern void trap_virtual_disable_irqs(uint16_t irqmask); |
| 125 | extern void trap_virtual_eoi(void); |
125 | extern void trap_virtual_eoi(void); |
| 126 | /* AMD64 - specific page handler */ |
126 | /* AMD64 - specific page handler */ |
| 127 | extern void ident_page_fault(int n, istate_t *istate); |
127 | extern void ident_page_fault(int n, istate_t *istate); |
| 128 | 128 | ||
| 129 | #endif |
129 | #endif |