master
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_ */