19 #ifndef _COBALT_ARM64_ASM_THREAD_H
20 #define _COBALT_ARM64_ASM_THREAD_H
22 #include <asm-generic/xenomai/thread.h>
26 #ifdef CONFIG_XENO_ARCH_FPU
27 struct fpsimd_state xnfpsimd_state;
28 struct fpsimd_state *fpup;
29 #define xnarch_fpu_ptr(tcb) ((tcb)->fpup)
37 #ifdef CONFIG_ARM_THUMB
43 #define xnarch_fault_regs(d) ((d)->regs)
44 #define xnarch_fault_trap(d) ((d)->exception)
45 #define xnarch_fault_code(d) (0)
46 #define xnarch_fault_pc(d) ((unsigned long)((d)->regs->pc - 4))
48 #define xnarch_fault_pf_p(d) ((d)->exception == IPIPE_TRAP_ACCESS)
49 #define xnarch_fault_bp_p(d) ((current->ptrace & PT_PTRACED) && \
50 ((d)->exception == IPIPE_TRAP_BREAK || \
51 (d)->exception == IPIPE_TRAP_UNDEFINSTR))
53 #define xnarch_fault_notify(d) (!xnarch_fault_bp_p(d))
55 void xnarch_switch_to(
struct xnthread *out,
struct xnthread *in);
57 static inline void xnarch_enter_root(
struct xnthread *root) { }
59 int xnarch_escalate(
void);
61 #if defined(CONFIG_XENO_ARCH_FPU)
63 static inline void xnarch_init_root_tcb(
struct xnthread *thread)
65 struct xnarchtcb *tcb = xnthread_archtcb(thread);
69 void xnarch_init_shadow_tcb(
struct xnthread *thread);
71 static inline int xnarch_fault_fpu_p(
struct ipipe_trap_data *d)
73 return xnarch_fault_trap(d) == IPIPE_TRAP_FPU_ACC;
76 void xnarch_leave_root(
struct xnthread *root);
78 void xnarch_save_fpu(
struct xnthread *thread);
80 void xnarch_switch_fpu(
struct xnthread *from,
struct xnthread *thread);
83 xnarch_handle_fpu_fault(
struct xnthread *from,
84 struct xnthread *to,
struct ipipe_trap_data *d)
91 static inline void xnarch_init_root_tcb(
struct xnthread *thread) { }
92 static inline void xnarch_init_shadow_tcb(
struct xnthread *thread) { }
99 static inline int xnarch_fault_fpu_p(
struct ipipe_trap_data *d)
104 static inline void xnarch_leave_root(
struct xnthread *root) { }
106 static inline void xnarch_save_fpu(
struct xnthread *thread) { }
108 static inline void xnarch_switch_fpu(
struct xnthread *f,
struct xnthread *t) { }
110 static inline int xnarch_handle_fpu_fault(
struct xnthread *from,
111 struct xnthread *to,
struct ipipe_trap_data *d)
117 static inline void xnarch_enable_kfpu(
void) { }
119 static inline void xnarch_disable_kfpu(
void) { }