Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/powerpc/include/pcb.h
102423 views
1
/*-
2
* SPDX-License-Identifier: BSD-4-Clause
3
*
4
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
5
* Copyright (C) 1995, 1996 TooLs GmbH.
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
* 3. All advertising materials mentioning features or use of this software
17
* must display the following acknowledgement:
18
* This product includes software developed by TooLs GmbH.
19
* 4. The name of TooLs GmbH may not be used to endorse or promote products
20
* derived from this software without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
23
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25
* IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
*
33
* $NetBSD: pcb.h,v 1.4 2000/06/04 11:57:17 tsubai Exp $
34
*/
35
36
#ifndef _MACHINE_PCB_H_
37
#define _MACHINE_PCB_H_
38
39
#include <sys/endian.h>
40
41
#include <machine/setjmp.h>
42
43
#ifndef _STANDALONE
44
/*
45
* struct pcb is known to and used by kernel debuggers. Its layout must be kept
46
* stable. When adding extra fields that are accessed by kernel debuggers,
47
* debuggers should be backward compatible by using osreldate.
48
*/
49
struct pcb {
50
register_t pcb_context[20]; /* non-volatile r12-r31 */
51
register_t pcb_cr; /* Condition register */
52
register_t pcb_sp; /* stack pointer */
53
register_t pcb_toc; /* toc pointer */
54
register_t pcb_lr; /* link register */
55
register_t pcb_dscr; /* dscr value */
56
register_t pcb_fscr;
57
register_t pcb_tar;
58
struct pmap *pcb_pm; /* pmap of our vmspace */
59
jmp_buf *pcb_onfault; /* For use during
60
copyin/copyout */
61
int pcb_flags;
62
#define PCB_FPU 0x1 /* Process uses FPU */
63
#define PCB_FPREGS 0x2 /* Process had FPU registers initialized */
64
#define PCB_VEC 0x4 /* Process uses Altivec */
65
#define PCB_VSX 0x8 /* Process had VSX initialized */
66
#define PCB_CDSCR 0x10 /* Process had Custom DSCR initialized */
67
#define PCB_HTM 0x20 /* Process had HTM initialized */
68
#define PCB_CFSCR 0x40 /* Process had FSCR updated */
69
#define PCB_KERN_FPU 0x80 /* Kernel is using FPU/Vector unit */
70
#define PCB_KERN_FPU_NOSAVE 0x100 /* FPU/Vec state not saved for kernel use */
71
#define PCB_VECREGS 0x200 /* Process had Altivec registers initialized */
72
struct fpu {
73
union {
74
uint32_t vsr[4];
75
double fpr;
76
} fpr[32];
77
double fpscr; /* FPSCR stored as double for easier access */
78
} pcb_fpu; /* Floating point processor */
79
unsigned int pcb_fpcpu; /* which CPU had our FPU
80
stuff. */
81
struct vec {
82
uint32_t vr[32][4];
83
uint32_t spare[2];
84
uint32_t vrsave;
85
uint32_t vscr; /* aligned at vector element 3 */
86
} pcb_vec __aligned(16); /* Vector processor */
87
unsigned int pcb_veccpu; /* which CPU had our vector
88
stuff. */
89
struct htm {
90
uint64_t tfhar;
91
uint64_t texasr;
92
uint64_t tfiar;
93
} pcb_htm;
94
95
struct ebb {
96
uint64_t ebbhr;
97
uint64_t ebbrr;
98
uint64_t bescr;
99
} pcb_ebb;
100
101
struct lmon {
102
uint64_t lmrr;
103
uint64_t lmser;
104
} pcb_lm;
105
106
union {
107
struct {
108
vm_offset_t usr_segm; /* Base address */
109
register_t usr_vsid; /* USER_SR segment */
110
} aim;
111
struct {
112
register_t dbcr0;
113
} booke;
114
} pcb_cpu;
115
vm_offset_t pcb_lastill; /* Last illegal instruction */
116
};
117
#endif
118
119
#ifdef _KERNEL
120
121
struct trapframe;
122
123
#ifndef curpcb
124
extern struct pcb *curpcb;
125
#endif
126
127
extern struct pmap *curpm;
128
extern struct proc *fpuproc;
129
130
void makectx(struct trapframe *, struct pcb *);
131
void savectx(struct pcb *) __returns_twice;
132
133
#endif
134
#endif /* _MACHINE_PCB_H_ */
135
136