19 #ifndef _COBALT_POWERPC_ASM_THREAD_H
20 #define _COBALT_POWERPC_ASM_THREAD_H
22 #include <asm-generic/xenomai/thread.h>
26 #ifdef CONFIG_XENO_ARCH_FPU
27 struct thread_struct *fpup;
28 #define xnarch_fpu_ptr(tcb) ((tcb)->fpup)
30 #define xnarch_fpu_ptr(tcb) NULL
38 #define xnarch_fault_regs(d) ((d)->regs)
39 #define xnarch_fault_trap(d) ((unsigned int)(d)->regs->trap)
40 #define xnarch_fault_code(d) ((d)->regs->dar)
41 #define xnarch_fault_pc(d) ((d)->regs->nip)
42 #define xnarch_fault_pc(d) ((d)->regs->nip)
43 #define xnarch_fault_fpu_p(d) 0
44 #define xnarch_fault_pf_p(d) ((d)->exception == IPIPE_TRAP_ACCESS)
45 #define xnarch_fault_bp_p(d) ((current->ptrace & PT_PTRACED) && \
46 ((d)->exception == IPIPE_TRAP_IABR || \
47 (d)->exception == IPIPE_TRAP_SSTEP || \
48 (d)->exception == IPIPE_TRAP_DEBUG))
49 #define xnarch_fault_notify(d) (xnarch_fault_bp_p(d) == 0)
51 static inline void xnarch_enter_root(
struct xnthread *root) { }
53 #ifdef CONFIG_XENO_ARCH_FPU
55 static inline void xnarch_init_root_tcb(
struct xnthread *thread)
57 struct xnarchtcb *tcb = xnthread_archtcb(thread);
61 static inline void xnarch_init_shadow_tcb(
struct xnthread *thread)
63 struct xnarchtcb *tcb = xnthread_archtcb(thread);
64 tcb->fpup = &tcb->core.host_task->thread;
67 void xnarch_leave_root(
struct xnthread *root);
71 static inline void xnarch_init_root_tcb(
struct xnthread *thread) { }
72 static inline void xnarch_init_shadow_tcb(
struct xnthread *thread) { }
73 static inline void xnarch_leave_root(
struct xnthread *root) { }
78 xnarch_handle_fpu_fault(
struct xnthread *from,
79 struct xnthread *to,
struct ipipe_trap_data *d)
84 void xnarch_switch_to(
struct xnthread *out,
struct xnthread *in);
86 int xnarch_escalate(
void);
88 void xnarch_save_fpu(
struct xnthread *thread);
90 void xnarch_switch_fpu(
struct xnthread *from,
struct xnthread *thread);