1 /*- 2 * Copyright (c) 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * William Jolitz. 7 * 8 * %sccs.include.redist.c% 9 * 10 * @(#)pcb.h 8.2 (Berkeley) 01/21/94 11 */ 12 13 /* 14 * Intel 386 process control block 15 */ 16 #include <machine/tss.h> 17 #include <machine/npx.h> 18 19 struct pcb { 20 struct i386tss pcb_tss; 21 #define pcb_ksp pcb_tss.tss_esp0 22 #define pcb_ptd pcb_tss.tss_cr3 23 #define pcb_cr3 pcb_ptd 24 #define pcb_pc pcb_tss.tss_eip 25 #define pcb_psl pcb_tss.tss_eflags 26 #define pcb_usp pcb_tss.tss_esp 27 #define pcb_fp pcb_tss.tss_ebp 28 #ifdef notyet 29 u_char pcb_iomap[NPORT/sizeof(u_char)]; /* i/o port bitmap */ 30 #endif 31 struct save87 pcb_savefpu; /* floating point state for 287/387 */ 32 struct emcsts pcb_saveemc; /* Cyrix EMC state */ 33 /* 34 * Software pcb (extension) 35 */ 36 int pcb_flags; 37 #define FP_WASUSED 0x01 /* floating point has been used in this proc */ 38 #define FP_NEEDSSAVE 0x02 /* needs save on next context switch */ 39 #define FP_NEEDSRESTORE 0x04 /* need restore on next DNA fault */ 40 #define FP_USESEMC 0x08 /* process uses EMC memory-mapped mode */ 41 #define FM_TRAP 0x10 /* process entered kernel on a trap frame */ 42 short pcb_iml; /* interrupt mask level */ 43 caddr_t pcb_onfault; /* copyin/out fault recovery */ 44 long pcb_sigc[8]; /* XXX signal code trampoline */ 45 int pcb_cmap2; /* XXX temporary PTE - will prefault instead */ 46 }; 47 48 /* 49 * The pcb is augmented with machine-dependent additional data for 50 * core dumps. For the i386: ??? 51 */ 52 struct md_coredump { 53 int pad; /* XXX? -- cgd */ 54 }; 55 56 #ifdef KERNEL 57 struct pcb *curpcb; /* our current running pcb */ 58 #endif 59