00001 /*****************************************************************************/ 00007 /*****************************************************************************/ 00008 #ifndef __L4_SYS__INCLUDE__ARCH_AMD64__UTCB_H__ 00009 #define __L4_SYS__INCLUDE__ARCH_AMD64__UTCB_H__ 00010 00011 #include <l4/sys/types.h> 00012 00023 struct l4_utcb_ex_regs_args 00024 { 00025 l4_threadid_t _res0; 00026 l4_threadid_t caphandler; 00027 l4_threadid_t _res1; 00028 }; 00029 00035 struct l4_utcb_task_new_args 00036 { 00037 l4_umword_t _res0; 00038 l4_threadid_t caphandler; 00039 l4_quota_desc_t quota; 00040 l4_threadid_t _res1; 00041 }; 00042 00046 enum { 00047 L4_EXCEPTION_REPLY_DW0_DEALIEN = 1, 00048 00049 L4_UTCB_EXCEPTION_REGS_SIZE = 23, 00050 L4_UTCB_GENERIC_DATA_SIZE = 32, 00051 00052 L4_UTCB_BUFFER_ACCEPTOR = 0, 00053 00054 L4_UTCB_INHERIT_FPU = 2, 00055 }; 00056 00062 struct l4_utcb_exception 00063 { 00064 l4_umword_t r15; 00065 l4_umword_t r14; 00066 l4_umword_t r13; 00067 l4_umword_t r12; 00068 l4_umword_t r11; 00069 l4_umword_t r10; 00070 l4_umword_t r9; 00071 l4_umword_t r8; 00072 l4_umword_t rdi; 00073 l4_umword_t rsi; 00074 l4_umword_t rbp; 00075 l4_umword_t pfa; 00076 l4_umword_t rbx; 00077 l4_umword_t rdx; 00078 l4_umword_t rcx; 00079 l4_umword_t rax; 00081 l4_umword_t trapno; 00082 l4_umword_t err; 00083 union { 00084 l4_umword_t eip; 00085 l4_umword_t rip; 00086 }; 00087 l4_umword_t dummy1; 00088 union { 00089 l4_umword_t rflags; 00090 l4_umword_t eflags; 00091 }; 00092 union { 00093 l4_umword_t esp; 00094 l4_umword_t rsp; 00095 }; 00096 l4_umword_t ss; 00097 }; 00098 00099 00100 #include_next <l4/sys/utcb.h> 00101 00102 /* 00103 * ================================================================== 00104 * Implementations. 00105 */ 00106 00107 L4_INLINE l4_utcb_t *l4_utcb_get(void) 00108 { 00109 return *((l4_utcb_t**)(0xffffffffeacfd000)); 00110 } 00111 00112 L4_INLINE l4_umword_t l4_utcb_exc_pc(l4_utcb_t *u) 00113 { 00114 return u->exc.rip; 00115 } 00116 00117 L4_INLINE l4_umword_t l4_utcb_exc_typeval(l4_utcb_t *u) 00118 { 00119 return u->exc.trapno; 00120 } 00121 00122 L4_INLINE int l4_utcb_exc_is_pf(l4_utcb_t *u) 00123 { 00124 return u->exc.trapno == 14; 00125 } 00126 00127 L4_INLINE l4_addr_t l4_utcb_exc_pfa(l4_utcb_t *u) 00128 { 00129 return (u->exc.pfa & ~3) | (u->exc.err & 2); 00130 } 00131 00132 #endif /* ! __L4_SYS__INCLUDE__ARCH_AMD64__UTCB_H__ */