1/* $NetBSD: reg.h,v 1.4 2000/06/04 09:30:44 tsubai Exp $	*/
2
3#ifndef _POWERPC_REG_H_
4#define	_POWERPC_REG_H_
5
6#include <sys/_types.h>
7
8/* Must match struct trapframe */
9struct reg {
10	__register_t fixreg[32];
11	__register_t lr;
12	__register_t cr;
13	__register_t xer;
14	__register_t ctr;
15	__register_t pc;
16};
17
18struct fpreg {
19	double fpreg[32];
20	double fpscr;
21};
22
23/* Must match pcb.pcb_vec */
24struct vmxreg {
25	__uint32_t vr[32][4];
26	__uint32_t pad[2];
27	__uint32_t vrsave;
28	__uint32_t vscr;
29};
30
31struct dbreg {
32	unsigned int	junk;
33};
34
35#ifdef __LP64__
36/* Must match struct trapframe */
37struct reg32 {
38	__int32_t fixreg[32];
39	__int32_t lr;
40	__int32_t cr;
41	__int32_t xer;
42	__int32_t ctr;
43	__int32_t pc;
44};
45
46struct fpreg32 {
47	struct fpreg data;
48};
49
50struct vmxreg32 {
51	struct vmxreg data;
52};
53
54struct dbreg32 {
55	struct dbreg data;
56};
57
58#define __HAVE_REG32
59#endif
60
61#ifdef _KERNEL
62/*
63 * XXX these interfaces are MI, so they should be declared in a MI place.
64 */
65int	fill_regs(struct thread *, struct reg *);
66int	set_regs(struct thread *, struct reg *);
67int	fill_fpregs(struct thread *, struct fpreg *);
68int	set_fpregs(struct thread *, struct fpreg *);
69int	fill_dbregs(struct thread *, struct dbreg *);
70int	set_dbregs(struct thread *, struct dbreg *);
71
72/*
73 * MD interfaces.
74 */
75void	cpu_save_thread_regs(struct thread *);
76
77#ifdef COMPAT_FREEBSD32
78struct image_params;
79
80int	fill_regs32(struct thread *, struct reg32 *);
81int	set_regs32(struct thread *, struct reg32 *);
82void	ppc32_setregs(struct thread *, struct image_params *, uintptr_t);
83
84#define	fill_fpregs32(td, reg)	fill_fpregs(td,(struct fpreg *)reg)
85#define	set_fpregs32(td, reg)	set_fpregs(td,(struct fpreg *)reg)
86#define	fill_dbregs32(td, reg)	fill_dbregs(td,(struct dbreg *)reg)
87#define	set_dbregs32(td, reg)	set_dbregs(td,(struct dbreg *)reg)
88#endif
89
90#endif
91
92#endif /* _POWERPC_REG_H_ */
93