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