Filter:   InfoImg
download exception.h
Language: C
Copyright: Copyright 1991-1998 by Open Software Foundation, Inc.
LOC: 102
Project Info
Hurd on Mach on PowerPC(hurdppc)
Server: Savannah NonGNU
Type: cvs
...pc\hurdppc\gnu‑osfmach\ppc\
   _setjmp.S
   alignment.c
   asm.h
   ast.h
   ast_types.h
   bcopy.S
   bits.S
   boot.h
   bzero.S
   cache.S
   clock.h
   console_feed.c
   console_feed_entries.h
   cpu_number.h
   cswtch.S
   db_disasm.c
   db_interface.c
   db_low_trace.c
   db_low_trace.h
   db_machdep.h
   db_trace.c
   endian.h
   exception.h
   Firmware.h
   Firmware.S
   FirmwareCalls.h
   fpu_protos.h
   gdb_defs.h
   genassym.c
   go.c
   hardclock_entries.h
   hw_exception.S
   hw_lock.S
   interrupt.c
   io_map.c
   io_map_entries.h
   iobus.h
   iso_font.h
   kgdb_defs.h
   kgdb_interface.c
   kgdb_setjmp.h
   klglue.S
   lock.h
   low_trace.h
   lowmem_vectors.S
   mach_param.h
   machine_routines.h
   machine_rpc.h
   machlimits.h
   machparam.h
   mem.c
   mem.h
   misc.c
   misc_asm.S
   misc_protos.h
   model_dep.c
   movc.S
   mp.h
   MPinterfaces.S
   ndr_def.h
   net_filter.c
   new_screen.h
   pcb.c
   pmap.c
   pmap.c-broken
   pmap.h
   pmap_internals.h
   ppc_disasm.i
   ppc_init.c
   ppc_rpc.c
   proc_reg.h
   screen.h
   screen_defs.h
   screen_switch.h
   serial_console.c
   serial_defs.h
   setjmp.h
   spl.h
   start.S
   status.c
   strlen.c
   stubs.c
   syscall_subr.h
   task.h
   testjump.c
   thread.h
   thread_act.h
   trap.c
   trap.h
   vm_tuning.h
   xpr.h

/*
 * Copyright 1991-1998 by Open Software Foundation, Inc. 
 *              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
 */

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

#ifndef _PPC_EXCEPTION_H_
#define _PPC_EXCEPTION_H_

#ifndef ASSEMBLER

#include <cpus.h>
#include <mach_kgdb.h>

#include <mach/machine/vm_types.h>

/* When an exception is taken, this info is accessed via sprg0 */
/* We should always have this one on a cache line boundary */
struct per_proc_info {
	unsigned short	cpu_number;
	unsigned short	cpu_flags;	/* Various low-level flags */
	vm_offset_t  	istackptr;
	vm_offset_t  	intstack_top_ss;
#if	MACH_KGDB
	vm_offset_t  	gdbstackptr;
	vm_offset_t  	gdbstack_top_ss;
#else 
	unsigned int	ppigas1[2];	/* Take up some space if no KGDB */
#endif	/* MACH_KGDB */

	unsigned int	tempwork1;	/* Temp work area - monitor use carefully */
	unsigned int	tempwork2;	/* Temp work area - monitor use carefully */
	unsigned int	save_sr0;	/* Temp work area - monitor use carefully */

	/* PPC cache line boundary here */

	unsigned int save_exception_type;
	unsigned int phys_exception_handlers;
	unsigned int virt_per_proc_info;/* virt addr for our CPU */
	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] */
	unsigned int fpu_pcb;		/* pcb owning the fpu on this cpu */

	/* PPC cache line boundary here */

	unsigned int save_cr;		/* Register save area from here on */
	unsigned int save_srr0;
	unsigned int save_srr1;
	unsigned int save_dar;
	unsigned int save_dsisr;
	unsigned int save_lr;
	unsigned int save_ctr;
	unsigned int save_xer;
	
	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;
	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;
};

extern struct per_proc_info *per_proc_info;
/*	extern struct per_proc_info per_proc_info[NCPUS]; */

extern char *trap_type[];

static __inline__ struct per_proc_info * current_proc_info(void)
{
	register struct per_proc_info *ppi;
							   
	__asm__ volatile ("mr %0, 2" : "=r" (ppi));
	return ppi;
}

#endif /* ndef ASSEMBLER */

#define T_VECTOR_SIZE		4		/* function pointer size */
#define SIGPactive		0x8000

/* Hardware exceptions */

#define T_IN_VAIN		(0x00 * T_VECTOR_SIZE)
#define T_RESET			(0x01 * T_VECTOR_SIZE)
#define T_MACHINE_CHECK		(0x02 * T_VECTOR_SIZE)
#define T_DATA_ACCESS		(0x03 * T_VECTOR_SIZE)
#define T_INSTRUCTION_ACCESS	(0x04 * T_VECTOR_SIZE)
#define T_INTERRUPT		(0x05 * T_VECTOR_SIZE)
#define T_ALIGNMENT		(0x06 * T_VECTOR_SIZE)
#define T_PROGRAM		(0x07 * T_VECTOR_SIZE)
#define T_FP_UNAVAILABLE	(0x08 * T_VECTOR_SIZE)
#define T_DECREMENTER		(0x09 * T_VECTOR_SIZE)
#define T_IO_ERROR		(0x0a * T_VECTOR_SIZE)
#define T_RESERVED		(0x0b * T_VECTOR_SIZE)
#define T_SYSTEM_CALL		(0x0c * T_VECTOR_SIZE)
#define T_TRACE			(0x0d * T_VECTOR_SIZE)
#define T_FP_ASSIST		(0x0e * T_VECTOR_SIZE)
#define T_INSTRUCTION_BKPT	(0x13 * T_VECTOR_SIZE)
#define T_SYSTEM_MANAGEMENT	(0x14 * T_VECTOR_SIZE)

#define T_RUNMODE_TRACE		(0x20 * T_VECTOR_SIZE) /* 601 only */

#define T_SIGP		(0x21 * T_VECTOR_SIZE) /* MP only */

/* software exceptions */

#define T_AST			(0x100 * T_VECTOR_SIZE) 
#define T_MAX			T_SIGP		 /* Maximum exception no */

#endif /* _PPC_EXCEPTION_H_ */