www.pudn.com > vxworks0108.rar > esf.h


#ifndef _INT_H 
#define _INT_H 
 
#include "type.h" 
 
#define _EXC_OFF_RES0	 	0x00000		/* reserved */ 
#define _EXC_OFF_RESET	 	0x00100		/* system reset */ 
#define _EXC_OFF_MACH	 	0x00200		/* machine check */ 
#define _EXC_OFF_DATA	 	0x00300		/* data access */ 
#define _EXC_OFF_INST	 	0x00400		/* instruction access */ 
#define _EXC_OFF_INTR	 	0x00500		/* external interrupt */ 
#define _EXC_OFF_ALIGN	 	0x00600		/* alignment */ 
#define _EXC_OFF_PROG	 	0x00700		/* program */ 
#define _EXC_OFF_FPU	 	0x00800		/* floating point unavailable */ 
#define _EXC_OFF_DECR	 	0x00900		/* decrementer */ 
#define _EXC_OFF_RES1	 	0x00a00		/* reserved */ 
#define _EXC_OFF_RES2	 	0x00b00		/* reserved */ 
#define _EXC_OFF_SYSCALL 	0x00c00		/* system call */ 
#define _EXC_OFF_TRACE	 	0x00d00		/* trace */ 
#define _EXC_OFF_RES3	 	0x00e00		/* reserved */ 
						/* exception for PPC601) */ 
 
/* 
 * Flags in MSR: 
 */ 
#define MSR_SF		(1<<63) 
#define MSR_ISF		(1<<61) 
#define MSR_VEC		(1<<25)		/* Enable AltiVec */ 
#define MSR_POW		(1<<18)		/* Enable Power Management */ 
#define MSR_WE		(1<<18)		/* Wait State Enable */ 
#define MSR_TGPR	(1<<17)		/* TLB Update registers in use */ 
#define MSR_CE		(1<<17)		/* Critical Interrupt Enable */ 
#define MSR_ILE		(1<<16)		/* Interrupt Little Endian */ 
#define MSR_EE		(1<<15)		/* External Interrupt Enable */ 
#define MSR_PR		(1<<14)		/* Problem State / Privilege Level */ 
#define MSR_FP		(1<<13)		/* Floating Point enable */ 
#define MSR_ME		(1<<12)		/* Machine Check Enable */ 
#define MSR_FE0		(1<<11)		/* Floating Exception mode 0 */ 
#define MSR_SE		(1<<10)		/* Single Step */ 
#define MSR_DWE		(1<<10)		/* Debug Wait Enable (4xx) */ 
#define MSR_BE		(1<<9)		/* Branch Trace */ 
#define MSR_DE		(1<<9) 		/* Debug Exception Enable */ 
#define MSR_FE1		(1<<8)		/* Floating Exception mode 1 */ 
#define MSR_IP		(1<<6)		/* Exception prefix 0x000/0xFFF */ 
#define MSR_IR		(1<<5) 		/* Instruction Relocate */ 
#define MSR_DR		(1<<4) 		/* Data Relocate */ 
#define MSR_PE		(1<<3)		/* Protection Enable */ 
#define MSR_PX		(1<<2)		/* Protection Exclusive Mode */ 
#define MSR_RI		(1<<1)		/* Recoverable Exception */ 
#define MSR_LE		(1<<0) 		/* Little Endian */ 
 
 
 
/* 
 *  Interrupt and trap vectors. 
 */ 
 
#define	EX_BEGIN	0x0000		/* 0, First vector            */ 
#define	EX_RESV0	0x0000		/* 0, reserved                */ 
#define	EX_RESET	0x0100		/* 1, reset                   */ 
#define	EX_MCHEK	0x0200		/* 2, machine check           */ 
#define	EX_DSI		0x0300		/* 3, data exception          */ 
#define	EX_ISI		0x0400		/* 4, instruction exception   */ 
#define	EX_EINT		0x0500		/* 5, external interrupt      */ 
#define	EX_ALIGN	0x0600		/* 6, memory access alignment */ 
#define	EX_PRGM		0x0700		/* 7, program exception       */ 
#define	EX_NOFP		0x0800		/* 8, FP unavailable          */ 
#define	EX_DECR		0x0900		/* 9, Decrementer             */ 
#define	EX_RESVA	0x0a00		/* a, reserved                */ 
#define	EX_RESVB	0x0b00		/* b, reserved                */ 
#define	EX_SC		0x0c00		/* c, System Call             */ 
#define	EX_TRACE	0x0d00		/* d, Program trace           */ 
#define EX_FPA		0x0e00		/* e, FP Assist               */ 
#define	EX_PERF		0x0f00		/* f, Performance monito      */ 
#define	EX_RESV10	0x1000		/* 10, reserved               */ 
#define	EX_RESV11	0x1100		/* 11, reserved               */ 
#define	EX_RESV12	0x1200		/* 12, reserved               */ 
#define	EX_IABP		0x1300		/* 13, Instruction BP         */ 
#define	EX_SMI		0x1400		/* 14, System Management      */ 
#define	EX_END		0x2f00		/* Last                       */ 
 
/* upper Machine State Register (MSR) mask */ 
 
#define _PPC_MSR_SF_U		0x8000	/* sixty-four bit mode (not  
					 * implemented for 32-bit machine) */ 
#define _PPC_MSR_POW_U		0x0004	/* power managemnet enable */  
#define _PPC_MSR_ILE_U		0x0001	/* little endian mode */ 
 
/* lower Machine State Register (MSR) mask */ 
 
#define	_PPC_MSR_EE		0x8000	/* external interrupt enable */ 
#define _PPC_MSR_PR		0x4000	/* privilege level */ 
#define _PPC_MSR_FP		0x2000	/* floating-point available */ 
#define _PPC_MSR_ME		0x1000	/* machine check enable  */ 
#define _PPC_MSR_FE0		0x0800	/* floating-point exception mode 0 */ 
#define _PPC_MSR_SE		0x0400	/* single-step trace enable */ 
#define _PPC_MSR_BE		0x0200	/* branch trace enable */ 
#define _PPC_MSR_FE1		0x0100	/* floating-point exception mode 1 */ 
#define _PPC_MSR_IP		0x0040	/* exception prefix */ 
#define _PPC_MSR_IR		0x0020	/* instruction address translation */ 
#define _PPC_MSR_DR		0x0010	/* data address translation */ 
#define _PPC_MSR_RI		0x0002	/* recoverable interrupt */ 
#define _PPC_MSR_LE		0x0001	/* little-endian mode */ 
 
#define _PPC_MSR_POWERUP	0x0040	/* state of MSR at powerup */ 
 
/* MSR bit definitions common to all PPC arch. */ 
 
#define _PPC_MSR_BIT_EE		16	/* MSR Ext. Intr. Enable bit - EE */ 
#define _PPC_MSR_BIT_PR		17	/* MSR Privilege Level bit - PR */ 
#define _PPC_MSR_BIT_ME		19	/* MSR Machine Check Enable bit - ME */ 
#define _PPC_MSR_BIT_LE		31	/* MSR Little Endian mode bit - LE */ 
 
/* FPSCR bit definitions (valid for the PPC60X familly) */ 
 
#define _PPC_FPSCR_FX           0x80000000 /* FP exception summary */ 
#define _PPC_FPSCR_FEX          0x40000000 /* FP enabled exception summary */ 
#define _PPC_FPSCR_VX           0x20000000 /* FP invalid exception summary */ 
#define _PPC_FPSCR_OX           0x10000000 /* FP overflow exception */ 
#define _PPC_FPSCR_UX           0x08000000 /* FP underflow exception */ 
#define _PPC_FPSCR_ZX           0x04000000 /* FP divide by zero exception */ 
#define _PPC_FPSCR_XX           0x02000000 /* FP inexact exception */ 
#define _PPC_FPSCR_VXSNAN       0x01000000 /* FP invalid exception for SNAN */ 
#define _PPC_FPSCR_VXISI        0x00800000 /* FP invalid exc. for INF-INF */ 
#define _PPC_FPSCR_VXIDI        0x00400000 /* FP invalid exc. for INF/INF */ 
#define _PPC_FPSCR_VXZDZ        0x00200000 /* FP invalid exc. for 0/0 */ 
#define _PPC_FPSCR_VXIMZ        0x00100000 /* FP invalid exc. for INF*0 */ 
#define _PPC_FPSCR_VXVC         0x00080000 /* FP inval. exc. for invalid comp.*/ 
#define _PPC_FPSCR_FR           0x00040000 /* FP fraction rounded */ 
#define _PPC_FPSCR_FI           0x00020000 /* FP fraction inexact */ 
#define _PPC_FPSCR_FPRF         0x0001F000 /* FP result flags */ 
#define _PPC_FPSCR_VXSOFT       0x00000400 /* FP inval. exc. for soft. request*/ 
#define _PPC_FPSCR_VXSQRT       0x00000200 /* FP inval. exc. for sqrt */ 
#define _PPC_FPSCR_VXCVI        0x00000100 /* FP inval. exc. for int convert */ 
#define _PPC_FPSCR_VE           0x00000080 /* FP invalid exc. enable */ 
#define _PPC_FPSCR_OE           0x00000040 /* FP overflow exc. enable */ 
#define _PPC_FPSCR_UE           0x00000020 /* FP underflow exc. enable */ 
#define _PPC_FPSCR_ZE           0x00000010 /* FP divide by zero exc. enable */ 
#define _PPC_FPSCR_XE           0x00000008 /* FP iinexact exc. enable */ 
#define _PPC_FPSCR_NI           0x00000004 /* FP non-IEEE mode enable */ 
#define _PPC_FPSCR_RN(n)        (n)        /* FP rounding control value */ 
 
#define _PPC_FPSCR_RN_MSK       0x00000003 /* FP rounding control bits mask */ 
#define _PPC_FPSCR_EXC_MASK     0x1ff80700 /* FP exception status bits mask */ 
#define _PPC_FPSCR_CTRL_MASK    0x000000ff /* FP exception control bits mask */ 
 
/* FPSCR init value for tasks spawned with VX_FP_TASK (PPC60X only) */ 
 
#define _PPC_FPSCR_INIT         (_PPC_FPSCR_OE | _PPC_FPSCR_UE | _PPC_FPSCR_ZE \ 
				 | _PPC_FPSCR_RN(0)) 
 
 
#ifndef _ASMLANGUAGE 
typedef	unsigned int	_RType;		/* default register type */ 
#endif 	/* _ASMLANGUAGE */ 
 
#define _ARCH_MULTIPLE_CACHELIB	FALSE 
 
#define	_DYNAMIC_BUS_SIZING	FALSE	/* require alignment for swap */ 
 
#define	_PPC_REG_SIZE		4	/* default register size */ 
 
#define _PPC_TEXT_SEG_ALIGN     4       /* 4 byte text segment alignment */ 
 
#ifndef _ASMLANGUAGE 
 
int excIntConnect (VOIDFUNCPTR * verbase, VOIDFUNCPTR  excHandle); 
 
void excVecInit(); 
 
#endif 
#endif