1f9bac91bSBenno Rice /* $NetBSD: reg.h,v 1.4 2000/06/04 09:30:44 tsubai Exp $ */ 2f9bac91bSBenno Rice 3f9bac91bSBenno Rice #ifndef _POWERPC_REG_H_ 4f9bac91bSBenno Rice #define _POWERPC_REG_H_ 5f9bac91bSBenno Rice 6*76d6bb6aSWarner Losh #include <sys/_types.h> 7*76d6bb6aSWarner Losh 8a6e340aaSSuleiman Souhlal /* Must match struct trapframe */ 9f9bac91bSBenno Rice struct reg { 10*76d6bb6aSWarner Losh __register_t fixreg[32]; 11*76d6bb6aSWarner Losh __register_t lr; 12*76d6bb6aSWarner Losh __register_t cr; 13*76d6bb6aSWarner Losh __register_t xer; 14*76d6bb6aSWarner Losh __register_t ctr; 15*76d6bb6aSWarner Losh __register_t pc; 16f9bac91bSBenno Rice }; 17f9bac91bSBenno Rice 18f9bac91bSBenno Rice struct fpreg { 1993312a91SJohn Baldwin double fpreg[32]; 20f9bac91bSBenno Rice double fpscr; 21f9bac91bSBenno Rice }; 22f9bac91bSBenno Rice 2364b83a05SJustin Hibbits /* Must match pcb.pcb_vec */ 2464b83a05SJustin Hibbits struct vmxreg { 25*76d6bb6aSWarner Losh __uint32_t vr[32][4]; 26*76d6bb6aSWarner Losh __uint32_t pad[2]; 27*76d6bb6aSWarner Losh __uint32_t vrsave; 28*76d6bb6aSWarner Losh __uint32_t vscr; 2964b83a05SJustin Hibbits }; 3064b83a05SJustin Hibbits 31f9bac91bSBenno Rice struct dbreg { 32c3e289e1SNathan Whitehorn unsigned int junk; 33f9bac91bSBenno Rice }; 34f9bac91bSBenno Rice 35dbee5c67SJohn Baldwin #ifdef __LP64__ 36c3e289e1SNathan Whitehorn /* Must match struct trapframe */ 37c3e289e1SNathan Whitehorn struct reg32 { 38*76d6bb6aSWarner Losh __int32_t fixreg[32]; 39*76d6bb6aSWarner Losh __int32_t lr; 40*76d6bb6aSWarner Losh __int32_t cr; 41*76d6bb6aSWarner Losh __int32_t xer; 42*76d6bb6aSWarner Losh __int32_t ctr; 43*76d6bb6aSWarner Losh __int32_t pc; 44c3e289e1SNathan Whitehorn }; 45c3e289e1SNathan Whitehorn 46c3e289e1SNathan Whitehorn struct fpreg32 { 47c3e289e1SNathan Whitehorn struct fpreg data; 48c3e289e1SNathan Whitehorn }; 49c3e289e1SNathan Whitehorn 5064b83a05SJustin Hibbits struct vmxreg32 { 5164b83a05SJustin Hibbits struct vmxreg data; 5264b83a05SJustin Hibbits }; 5364b83a05SJustin Hibbits 54c3e289e1SNathan Whitehorn struct dbreg32 { 55c3e289e1SNathan Whitehorn struct dbreg data; 56c3e289e1SNathan Whitehorn }; 57dbee5c67SJohn Baldwin 58dbee5c67SJohn Baldwin #define __HAVE_REG32 59c3e289e1SNathan Whitehorn #endif 60c3e289e1SNathan Whitehorn 611f042619SDag-Erling Smørgrav #ifdef _KERNEL 621f042619SDag-Erling Smørgrav /* 631f042619SDag-Erling Smørgrav * XXX these interfaces are MI, so they should be declared in a MI place. 641f042619SDag-Erling Smørgrav */ 65812344bcSAlfred Perlstein int fill_regs(struct thread *, struct reg *); 66812344bcSAlfred Perlstein int set_regs(struct thread *, struct reg *); 67812344bcSAlfred Perlstein int fill_fpregs(struct thread *, struct fpreg *); 68812344bcSAlfred Perlstein int set_fpregs(struct thread *, struct fpreg *); 69812344bcSAlfred Perlstein int fill_dbregs(struct thread *, struct dbreg *); 70812344bcSAlfred Perlstein int set_dbregs(struct thread *, struct dbreg *); 71c3e289e1SNathan Whitehorn 72c3e289e1SNathan Whitehorn #ifdef COMPAT_FREEBSD32 73c3e289e1SNathan Whitehorn struct image_params; 74c3e289e1SNathan Whitehorn 75c3e289e1SNathan Whitehorn int fill_regs32(struct thread *, struct reg32 *); 76c3e289e1SNathan Whitehorn int set_regs32(struct thread *, struct reg32 *); 7731174518SJohn Baldwin void ppc32_setregs(struct thread *, struct image_params *, uintptr_t); 78c3e289e1SNathan Whitehorn 79c3e289e1SNathan Whitehorn #define fill_fpregs32(td, reg) fill_fpregs(td,(struct fpreg *)reg) 80c3e289e1SNathan Whitehorn #define set_fpregs32(td, reg) set_fpregs(td,(struct fpreg *)reg) 81c3e289e1SNathan Whitehorn #define fill_dbregs32(td, reg) fill_dbregs(td,(struct dbreg *)reg) 82c3e289e1SNathan Whitehorn #define set_dbregs32(td, reg) set_dbregs(td,(struct dbreg *)reg) 83c3e289e1SNathan Whitehorn #endif 84c3e289e1SNathan Whitehorn 851f042619SDag-Erling Smørgrav #endif 86f9bac91bSBenno Rice 87f9bac91bSBenno Rice #endif /* _POWERPC_REG_H_ */ 88