Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/powerpc/include/pcb.h
39534 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
struct pcb {
45
register_t pcb_context[20]; /* non-volatile r12-r31 */
46
register_t pcb_cr; /* Condition register */
47
register_t pcb_sp; /* stack pointer */
48
register_t pcb_toc; /* toc pointer */
49
register_t pcb_lr; /* link register */
50
register_t pcb_dscr; /* dscr value */
51
register_t pcb_fscr;
52
register_t pcb_tar;
53
struct pmap *pcb_pm; /* pmap of our vmspace */
54
jmp_buf *pcb_onfault; /* For use during
55
copyin/copyout */
56
int pcb_flags;
57
#define PCB_FPU 0x1 /* Process uses FPU */
58
#define PCB_FPREGS 0x2 /* Process had FPU registers initialized */
59
#define PCB_VEC 0x4 /* Process uses Altivec */
60
#define PCB_VSX 0x8 /* Process had VSX initialized */
61
#define PCB_CDSCR 0x10 /* Process had Custom DSCR initialized */
62
#define PCB_HTM 0x20 /* Process had HTM initialized */
63
#define PCB_CFSCR 0x40 /* Process had FSCR updated */
64
#define PCB_KERN_FPU 0x80 /* Kernel is using FPU/Vector unit */
65
#define PCB_KERN_FPU_NOSAVE 0x100 /* FPU/Vec state not saved for kernel use */
66
#define PCB_VECREGS 0x200 /* Process had Altivec registers initialized */
67
struct fpu {
68
union {
69
uint32_t vsr[4];
70
double fpr;
71
} fpr[32];
72
double fpscr; /* FPSCR stored as double for easier access */
73
} pcb_fpu; /* Floating point processor */
74
unsigned int pcb_fpcpu; /* which CPU had our FPU
75
stuff. */
76
struct vec {
77
uint32_t vr[32][4];
78
uint32_t spare[2];
79
uint32_t vrsave;
80
uint32_t vscr; /* aligned at vector element 3 */
81
} pcb_vec __aligned(16); /* Vector processor */
82
unsigned int pcb_veccpu; /* which CPU had our vector
83
stuff. */
84
struct htm {
85
uint64_t tfhar;
86
uint64_t texasr;
87
uint64_t tfiar;
88
} pcb_htm;
89
90
struct ebb {
91
uint64_t ebbhr;
92
uint64_t ebbrr;
93
uint64_t bescr;
94
} pcb_ebb;
95
96
struct lmon {
97
uint64_t lmrr;
98
uint64_t lmser;
99
} pcb_lm;
100
101
union {
102
struct {
103
vm_offset_t usr_segm; /* Base address */
104
register_t usr_vsid; /* USER_SR segment */
105
} aim;
106
struct {
107
register_t dbcr0;
108
} booke;
109
} pcb_cpu;
110
vm_offset_t pcb_lastill; /* Last illegal instruction */
111
};
112
#endif
113
114
#ifdef _KERNEL
115
116
struct trapframe;
117
118
#ifndef curpcb
119
extern struct pcb *curpcb;
120
#endif
121
122
extern struct pmap *curpm;
123
extern struct proc *fpuproc;
124
125
void makectx(struct trapframe *, struct pcb *);
126
void savectx(struct pcb *) __returns_twice;
127
128
#endif
129
#endif /* _MACHINE_PCB_H_ */
130
131