xref: /freebsd/sys/powerpc/include/reg.h (revision 76d6bb6a6e8f61ed267ac245cdf2d293deade8d7)
1f9bac91bSBenno Rice /* $NetBSD: reg.h,v 1.4 2000/06/04 09:30:44 tsubai Exp $	*/
2f9bac91bSBenno Rice /* $FreeBSD$	*/
3f9bac91bSBenno Rice 
4f9bac91bSBenno Rice #ifndef _POWERPC_REG_H_
5f9bac91bSBenno Rice #define	_POWERPC_REG_H_
6f9bac91bSBenno Rice 
7*76d6bb6aSWarner Losh #include <sys/_types.h>
8*76d6bb6aSWarner Losh 
9a6e340aaSSuleiman Souhlal /* Must match struct trapframe */
10f9bac91bSBenno Rice struct reg {
11*76d6bb6aSWarner Losh 	__register_t fixreg[32];
12*76d6bb6aSWarner Losh 	__register_t lr;
13*76d6bb6aSWarner Losh 	__register_t cr;
14*76d6bb6aSWarner Losh 	__register_t xer;
15*76d6bb6aSWarner Losh 	__register_t ctr;
16*76d6bb6aSWarner Losh 	__register_t pc;
17f9bac91bSBenno Rice };
18f9bac91bSBenno Rice 
19f9bac91bSBenno Rice struct fpreg {
2093312a91SJohn Baldwin 	double fpreg[32];
21f9bac91bSBenno Rice 	double fpscr;
22f9bac91bSBenno Rice };
23f9bac91bSBenno Rice 
2464b83a05SJustin Hibbits /* Must match pcb.pcb_vec */
2564b83a05SJustin Hibbits struct vmxreg {
26*76d6bb6aSWarner Losh 	__uint32_t vr[32][4];
27*76d6bb6aSWarner Losh 	__uint32_t pad[2];
28*76d6bb6aSWarner Losh 	__uint32_t vrsave;
29*76d6bb6aSWarner Losh 	__uint32_t vscr;
3064b83a05SJustin Hibbits };
3164b83a05SJustin Hibbits 
32f9bac91bSBenno Rice struct dbreg {
33c3e289e1SNathan Whitehorn 	unsigned int	junk;
34f9bac91bSBenno Rice };
35f9bac91bSBenno Rice 
36dbee5c67SJohn Baldwin #ifdef __LP64__
37c3e289e1SNathan Whitehorn /* Must match struct trapframe */
38c3e289e1SNathan Whitehorn struct reg32 {
39*76d6bb6aSWarner Losh 	__int32_t fixreg[32];
40*76d6bb6aSWarner Losh 	__int32_t lr;
41*76d6bb6aSWarner Losh 	__int32_t cr;
42*76d6bb6aSWarner Losh 	__int32_t xer;
43*76d6bb6aSWarner Losh 	__int32_t ctr;
44*76d6bb6aSWarner Losh 	__int32_t pc;
45c3e289e1SNathan Whitehorn };
46c3e289e1SNathan Whitehorn 
47c3e289e1SNathan Whitehorn struct fpreg32 {
48c3e289e1SNathan Whitehorn 	struct fpreg data;
49c3e289e1SNathan Whitehorn };
50c3e289e1SNathan Whitehorn 
5164b83a05SJustin Hibbits struct vmxreg32 {
5264b83a05SJustin Hibbits 	struct vmxreg data;
5364b83a05SJustin Hibbits };
5464b83a05SJustin Hibbits 
55c3e289e1SNathan Whitehorn struct dbreg32 {
56c3e289e1SNathan Whitehorn 	struct dbreg data;
57c3e289e1SNathan Whitehorn };
58dbee5c67SJohn Baldwin 
59dbee5c67SJohn Baldwin #define __HAVE_REG32
60c3e289e1SNathan Whitehorn #endif
61c3e289e1SNathan Whitehorn 
621f042619SDag-Erling Smørgrav #ifdef _KERNEL
631f042619SDag-Erling Smørgrav /*
641f042619SDag-Erling Smørgrav  * XXX these interfaces are MI, so they should be declared in a MI place.
651f042619SDag-Erling Smørgrav  */
66812344bcSAlfred Perlstein int	fill_regs(struct thread *, struct reg *);
67812344bcSAlfred Perlstein int	set_regs(struct thread *, struct reg *);
68812344bcSAlfred Perlstein int	fill_fpregs(struct thread *, struct fpreg *);
69812344bcSAlfred Perlstein int	set_fpregs(struct thread *, struct fpreg *);
70812344bcSAlfred Perlstein int	fill_dbregs(struct thread *, struct dbreg *);
71812344bcSAlfred Perlstein int	set_dbregs(struct thread *, struct dbreg *);
72c3e289e1SNathan Whitehorn 
7335a1aa5fSBrandon Bergren /*
7435a1aa5fSBrandon Bergren  * MD interfaces.
7535a1aa5fSBrandon Bergren  */
7635a1aa5fSBrandon Bergren void	cpu_save_thread_regs(struct thread *);
7735a1aa5fSBrandon Bergren 
78c3e289e1SNathan Whitehorn #ifdef COMPAT_FREEBSD32
79c3e289e1SNathan Whitehorn struct image_params;
80c3e289e1SNathan Whitehorn 
81c3e289e1SNathan Whitehorn int	fill_regs32(struct thread *, struct reg32 *);
82c3e289e1SNathan Whitehorn int	set_regs32(struct thread *, struct reg32 *);
8331174518SJohn Baldwin void	ppc32_setregs(struct thread *, struct image_params *, uintptr_t);
84c3e289e1SNathan Whitehorn 
85c3e289e1SNathan Whitehorn #define	fill_fpregs32(td, reg)	fill_fpregs(td,(struct fpreg *)reg)
86c3e289e1SNathan Whitehorn #define	set_fpregs32(td, reg)	set_fpregs(td,(struct fpreg *)reg)
87c3e289e1SNathan Whitehorn #define	fill_dbregs32(td, reg)	fill_dbregs(td,(struct dbreg *)reg)
88c3e289e1SNathan Whitehorn #define	set_dbregs32(td, reg)	set_dbregs(td,(struct dbreg *)reg)
89c3e289e1SNathan Whitehorn #endif
90c3e289e1SNathan Whitehorn 
911f042619SDag-Erling Smørgrav #endif
92f9bac91bSBenno Rice 
93f9bac91bSBenno Rice #endif /* _POWERPC_REG_H_ */
94