177957Sbenno/* $NetBSD: reg.h,v 1.4 2000/06/04 09:30:44 tsubai Exp $	*/
277957Sbenno/* $FreeBSD$	*/
377957Sbenno
477957Sbenno#ifndef _POWERPC_REG_H_
577957Sbenno#define	_POWERPC_REG_H_
677957Sbenno
7209975Snwhitehorn#if defined(_KERNEL) && !defined(KLD_MODULE) && !defined(_STANDALONE)
8209975Snwhitehorn#include "opt_compat.h"
9209975Snwhitehorn#endif
10209975Snwhitehorn
11132838Sssouhlal/* Must match struct trapframe */
1277957Sbennostruct reg {
1377957Sbenno	register_t fixreg[32];
1477957Sbenno	register_t lr;
15209975Snwhitehorn	register_t cr;
16209975Snwhitehorn	register_t xer;
1777957Sbenno	register_t ctr;
1877957Sbenno	register_t pc;
1977957Sbenno};
2077957Sbenno
2177957Sbennostruct fpreg {
22295132Sjhb	double fpreg[32];
2377957Sbenno	double fpscr;
2477957Sbenno};
2577957Sbenno
26277166Sjhibbits/* Must match pcb.pcb_vec */
27277166Sjhibbitsstruct vmxreg {
28277166Sjhibbits	uint32_t vr[32][4];
29277166Sjhibbits	uint32_t pad[2];
30277166Sjhibbits	uint32_t vrsave;
31277166Sjhibbits	uint32_t vscr;
32277166Sjhibbits};
33277166Sjhibbits
3477957Sbennostruct dbreg {
35209975Snwhitehorn	unsigned int	junk;
3677957Sbenno};
3777957Sbenno
38281266Sjhb#ifdef __LP64__
39209975Snwhitehorn/* Must match struct trapframe */
40209975Snwhitehornstruct reg32 {
41209975Snwhitehorn	int32_t fixreg[32];
42209975Snwhitehorn	int32_t lr;
43209975Snwhitehorn	int32_t cr;
44209975Snwhitehorn	int32_t xer;
45209975Snwhitehorn	int32_t ctr;
46209975Snwhitehorn	int32_t pc;
47209975Snwhitehorn};
48209975Snwhitehorn
49209975Snwhitehornstruct fpreg32 {
50209975Snwhitehorn	struct fpreg data;
51209975Snwhitehorn};
52209975Snwhitehorn
53277166Sjhibbitsstruct vmxreg32 {
54277166Sjhibbits	struct vmxreg data;
55277166Sjhibbits};
56277166Sjhibbits
57209975Snwhitehornstruct dbreg32 {
58209975Snwhitehorn	struct dbreg data;
59209975Snwhitehorn};
60281266Sjhb
61281266Sjhb#define __HAVE_REG32
62209975Snwhitehorn#endif
63209975Snwhitehorn
6485294Sdes#ifdef _KERNEL
6585294Sdes/*
6685294Sdes * XXX these interfaces are MI, so they should be declared in a MI place.
6785294Sdes */
6892842Salfredint	fill_regs(struct thread *, struct reg *);
6992842Salfredint	set_regs(struct thread *, struct reg *);
7092842Salfredint	fill_fpregs(struct thread *, struct fpreg *);
7192842Salfredint	set_fpregs(struct thread *, struct fpreg *);
7292842Salfredint	fill_dbregs(struct thread *, struct dbreg *);
7392842Salfredint	set_dbregs(struct thread *, struct dbreg *);
74209975Snwhitehorn
75209975Snwhitehorn#ifdef COMPAT_FREEBSD32
76209975Snwhitehornstruct image_params;
77209975Snwhitehorn
78209975Snwhitehornint	fill_regs32(struct thread *, struct reg32 *);
79209975Snwhitehornint	set_regs32(struct thread *, struct reg32 *);
80209975Snwhitehornvoid	ppc32_setregs(struct thread *, struct image_params *, u_long);
81209975Snwhitehorn
82209975Snwhitehorn#define	fill_fpregs32(td, reg)	fill_fpregs(td,(struct fpreg *)reg)
83209975Snwhitehorn#define	set_fpregs32(td, reg)	set_fpregs(td,(struct fpreg *)reg)
84209975Snwhitehorn#define	fill_dbregs32(td, reg)	fill_dbregs(td,(struct dbreg *)reg)
85209975Snwhitehorn#define	set_dbregs32(td, reg)	set_dbregs(td,(struct dbreg *)reg)
8685294Sdes#endif
8777957Sbenno
88209975Snwhitehorn#endif
89209975Snwhitehorn
9077957Sbenno#endif /* _POWERPC_REG_H_ */
91