Files
Arquivotheca.AIX-4.1.3/bos/kernel/sys/POWER/mstsave.h
seta75D d6fe8fe829 Init
2021-10-11 22:19:34 -03:00

140 lines
4.4 KiB
C

/* @(#)30 1.19.2.1 src/bos/kernel/sys/POWER/mstsave.h, sysproc, bos412, 9445C412a 10/25/94 11:43:47 */
/*
* COMPONENT_NAME: SYSPROC
*
* FUNCTIONS:
*
* ORIGINS: 27, 83
*
*
* (C) COPYRIGHT International Business Machines Corp. 1988,1994
* All Rights Reserved
* Licensed Materials - Property of IBM
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
/*
* LEVEL 1, 5 Years Bull Confidential Information
*/
#ifndef _H_MSTSAVE
#define _H_MSTSAVE
/*
* Machine State Save Area -- R2 platform
*
* Machine state save area. The fields for the segment registers,
* general purpose registers, and floating point registers are
* aligned to minimize the number of cache lines that contain them.
* Therefore this structure should be aligned on a cache line
* boundary.
*/
#include <sys/m_param.h> /* for machine dependent defines*/
#define NUM_KERNEL_BATS 3 /* number of BATS used in kernel mode */
struct mstsave {
struct mstsave *prev; /* previous save area */
label_t *kjmpbuf; /* pointer to saved context */
char *stackfix; /* stack fix pointer */
char intpri; /* interrupt priority */
char backt; /* back-track flag */
char rsvd[2]; /* reserved */
pid_t curid; /* copy of curid */
int excp_type; /* exception type for debugger */
ulong_t iar; /* instruction address register */
ulong_t msr; /* machine state register */
ulong_t cr; /* condition register */
ulong_t lr; /* link register */
ulong_t ctr; /* count register */
ulong_t xer; /* fixed point exception */
ulong_t mq; /* multiply/quotient register */
ulong_t tid; /* tid register */
ulong_t fpscr; /* floating point status reg */
char fpeu; /* floating point ever used */
char fpinfo; /* floating point status flags */
char pad[2]; /* res - pad to dword boundary */
ulong_t except[5]; /* exception structure */
char pad1[4]; /* old bus field */
ulong_t o_iar; /* old iar (for longjmp excpt) */
ulong_t o_toc; /* old toc (for longjmp excpt) */
ulong_t o_arg1; /* old arg1 (for longjmp excpt) */
ulong_t excbranch; /* if not NULL, address to branch
* to on exception. Used by
* assembler routines for low
* cost exception handling*/
ulong_t fpscrx; /* software extension to fpscr */
ulong_t o_vaddr; /* Saved vaddr for vmexception */
#ifdef _KERNSYS
ulong_t ioalloc; /* ioallocation mask */
struct {
ulong_t batu;
ulong_t batl;
} dbats[NUM_KERNEL_BATS]; /* Save area for bats */
#else
ulong_t cachealign[7]; /* reserved */
#endif /* _KERNSYS */
adspace_t as; /* segment registers */
ulong_t gpr[NGPRS]; /* general purpose registers */
double fpr[NFPRS]; /* floating point registers */
};
/*
* Values for mstsave.fpeu
*/
#define FP_NEVER_USED 0 /* floating point never used */
#define FP_USED 1 /* floating point used */
/*
* Values/fields of mstsave.fpinfo
*
* - programming note: This field is intended to be an array of state bits.
* All code accessing `fpinfo' should use a mask.
*/
/* These define how fpinfo is interpreted for "Classic" Power platforms. */
#define FP_IMP_INT 0x01 /* run in imprecise mode */
#define FP_SYNC_TASK 0x08 /* if set, run task at MSR(FE)=1*/
/* these define how fpinfo is interpreted for PowerPC platforms */
#define PPC_OFF 0x0 /* FP trapping OFF */
#define PPC_IMP 0x1 /* FP trapping Imprecise mode */
#define PPC_IMP_REC 0x8 /* FP trapping Imprecise recoverable mode */
#define PPC_PRECISE 0x9 /* FP trapping Precise mode */
/* This bit is used to indicate that a floating point interrupt
was imprecise */
#define FP_INT_TYPE 0x02 /* type of fp interrrupt */
#define FP_SYNC_IMP_S 8 /* shift between bits in FPINFO & MSR */
/*
* interrupt handler mstsave and stack pool
*/
#define FRAMESIZE 4096 /* mstsave stack frame size */
#define NUMBER_OF_FRAMES 11 /* Number of Frames per MST stack */
extern struct mststack {
char stack[FRAMESIZE-sizeof(struct mstsave)];
struct mstsave save;
} mststack[];
#define FRAME_1(cpu_id) ((NUMBER_OF_FRAMES*(cpu_id+1)) - 1)
#define PMAP_STK_SIZE 1024 /* size of V=R pmap stack */
extern char pmap_stack[];
#endif /*_H_MSTSAVE*/