Files
seta75D 2e8a93c394 Init
2021-10-11 18:20:23 -03:00

80 lines
2.5 KiB
C

/* @(#)pcb.h 1.1 92/07/30 SMI */
/*
* Copyright (c) 1987 by Sun Microsystems, Inc.
*/
#ifndef _sun3_pcb_h
#define _sun3_pcb_h
#include <machine/reg.h>
#include <machine/buserr.h>
/*
* Sun software process control block
*/
#ifndef LOCORE
struct pcb {
label_t pcb_regs; /* saved registers */
int pcb_sr; /* program status word */
int pcb_flags; /* various state flags */
struct buserr_state {
struct user_buserr_stack *u_buserr_stack;
int u_buserr_pc;
} u_buserr_state;
#define u_berr_stack u_buserr_state.u_buserr_stack
#define u_berr_pc u_buserr_state.u_buserr_pc
struct fp_status u_fp_status; /* user visible fpp state */
/*
* Struct for the internal state of the MC68881
* This is the maximum allowed by the coprocessor interface for internal state.
*/
#define FPIS_BUFSIZ 0x100
#define FPP_EXC_PEND 0x8 /* exception pending bit in buiflags msbyte */
struct fp_istate {
unsigned char fpis_vers; /* version number */
unsigned char fpis_bufsiz; /* size of info in fpis_buf */
unsigned short fpis_reserved; /* reserved word */
unsigned char fpis_buf[FPIS_BUFSIZ]; /* fpp internal state buffer */
} u_fp_istate; /* internal fpp state */
/* fpa only */
short u_fpa_flags; /* if zero, u_fpa_*'s are meaningless */
struct fpa_status u_fpa_status; /* saved/restored on ctx switches */
/* end fpa only */
};
/*
* On user bus errors that result in a signal, the following stack frame
* is saved so that we can restart after return from the signal handler.
*/
struct user_buserr_stack {
u_int uberr_save_size; /* Size of saved frame */
long uberr_ast; /* AST bits */
struct regs uberr_regs; /* processor registers */
short uberr_stkfmt; /* Exception frame format */
union bei{
struct bei_longb bei_longb; /* Bus error exception frame */
struct bei_medium bei_medium; /* Bus error exception frame */
struct bei_coproc bei_coproc; /* Mid-Instruction frame */
} u_bei;
#define uberr_longb u_bei.bei_longb
#define uberr_medium u_bei.bei_medium
#define uberr_coproc u_bei.bei_coproc
struct fp_istate fp_istate; /* 68882 internals */
};
#endif
#define AST_SCHED 0x80000000 /* force a reschedule */
#define AST_STEP 0x40000000 /* force a single step */
#define TRACE_USER 0x20000000 /* user has requested tracing */
#define TRACE_AST 0x10000000 /* AST has requested tracing */
#define TRACE_PENDING 0x08000000 /* trace caught in supervisor mode */
#define AST_CLR 0xf8000000
#define PME_CLR 0
#define AST_NONE 0
#define aston() {u.u_pcb.pcb_flags |= AST_SCHED;}
#endif /*!_sun3_pcb_h*/