xref: /freebsd/sys/powerpc/include/reg.h (revision f66a407de25eaa4c58b4f6f02086d55141593b63)
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