Subversion Repositories HelenOS-historic

Rev

Rev 1703 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1703 Rev 1780
Line 67... Line 67...
67
#define VECTOR_SYSCALL          (IVT_FREEBASE+0)
67
#define VECTOR_SYSCALL          (IVT_FREEBASE+0)
68
#define VECTOR_TLB_SHOOTDOWN_IPI    (IVT_FREEBASE+1)
68
#define VECTOR_TLB_SHOOTDOWN_IPI    (IVT_FREEBASE+1)
69
#define VECTOR_DEBUG_IPI                (IVT_FREEBASE+2)
69
#define VECTOR_DEBUG_IPI                (IVT_FREEBASE+2)
70
 
70
 
71
struct istate {
71
struct istate {
72
    __u32 eax;
72
    uint32_t eax;
73
    __u32 ecx;
73
    uint32_t ecx;
74
    __u32 edx;
74
    uint32_t edx;
75
    __u32 esi;
75
    uint32_t esi;
76
    __u32 edi;
76
    uint32_t edi;
77
    __u32 ebp;
77
    uint32_t ebp;
78
    __u32 ebx;
78
    uint32_t ebx;
79
 
79
 
80
    __u32 gs;
80
    uint32_t gs;
81
    __u32 fs;
81
    uint32_t fs;
82
    __u32 es;
82
    uint32_t es;
83
    __u32 ds;
83
    uint32_t ds;
84
 
84
 
85
    __u32 error_word;
85
    uint32_t error_word;
86
    __u32 eip;
86
    uint32_t eip;
87
    __u32 cs;
87
    uint32_t cs;
88
    __u32 eflags;
88
    uint32_t eflags;
89
    __u32 stack[];
89
    uint32_t stack[];
90
};
90
};
91
 
91
 
92
/** Return true if exception happened while in userspace */
92
/** Return true if exception happened while in userspace */
93
static inline int istate_from_uspace(istate_t *istate)
93
static inline int istate_from_uspace(istate_t *istate)
94
{
94
{
95
    return !(istate->eip & 0x80000000);
95
    return !(istate->eip & 0x80000000);
96
}
96
}
97
 
97
 
98
static inline void istate_set_retaddr(istate_t *istate, __address retaddr)
98
static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr)
99
{
99
{
100
    istate->eip = retaddr;
100
    istate->eip = retaddr;
101
}
101
}
102
 
102
 
103
static inline __native istate_get_pc(istate_t *istate)
103
static inline unative_t istate_get_pc(istate_t *istate)
104
{
104
{
105
    return istate->eip;
105
    return istate->eip;
106
}
106
}
107
 
107
 
108
extern void (* disable_irqs_function)(__u16 irqmask);
108
extern void (* disable_irqs_function)(uint16_t irqmask);
109
extern void (* enable_irqs_function)(__u16 irqmask);
109
extern void (* enable_irqs_function)(uint16_t irqmask);
110
extern void (* eoi_function)(void);
110
extern void (* eoi_function)(void);
111
 
111
 
112
extern void PRINT_INFO_ERRCODE(istate_t *istate);
112
extern void PRINT_INFO_ERRCODE(istate_t *istate);
113
extern void null_interrupt(int n, istate_t *istate);
113
extern void null_interrupt(int n, istate_t *istate);
114
extern void gp_fault(int n, istate_t *istate);
114
extern void gp_fault(int n, istate_t *istate);
Line 116... Line 116...
116
extern void ss_fault(int n, istate_t *istate);
116
extern void ss_fault(int n, istate_t *istate);
117
extern void simd_fp_exception(int n, istate_t *istate);
117
extern void simd_fp_exception(int n, istate_t *istate);
118
extern void syscall(int n, istate_t *istate);
118
extern void syscall(int n, istate_t *istate);
119
extern void tlb_shootdown_ipi(int n, istate_t *istate);
119
extern void tlb_shootdown_ipi(int n, istate_t *istate);
120
 
120
 
121
extern void trap_virtual_enable_irqs(__u16 irqmask);
121
extern void trap_virtual_enable_irqs(uint16_t irqmask);
122
extern void trap_virtual_disable_irqs(__u16 irqmask);
122
extern void trap_virtual_disable_irqs(uint16_t irqmask);
123
extern void trap_virtual_eoi(void);
123
extern void trap_virtual_eoi(void);
124
 
124
 
125
#endif
125
#endif
126
 
126
 
127
/** @}
127
/** @}