|
|
1.1 root 1: /*
2: * TAHOE process control block
3: */
4:
5: struct pcb
6: {
7: int pcb_ksp; /* kernel stack pointer */
8: int pcb_usp; /* user stack pointer */
9: int pcb_r0;
10: int pcb_r1;
11: int pcb_r2;
12: int pcb_r3;
13: int pcb_r4;
14: int pcb_r5;
15: int pcb_r6;
16: int pcb_r7;
17: int pcb_r8;
18: int pcb_r9;
19: int pcb_r10;
20: int pcb_r11;
21: int pcb_r12;
22: int pcb_r13;
23: #define pcb_fp pcb_r13
24: int pcb_pc; /* program counter */
25: int pcb_psl; /* program status longword */
26: struct pte *pcb_p0br; /* seg 0 base register */
27: int pcb_p0lr; /* seg 0 length register and astlevel */
28: struct pte *pcb_p1br; /* seg 1 base register */
29: int pcb_p1lr; /* seg 1 length register and pme */
30: struct pte *pcb_p2br; /* seg 2 base register */
31: int pcb_p2lr; /* seg 2 length register and pme */
32: int pcb_ach; /* accumulator - high order longword */
33: int pcb_acl; /* accumulator - low order longword */
34: #define ACH pcb_ach
35: #define ACL pcb_acl
36: int pcb_hfs; /* f.p. status register. */
37: /*
38: * Software pcb (extension)
39: */
40: union {
41: float *faddr; /* address of single precision accumulator */
42: double *daddr; /* address of double precision accumulator */
43: } pcb_savacc;
44: #define FSAVACC pcb_savacc.faddr
45: #define DSAVACC pcb_savacc.daddr
46: int pcb_szpt; /* number of pages of user page table */
47: int pcb_cmap2;
48: int *pcb_sswap;
49: int pcb_sigc[4];
50: };
51:
52: extern long *user_psl;
53:
54: #define aston() \
55: { \
56: u.u_pcb.pcb_psl |= PSL_SFE; \
57: if ((int)user_psl != 0) *user_psl |= PSL_SFE; \
58: }
59:
60: #define astoff() \
61: { \
62: u.u_pcb.pcb_psl &= ~ PSL_SFE; \
63: if ((int)user_psl != 0) *user_psl &= ~PSL_SFE; \
64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.