#ifndef _PPC_EXCEPTION_H_
#define _PPC_EXCEPTION_H_
#include <ppc/savearea.h>
#ifndef ASSEMBLER
#include <cpus.h>
#include <mach_kdb.h>
#include <mach_kdp.h>
#include <mach/machine/vm_types.h>
#include <mach/boolean.h>
#include <kern/cpu_data.h>
#include <pexpert/pexpert.h>
#include <IOKit/IOInterrupts.h>
#include <ppc/machine_routines.h>
struct procFeatures {
unsigned int Available;
#define pfFloat 0x80000000
#define pfFloatb 0
#define pfAltivec 0x40000000
#define pfAltivecb 1
#define pfAvJava 0x20000000
#define pfAvJavab 2
#define pfSMPcap 0x10000000
#define pfSMPcapb 3
#define pfCanSleep 0x08000000
#define pfCanSleepb 4
#define pfCanNap 0x04000000
#define pfCanNapb 5
#define pfCanDoze 0x02000000
#define pfCanDozeb 6
#define pfThermal 0x01000000
#define pfThermalb 7
#define pfThermInt 0x00800000
#define pfThermIntb 8
#define pfNoL2PFNap 0x00008000
#define pfNoL2PFNapb 16
#define pfSlowNap 0x00004000
#define pfSlowNapb 17
#define pfNoMuMMCK 0x00002000
#define pfNoMuMMCKb 18
#define pfLClck 0x00001000
#define pfLClckb 19
#define pfWillNap 0x00000800
#define pfWillNapb 20
#define pfNoMSRir 0x00000400
#define pfNoMSRirb 21
#define pfL3pdet 0x00000200
#define pfL3pdetb 22
#define pfL1i 0x00000100
#define pfL1ib 23
#define pfL1d 0x00000080
#define pfL1db 24
#define pfL1fa 0x00000040
#define pfL1fab 25
#define pfL2 0x00000020
#define pfL2b 26
#define pfL2fa 0x00000010
#define pfL2fab 27
#define pfL2i 0x00000008
#define pfL2ib 28
#define pfL3 0x00000004
#define pfL3b 29
#define pfL3fa 0x00000002
#define pfL3fab 30
#define pfValid 0x00000001
#define pfValidb 31
unsigned short rptdProc;
unsigned short lineSize;
unsigned int l1iSize;
unsigned int l1dSize;
unsigned int l2cr;
unsigned int l2Size;
unsigned int l3cr;
unsigned int l3Size;
unsigned int pfHID0;
unsigned int pfHID1;
unsigned int pfHID2;
unsigned int pfHID3;
unsigned int pfMSSCR0;
unsigned int pfMSSCR1;
unsigned int pfICTRL;
unsigned int pfLDSTCR;
unsigned int pfLDSTDB;
unsigned int l2crOriginal;
unsigned int l3crOriginal;
unsigned int pfBootConfig;
unsigned int reserved[4];
};
typedef struct procFeatures procFeatures;
struct thrmControl {
unsigned int maxTemp;
unsigned int throttleTemp;
unsigned int lowTemp;
unsigned int highTemp;
unsigned int thrm3val;
unsigned int rsvd[3];
};
typedef struct thrmControl thrmControl;
struct per_proc_info {
unsigned short cpu_number;
unsigned short cpu_flags;
vm_offset_t istackptr;
vm_offset_t intstack_top_ss;
vm_offset_t debstackptr;
vm_offset_t debstack_top_ss;
unsigned int tempwork1;
unsigned int save_exception_type;
unsigned int old_thread;
unsigned int active_kloaded;
unsigned int active_stacks;
unsigned int need_ast;
struct facility_context *FPU_owner;
unsigned int pprsv1;
struct facility_context *VMX_owner;
unsigned int pprsv2;
unsigned int next_savearea;
unsigned int quickfret;
unsigned int lclfree;
unsigned int lclfreecnt;
unsigned int Lastpmap;
unsigned int userspace;
unsigned int userpmap;
unsigned int liveVRSave;
unsigned int spcFlags;
boolean_t interrupts_enabled;
unsigned int ppbbTaskEnv;
IOInterruptHandler interrupt_handler;
void * interrupt_nub;
unsigned int interrupt_source;
void * interrupt_target;
void * interrupt_refCon;
time_base_enable_t time_base_enable;
unsigned int MPsigpStat;
#define MPsigpMsgp 0xC0000000
#define MPsigpBusy 0x80000000
#define MPsigpPass 0x40000000
#define MPsigpAck 0x20000000
#define MPsigpSrc 0x000000FF
#define MPsigpFunc 0x0000FF00
#define MPsigpIdle 0x00
#define MPsigpSigp 0x04
#define SIGPast 0
#define SIGPcpureq 1
#define SIGPdebug 2
#define SIGPwake 3
#define CPRQtemp 0
#define CPRQtimebase 1
unsigned int MPsigpParm0;
unsigned int MPsigpParm1;
unsigned int MPsigpParm2;
cpu_id_t cpu_id;
vm_offset_t start_paddr;
unsigned int ruptStamp[2];
procFeatures pf;
thrmControl thrm;
unsigned int napStamp[2];
unsigned int napTotal[2];
unsigned int numSIGPast;
unsigned int numSIGPcpureq;
unsigned int numSIGPdebug;
unsigned int numSIGPwake;
unsigned int numSIGPtimo;
unsigned int numSIGPmast;
unsigned int numSIGPmwake;
unsigned int spcTRc;
unsigned int spcTRp;
unsigned int Uassist;
vm_offset_t VMMareaPhys;
unsigned int FAMintercept;
cpu_data_t pp_cpu_data;
unsigned int rsrvd170[4];
unsigned int rsrvd180[8];
unsigned int rsrvd1A0[8];
unsigned int rsrvd1C0[8];
double emfp0;
double emfp1;
double emfp2;
double emfp3;
double emfp4;
double emfp5;
double emfp6;
double emfp7;
double emfp8;
double emfp9;
double emfp10;
double emfp11;
double emfp12;
double emfp13;
double emfp14;
double emfp15;
double emfp16;
double emfp17;
double emfp18;
double emfp19;
double emfp20;
double emfp21;
double emfp22;
double emfp23;
double emfp24;
double emfp25;
double emfp26;
double emfp27;
double emfp28;
double emfp29;
double emfp30;
double emfp31;
unsigned int emfpscr_pad;
unsigned int emfpscr;
unsigned int empadfp[6];
unsigned int emvr0[4];
unsigned int emvr1[4];
unsigned int emvr2[4];
unsigned int emvr3[4];
unsigned int emvr4[4];
unsigned int emvr5[4];
unsigned int emvr6[4];
unsigned int emvr7[4];
unsigned int emvr8[4];
unsigned int emvr9[4];
unsigned int emvr10[4];
unsigned int emvr11[4];
unsigned int emvr12[4];
unsigned int emvr13[4];
unsigned int emvr14[4];
unsigned int emvr15[4];
unsigned int emvr16[4];
unsigned int emvr17[4];
unsigned int emvr18[4];
unsigned int emvr19[4];
unsigned int emvr20[4];
unsigned int emvr21[4];
unsigned int emvr22[4];
unsigned int emvr23[4];
unsigned int emvr24[4];
unsigned int emvr25[4];
unsigned int emvr26[4];
unsigned int emvr27[4];
unsigned int emvr28[4];
unsigned int emvr29[4];
unsigned int emvr30[4];
unsigned int emvr31[4];
unsigned int emvscr[4];
unsigned int empadvr[4];
unsigned int patcharea[56];
};
#define pp_active_thread pp_cpu_data.active_thread
#define pp_preemption_count pp_cpu_data.preemption_level
#define pp_simple_lock_count pp_cpu_data.simple_lock_count
#define pp_interrupt_level pp_cpu_data.interrupt_level
extern struct per_proc_info per_proc_info[NCPUS];
extern char *trap_type[];
#endif
#define SIGPactive 0x8000
#define needSRload 0x4000
#define turnEEon 0x2000
#define traceBE 0x1000
#define traceBEb 3
#define BootDone 0x0100
#define SignalReady 0x0200
#define loadMSR 0x7FF4
#define T_VECTOR_SIZE 4
#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_PERF_MON (0x0f * T_VECTOR_SIZE)
#define T_VMX (0x10 * T_VECTOR_SIZE)
#define T_INVALID_EXCP0 (0x11 * T_VECTOR_SIZE)
#define T_INVALID_EXCP1 (0x12 * T_VECTOR_SIZE)
#define T_INVALID_EXCP2 (0x13 * T_VECTOR_SIZE)
#define T_INSTRUCTION_BKPT (0x14 * T_VECTOR_SIZE)
#define T_SYSTEM_MANAGEMENT (0x15 * T_VECTOR_SIZE)
#define T_ALTIVEC_ASSIST (0x16 * T_VECTOR_SIZE)
#define T_THERMAL (0x17 * T_VECTOR_SIZE)
#define T_INVALID_EXCP5 (0x18 * T_VECTOR_SIZE)
#define T_INVALID_EXCP6 (0x19 * T_VECTOR_SIZE)
#define T_INVALID_EXCP7 (0x1A * T_VECTOR_SIZE)
#define T_INVALID_EXCP8 (0x1B * T_VECTOR_SIZE)
#define T_INVALID_EXCP9 (0x1C * T_VECTOR_SIZE)
#define T_INVALID_EXCP10 (0x1D * T_VECTOR_SIZE)
#define T_INVALID_EXCP11 (0x1E * T_VECTOR_SIZE)
#define T_INVALID_EXCP12 (0x1F * T_VECTOR_SIZE)
#define T_INVALID_EXCP13 (0x20 * T_VECTOR_SIZE)
#define T_RUNMODE_TRACE (0x21 * T_VECTOR_SIZE)
#define T_SIGP (0x22 * T_VECTOR_SIZE)
#define T_PREEMPT (0x23 * T_VECTOR_SIZE)
#define T_CSWITCH (0x24 * T_VECTOR_SIZE)
#define T_SHUTDOWN (0x25 * T_VECTOR_SIZE)
#define T_CHOKE (0x26 * T_VECTOR_SIZE)
#define T_AST (0x100 * T_VECTOR_SIZE)
#define T_MAX T_CHOKE
#define T_FAM 0x00004000
#define EXCEPTION_VECTOR(exception) (exception * 0x100 /T_VECTOR_SIZE )
#define failDebug 0
#define failStack 1
#define failMapping 2
#define failContext 3
#define failNoSavearea 4
#define failSaveareaCorr 5
#define failBadLiveContext 6
#define failUnknown 7
#ifndef ASSEMBLER
typedef struct resethandler {
unsigned int type;
vm_offset_t call_paddr;
vm_offset_t arg__paddr;
} resethandler_t;
extern resethandler_t ResetHandler;
#endif
#define RESET_HANDLER_NULL 0x0
#define RESET_HANDLER_START 0x1
#endif