#ifndef _PPC_SAVEAREA_H_
#define _PPC_SAVEAREA_H_
#ifndef ASSEMBLER
#include <sys/appleapiopts.h>
#ifdef __APPLE_API_PRIVATE
#ifdef MACH_KERNEL_PRIVATE
#include <mach/ppc/vm_types.h>
typedef struct savearea_comm {
struct savearea *save_prev;
unsigned int *sac_next;
unsigned int *sac_prev;
unsigned int save_flags;
unsigned int save_level;
unsigned int save_time[2];
struct thread_activation *save_act;
unsigned int sac_vrswap;
unsigned int sac_alloc;
unsigned int sac_flags;
unsigned int save_misc0;
unsigned int save_misc1;
unsigned int save_misc2;
unsigned int save_misc3;
unsigned int save_misc4;
unsigned int save_040[8];
} savearea_comm;
#endif
#ifdef BSD_KERNEL_PRIVATE
typedef struct savearea_comm {
unsigned int save_000[24];
} savearea_comm;
#endif
#if defined(MACH_KERNEL_PRIVATE) || defined(BSD_KERNEL_PRIVATE)
typedef struct savearea {
savearea_comm save_hdr;
unsigned int save_060[8];
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;
unsigned int save_srr0;
unsigned int save_srr1;
unsigned int save_cr;
unsigned int save_xer;
unsigned int save_lr;
unsigned int save_ctr;
unsigned int save_dar;
unsigned int save_dsisr;
unsigned int save_vscr[4];
unsigned int save_fpscrpad;
unsigned int save_fpscr;
unsigned int save_exception;
unsigned int save_vrsave;
unsigned int save_sr0;
unsigned int save_sr1;
unsigned int save_sr2;
unsigned int save_sr3;
unsigned int save_sr4;
unsigned int save_sr5;
unsigned int save_sr6;
unsigned int save_sr7;
unsigned int save_sr8;
unsigned int save_sr9;
unsigned int save_sr10;
unsigned int save_sr11;
unsigned int save_sr12;
unsigned int save_sr13;
unsigned int save_sr14;
unsigned int save_sr15;
unsigned int save_180[8];
unsigned int save_1A0[8];
unsigned int save_1C0[8];
unsigned int save_1E0[8];
unsigned int save_200[8];
unsigned int save_220[8];
unsigned int save_240[8];
unsigned int save_260[8];
} savearea;
typedef struct savearea_fpu {
savearea_comm save_hdr;
unsigned int save_060[8];
double save_fp0;
double save_fp1;
double save_fp2;
double save_fp3;
double save_fp4;
double save_fp5;
double save_fp6;
double save_fp7;
double save_fp8;
double save_fp9;
double save_fp10;
double save_fp11;
double save_fp12;
double save_fp13;
double save_fp14;
double save_fp15;
double save_fp16;
double save_fp17;
double save_fp18;
double save_fp19;
double save_fp20;
double save_fp21;
double save_fp22;
double save_fp23;
double save_fp24;
double save_fp25;
double save_fp26;
double save_fp27;
double save_fp28;
double save_fp29;
double save_fp30;
double save_fp31;
unsigned int save_180[8];
unsigned int save_1A0[8];
unsigned int save_1C0[8];
unsigned int save_1E0[8];
unsigned int save_200[8];
unsigned int save_220[8];
unsigned int save_240[8];
unsigned int save_260[8];
} savearea_fpu;
typedef struct savearea_vec {
savearea_comm save_hdr;
unsigned int save_060[7];
unsigned int save_vrvalid;
unsigned int save_vr0[4];
unsigned int save_vr1[4];
unsigned int save_vr2[4];
unsigned int save_vr3[4];
unsigned int save_vr4[4];
unsigned int save_vr5[4];
unsigned int save_vr6[4];
unsigned int save_vr7[4];
unsigned int save_vr8[4];
unsigned int save_vr9[4];
unsigned int save_vr10[4];
unsigned int save_vr11[4];
unsigned int save_vr12[4];
unsigned int save_vr13[4];
unsigned int save_vr14[4];
unsigned int save_vr15[4];
unsigned int save_vr16[4];
unsigned int save_vr17[4];
unsigned int save_vr18[4];
unsigned int save_vr19[4];
unsigned int save_vr20[4];
unsigned int save_vr21[4];
unsigned int save_vr22[4];
unsigned int save_vr23[4];
unsigned int save_vr24[4];
unsigned int save_vr25[4];
unsigned int save_vr26[4];
unsigned int save_vr27[4];
unsigned int save_vr28[4];
unsigned int save_vr29[4];
unsigned int save_vr30[4];
unsigned int save_vr31[4];
} savearea_vec;
#endif
#ifdef MACH_KERNEL_PRIVATE
struct Saveanchor {
unsigned int savelock;
unsigned int *savepoolfwd;
unsigned int *savepoolbwd;
volatile unsigned int savefree;
volatile unsigned int savefreecnt;
volatile int saveadjust;
volatile int saveinuse;
volatile int savetarget;
int savemaxcount;
};
#define sac_cnt (4096 / sizeof(savearea))
#define sac_empty (0xFFFFFFFF << (32 - sac_cnt))
#define sac_perm 0x40000000
#define sac_permb 1
#define LocalSaveTarget (((8 + sac_cnt - 1) / sac_cnt) * sac_cnt)
#define LocalSaveMin (LocalSaveTarget / 2)
#define LocalSaveMax (LocalSaveTarget * 2)
#define FreeListMin (2 * LocalSaveTarget * NCPUS)
#define SaveLowHysteresis LocalSaveTarget
#define SaveHighHysteresis FreeListMin
#define InitialSaveAreas (2 * FreeListMin)
#define InitialSaveTarget FreeListMin
#define InitialSaveBloks (InitialSaveAreas + sac_cnt - 1) / sac_cnt
void save_release(struct savearea *);
struct savectl *save_dequeue(void);
unsigned int save_queue(struct savearea *);
struct savearea *save_get(void);
struct savearea *save_get_phys(void);
struct savearea *save_alloc(void);
struct savearea *save_cpv(struct savearea *);
void save_ret(struct savearea *);
void save_ret_phys(struct savearea *);
void save_adjust(void);
struct savearea_comm *save_trim_freet(void);
#endif
#endif
#endif
#define SAVattach 0x80000000
#define SAVrststk 0x00010000
#define SAVsyscall 0x00020000
#define SAVredrive 0x00040000
#define SAVtype 0x0000FF00
#define SAVtypeshft 8
#define SAVempty 0x86
#define SAVgeneral 0x01
#define SAVfloat 0x02
#define SAVvector 0x03
#endif