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 |