Source to machdep/ppc/exception.h


Enter a symbol's name here to quickly find it.

/*
 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
 * Reserved.  This file contains Original Code and/or Modifications of
 * Original Code as defined in and that are subject to the Apple Public
 * Source License Version 1.0 (the 'License').  You may not use this file
 * except in compliance with the License.  Please obtain a copy of the
 * License at http://www.apple.com/publicsource and read it before using
 * this file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License."
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

/*
 * HISTORY
 * Revision 1.3  1997/11/06 21:07:55  umeshv
 * Cleaned up incorrect use of __PPC__, and __I386__
 * Fixed the feature inclusion to be #ifdef KERNEL_BUILD
 *
 * Revision 1.2  1997/10/29 02:13:46  tmason
 * Fixed oodles of bugs related to pmap issues as well as bcopy, FLOAT!, and cached accesses.
 * Radar Bug ID:
 *
 * Revision 1.1.1.1  1997/09/30 02:45:20  wsanchez
 * Import of kernel from umeshv/kernel
 *
 * Radar #1660195
 * Revision 1.1.??.?  1997/06/29  01:52:00  rvega
 *	Radar #1660195
 * 	Add LR plus volatile regs in PP area. This is
 *	needed for the MMU support (PTEG overflow)
 * 	[1997/06/29  01:52:00  rvega]
 *
*/

/*
 * Copyright 1996 1995 by Open Software Foundation, Inc. 1997 1996 1995 1994 1993 1992 1991  
 *              All Rights Reserved 
 *  
 * Permission to use, copy, modify, and distribute this software and 
 * its documentation for any purpose and without fee is hereby granted, 
 * provided that the above copyright notice appears in all copies and 
 * that both the copyright notice and this permission notice appear in 
 * supporting documentation. 
 *  
 * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 * FOR A PARTICULAR PURPOSE. 
 *  
 * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 
 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 
 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
 */
/*
 * MKLINUX-1.0DR2
 */

/* Miscellaneous constants and structures used by the exception
 * handlers
 */

#ifndef _PPC_EXCEPTION_H_
#define _PPC_EXCEPTION_H_

#ifndef __ASSEMBLER__

#include <machdep/ppc/mem.h>
#if defined(KERNEL_BUILD)
#include <cpus.h>
#endif /* KERNEL_BUILD */
#include <machdep/ppc/thread.h>

/* When an exception is taken, this info is accessed via sprg0 */

struct per_proc_info {
	unsigned int save_cr;
	unsigned int save_lr;
	unsigned int save_srr0;
	unsigned int save_srr1;
	unsigned int save_dar;
	unsigned int save_dsisr;
	unsigned int save_sprg0;
	unsigned int save_sprg1;
	unsigned int save_sprg2;
	unsigned int save_sprg3;
	unsigned int save_exception_type;
	
	unsigned int phys_exception_handlers;
	unsigned int virt_per_proc_info; /* virt addr for our CPU */
	
	/*	This save area is for the volatile registers used by the
		firmware functions.
	*/
	unsigned int save_r0;
	unsigned int save_r1;
	unsigned int save_r2;
	unsigned int save_r3;
	unsigned int save_r4;
	unsigned int save_r5;
	unsigned int save_r6;
	unsigned int save_r7;
	unsigned int save_r8;
	unsigned int save_r9;
	unsigned int save_r10;
	unsigned int save_r11;
	unsigned int save_r12;
#if TRUE
	unsigned int save_r13;
	unsigned int save_r14;
	unsigned int save_r15;
	unsigned int save_r16;
	unsigned int save_r17;
	unsigned int save_r18;
	unsigned int save_r19;
	unsigned int save_r20;
	unsigned int save_r21;
	unsigned int save_r22;
	unsigned int save_r23;
	unsigned int save_r24;
	unsigned int save_r25;
	unsigned int save_r26;
	unsigned int save_r27;
	unsigned int save_r28;
	unsigned int save_r29;
	unsigned int save_r30;
	unsigned int save_r31;
#endif
	
	unsigned int active_kloaded;	/* pointer to active_kloaded[CPU_NO] */
	unsigned int cpu_data;		/* pointer to cpu_data[CPU_NO] */
	unsigned int active_stacks;	/* pointer to active_stacks[CPU_NO] */
	unsigned int need_ast;		/* pointer to need_ast[CPU_NO] */
	pcb_t	     fpu_pcb;		/* pcb owning the fpu on this cpu */
};

extern struct per_proc_info per_proc_info[NCPUS];

extern char *trap_type[];

#ifdef DEBUG
extern int kdp_trap_codes[];
#define kdp_code(x) kdp_trap_codes[((x)==EXC_AST?0x30:(x)/EXC_VECTOR_SIZE)]
#endif /* DEBUG */

#endif /* ! __ASSEMBLER__ */

#define EXC_VECTOR_SIZE		4		/* function pointer size */

/* Hardware exceptions */

#define EXC_INVALID		(0x00 * EXC_VECTOR_SIZE)
#define EXC_RESET		(0x01 * EXC_VECTOR_SIZE)
#define EXC_MACHINE_CHECK	(0x02 * EXC_VECTOR_SIZE)
#define EXC_DATA_ACCESS		(0x03 * EXC_VECTOR_SIZE)
#define EXC_INSTRUCTION_ACCESS	(0x04 * EXC_VECTOR_SIZE)
#define EXC_INTERRUPT		(0x05 * EXC_VECTOR_SIZE)
#define EXC_ALIGNMENT		(0x06 * EXC_VECTOR_SIZE)
#define EXC_PROGRAM		(0x07 * EXC_VECTOR_SIZE)
#define EXC_FP_UNAVAILABLE	(0x08 * EXC_VECTOR_SIZE)
#define EXC_DECREMENTER		(0x09 * EXC_VECTOR_SIZE)
#define EXC_IO_ERROR		(0x0a * EXC_VECTOR_SIZE)
#define EXC_RESERVED_0B		(0x0b * EXC_VECTOR_SIZE)
#define EXC_SYSTEM_CALL		(0x0c * EXC_VECTOR_SIZE)
#define EXC_TRACE		(0x0d * EXC_VECTOR_SIZE)
#define EXC_FP_ASSIST		(0x0e * EXC_VECTOR_SIZE)
#define EXC_PERFORMANCE_MON	(0x0f * EXC_VECTOR_SIZE)
#define EXC_603_IT_MISS		(0x10 * EXC_VECTOR_SIZE)
#define EXC_603_DLT_MISS	(0x11 * EXC_VECTOR_SIZE)
#define EXC_603_DST_MISS	(0x12 * EXC_VECTOR_SIZE)
#define EXC_INSTRUCTION_BKPT	(0x13 * EXC_VECTOR_SIZE)
#define EXC_SYSTEM_MANAGEMENT	(0x14 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_15		(0x15 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_16		(0x16 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_17		(0x17 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_18		(0x18 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_19		(0x19 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_1A		(0x1a * EXC_VECTOR_SIZE)
#define EXC_RESERVED_1B		(0x1b * EXC_VECTOR_SIZE)
#define EXC_RESERVED_1C		(0x1c * EXC_VECTOR_SIZE)
#define EXC_RESERVED_1D		(0x1d * EXC_VECTOR_SIZE)
#define EXC_RESERVED_1E		(0x1e * EXC_VECTOR_SIZE)
#define EXC_RESERVED_1F		(0x1f * EXC_VECTOR_SIZE)
#define EXC_RUNMODE_TRACE	(0x20 * EXC_VECTOR_SIZE) /* 601 only */
#define EXC_RESERVED_21		(0x21 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_22		(0x22 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_23		(0x23 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_24		(0x24 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_25		(0x25 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_26		(0x26 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_27		(0x27 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_28		(0x28 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_29		(0x29 * EXC_VECTOR_SIZE)
#define EXC_RESERVED_2A		(0x2a * EXC_VECTOR_SIZE)
#define EXC_RESERVED_2B		(0x2b * EXC_VECTOR_SIZE)
#define EXC_RESERVED_2C		(0x2c * EXC_VECTOR_SIZE)
#define EXC_RESERVED_2D		(0x2d * EXC_VECTOR_SIZE)
#define EXC_RESERVED_2E		(0x2e * EXC_VECTOR_SIZE)
#define EXC_RESERVED_2F		(0x2f * EXC_VECTOR_SIZE)


/* software exceptions */

#define EXC_AST			(0x100 * EXC_VECTOR_SIZE) 
#define EXC_MAX			EXC_RESERVED_2F	/* Maximum exception no */

#endif /* _PPC_EXCEPTION_H_ */