pcb.h (01d48022435c93e891589dfc9ebf67aee5f8c3ad) pcb.h (824fc46089a4b86003cef4fcbfa8493591e87719)
1/*-
2 * Copyright (c) 1990 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * William Jolitz.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 31 unchanged lines hidden (view full) ---

40 * Intel 386 process control block
41 */
42#ifndef _KERNEL
43#include <machine/segments.h>
44#endif
45#include <machine/npx.h>
46
47struct pcb {
1/*-
2 * Copyright (c) 1990 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * William Jolitz.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 31 unchanged lines hidden (view full) ---

40 * Intel 386 process control block
41 */
42#ifndef _KERNEL
43#include <machine/segments.h>
44#endif
45#include <machine/npx.h>
46
47struct pcb {
48 int pcb_cr0;
49 int pcb_cr2;
50 int pcb_cr3;
51 int pcb_cr4;
52 int pcb_edi;
53 int pcb_esi;
54 int pcb_ebp;
55 int pcb_esp;
56 int pcb_ebx;
57 int pcb_eip;
48 int pcb_edi;
49 int pcb_esi;
50 int pcb_ebp;
51 int pcb_esp;
52 int pcb_ebx;
53 int pcb_eip;
58
54 struct segment_descriptor pcb_fsd;
55 struct segment_descriptor pcb_gsd;
56 int pcb_ds;
57 int pcb_es;
58 int pcb_fs;
59 int pcb_gs;
60 int pcb_ss;
61 int pcb_cr0;
62 int pcb_cr2;
63 int pcb_cr3;
64 int pcb_cr4;
59 int pcb_dr0;
60 int pcb_dr1;
61 int pcb_dr2;
62 int pcb_dr3;
63 int pcb_dr6;
64 int pcb_dr7;
65
65 int pcb_dr0;
66 int pcb_dr1;
67 int pcb_dr2;
68 int pcb_dr3;
69 int pcb_dr6;
70 int pcb_dr7;
71
66 union savefpu pcb_user_save;
67 uint16_t pcb_initial_npxcw;
72 struct region_descriptor pcb_gdt;
73 struct region_descriptor pcb_idt;
74 uint16_t pcb_ldt;
75 uint16_t pcb_tr;
76
68 u_int pcb_flags;
69#define PCB_DBREGS 0x02 /* process using debug registers */
70#define PCB_NPXINITDONE 0x08 /* fpu state is initialized */
71#define PCB_VM86CALL 0x10 /* in vm86 call */
72#define PCB_NPXUSERINITDONE 0x20 /* user fpu state is initialized */
73#define PCB_KERNNPX 0x40 /* kernel uses npx */
74
77 u_int pcb_flags;
78#define PCB_DBREGS 0x02 /* process using debug registers */
79#define PCB_NPXINITDONE 0x08 /* fpu state is initialized */
80#define PCB_VM86CALL 0x10 /* in vm86 call */
81#define PCB_NPXUSERINITDONE 0x20 /* user fpu state is initialized */
82#define PCB_KERNNPX 0x40 /* kernel uses npx */
83
84 uint16_t pcb_initial_npxcw;
85
75 caddr_t pcb_onfault; /* copyin/out fault recovery */
86 caddr_t pcb_onfault; /* copyin/out fault recovery */
76 int pcb_ds;
77 int pcb_es;
78 int pcb_fs;
79 int pcb_gs;
80 int pcb_ss;
81 struct segment_descriptor pcb_fsd;
82 struct segment_descriptor pcb_gsd;
83 struct pcb_ext *pcb_ext; /* optional pcb extension */
84 int pcb_psl; /* process status long */
85 u_long pcb_vm86[2]; /* vm86bios scratch space */
86 union savefpu *pcb_save;
87
87 struct pcb_ext *pcb_ext; /* optional pcb extension */
88 int pcb_psl; /* process status long */
89 u_long pcb_vm86[2]; /* vm86bios scratch space */
90 union savefpu *pcb_save;
91
88 struct region_descriptor pcb_gdt;
89 struct region_descriptor pcb_idt;
90 uint16_t pcb_ldt;
91 uint16_t pcb_tr;
92 uint32_t pcb_pad[10];
92};
93
93};
94
95/* Per-CPU state saved during suspend and resume. */
94struct susppcb {
95 struct pcb sp_pcb;
96struct susppcb {
97 struct pcb sp_pcb;
96 union savefpu sp_fpususpend;
98
99 /* fpu context for suspend/resume */
100 void *sp_fpususpend;
97};
98
99#ifdef _KERNEL
100struct trapframe;
101
102void makectx(struct trapframe *, struct pcb *);
103int savectx(struct pcb *) __returns_twice;
104void resumectx(struct pcb *) __fastcall;
105#endif
106
107#endif /* _I386_PCB_H_ */
101};
102
103#ifdef _KERNEL
104struct trapframe;
105
106void makectx(struct trapframe *, struct pcb *);
107int savectx(struct pcb *) __returns_twice;
108void resumectx(struct pcb *) __fastcall;
109#endif
110
111#endif /* _I386_PCB_H_ */