28 #define ExitHandler() asm volatile("sync\nei\n")
31 #define EE_SYNC() __asm__ volatile ("sync")
32 #define EE_SYNCL() __asm__ volatile ("sync.l")
33 #define EE_SYNCP() __asm__ volatile ("sync.p")
35 #define UNCACHED_SEG(x) \
36 ((void *)(((u32)(x)) | 0x20000000))
38 #define IS_UNCACHED_SEG(x) \
39 (((u32)(x)) & 0x20000000)
42 ((void *)(((u32)(x)) | 0x30000000))
44 #define PUSHDATA( t, x, v, l) \
45 *(t *)(x) = (v); (l) = sizeof(t)
47 #define POPDATA( t, x, v, l) \
48 (v) = *(t *)(x); (l) = sizeof(t)
50 #define ALIGNED(x) __attribute__((aligned((x))))
58 #define SetModuleGP() ChangeGP(&_gp)
68 #define MAX_THREADS 256
69 #define MAX_SEMAPHORES 256
70 #define MAX_PRIORITY 128
71 #define MAX_HANDLERS 128
75 #define WRITEBACK_DCACHE 0
76 #define INVALIDATE_DCACHE 1
77 #define INVALIDATE_ICACHE 2
78 #define INVALIDATE_CACHE 3
101 #define kINTC_GS INTC_GS
102 #define kINTC_SBUS INTC_SBUS
103 #define kINTC_VBLANK_START INTC_VBLANK_S
104 #define kINTC_VBLANK_END INTC_VBLANK_E
105 #define kINTC_VIF0 INTC_VIF0
106 #define kINTC_VIF1 INTC_VIF1
107 #define kINTC_VU0 INTC_VU0
108 #define kINTC_VU1 INTC_VU1
109 #define kINTC_IPU INTC_IPU
110 #define kINTC_TIMER0 INTC_TIM0
111 #define kINTC_TIMER1 INTC_TIM1
133 #define INIT_DMAC 0x01
134 #define INIT_VU1 0x02
135 #define INIT_VIF1 0x04
136 #define INIT_GIF 0x08
137 #define INIT_VU0 0x10
138 #define INIT_VIF0 0x20
139 #define INIT_IPU 0x40
146 __asm__ (
"nop\nnop\nnop\nnop\nnop\n");
156 ".set\tnoreorder\n\t" \
157 "mfc0\t%0, $12\n\t" \
158 ".set\tpop\n\t" :
"=r" (status));
160 return((status >> 3) & 3);
169 ".set\tnoreorder\n\t" \
170 "mfc0\t%0, $12\n\t" \
171 "li\t%1, 0xffffffe7\n\t" \
174 "mtc0\t%0, $12\n\t" \
176 ".set\tpop\n\t" :
"=r" (status),
"=r" (mask) :
"r" (opmode));
178 return((status >> 3) & 3);
187 ".set\tnoreorder\n\t" \
188 "mfc0\t%0, $12\n\t" \
189 "li\t%1, 0xffffffe7\n\t" \
191 "mtc0\t%0, $12\n\t" \
193 ".set\tpop\n\t" :
"=r" (status),
"=r" (mask));
204 ".set\tnoreorder\n\t" \
205 "mfc0\t%0, $12\n\t" \
206 "ori\t%0, 0x10\n\t" \
207 "mtc0\t%0, $12\n\t" \
209 ".set\tpop\n\t" :
"=r" (status));
214 typedef struct t_ee_sema
224 typedef struct t_ee_thread
240 #define THS_READY 0x02
241 #define THS_WAIT 0x04
242 #define THS_SUSPEND 0x08
243 #define THS_WAITSUSPEND 0x0c
244 #define THS_DORMANT 0x10
252 typedef struct t_ee_thread_status
279 #define CPU_DATA_CACHE 1
280 #define CPU_INSTRUCTION_CACHE 2
302 void Exit(
s32 exit_code) __attribute__((noreturn));
304 void LoadExecPS2(
const char *filename,
s32 num_args,
char *args[]) __attribute__((noreturn));
305 void ExecOSD(
int num_args,
char *args[]) __attribute__((noreturn));
338 void _Exit(
s32 exit_code) __attribute__((noreturn));
339 void _LoadExecPS2(
const char *filename,
s32 num_args,
char *args[]) __attribute__((noreturn));
406 void *
SetupThread(
void *
gp,
void * stack,
s32 stack_size,
void * args,
void * root_func);
424 void SetGsHParam(
void* addr1,
void* addr2,
void* addr3,
void* addr4);
428 int PutTLBEntry(
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
429 int iPutTLBEntry(
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
430 int _SetTLBEntry(
unsigned int index,
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
431 int iSetTLBEntry(
unsigned int index,
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
432 int GetTLBEntry(
unsigned int index,
unsigned int *PageMask,
unsigned int *EntryHi,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
433 int iGetTLBEntry(
unsigned int index,
unsigned int *PageMask,
unsigned int *EntryHi,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
434 int ProbeTLBEntry(
unsigned int EntryHi,
unsigned int *PageMask,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
435 int iProbeTLBEntry(
unsigned int EntryHi,
unsigned int *PageMask,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
486 void _ExecOSD(
int num_args,
char *args[]) __attribute__((noreturn));
505 void abort(
void) __attribute__((noreturn));
506 void exit(
int retval) __attribute__((noreturn));
507 void _exit(
int retval) __attribute__((noreturn));
511 extern int errno __attribute__((section(
"data")));
520 int kCopy(
void *dest,
const void *src,
int size);
522 int Copy(
void *dest,
const void *src,
int size);
523 void setup(
int syscall_num,
void* handler);
s32 CreateSema(ee_sema_t *sema)
s32 iWakeupThread(s32 thread_id)
s32 _iRotateThreadReadyQueue(s32 priority)
static int ee_kmode_exit()
void SetupHeap(void *heap_start, s32 heap_size)
s32 _iWakeupThread(s32 thread_id)
static int ee_get_opmode(void)
s32 Deci2Call(s32, u32 *)
void SetVCommonHandler(s32 handler_num, void *handler_func)
s32 AddIntcHandler2(s32 cause, s32(*handler_func)(s32 cause, void *arg, void *addr), s32 next, void *arg)
void SetGsVParam(s32 arg1)
s32 SignalSema(s32 sema_id)
void GetGsHParam(void *addr1, void *addr2, void *addr3)
s32 DeleteSema(s32 sema_id)
void TerminateLibrary(void)
s32 iSignalSema(s32 sema_id)
s32 iPollSema(s32 sema_id)
s32 iDeleteSema(s32 sema_id)
static int ee_set_opmode(u32 opmode)
s32 iResumeThread(s32 thread_id)
s32 ReferSemaStatus(s32 sema_id, ee_sema_t *sema)
int DisableDmac(int dmac)
u32 SifSetDma(SifDmaTransfer_t *sdd, s32 len)
static void nopdelay(void)
void * SetupThread(void *gp, void *stack, s32 stack_size, void *args, void *root_func)
s32 _iSuspendThread(s32 thread_id)
u32 iCpuConfig(u32 config)
void _InvalidDCache(void *start, void *end)
void iEnableDmacHandler(u32 channel)
void * GetSyscallHandler(int syscall_no)
int DisableIntc(int intc)
int GetTLBEntry(unsigned int index, unsigned int *PageMask, unsigned int *EntryHi, unsigned int *EntryLo0, unsigned int *EntryLo1)
s32 _DisableIntc(s32 cause)
void SetCPUTimer(s32 compval)
void iDisableIntcHandler(u32 cause)
s32 _iEnableIntc(s32 cause)
int iSetTLBEntry(unsigned int index, unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1)
void SetPgifHandler(void *handler)
s32 RemoveIntcHandler(s32 cause, s32 handler_id)
s32 ReferThreadStatus(s32 thread_id, ee_thread_status_t *info)
s32 iRotateThreadReadyQueue(s32 priority)
int iDisableDmac(int dmac)
s32 CreateThread(ee_thread_t *thread)
void EnableDmacHandler(u32 channel)
s32 Interrupt2Iop(s32 cause)
static int ee_kmode_enter()
void RFU009(u32 arg0, u32 arg1)
int iGetTLBEntry(unsigned int index, unsigned int *PageMask, unsigned int *EntryHi, unsigned int *EntryLo0, unsigned int *EntryLo1)
void SetVTLBRefillHandler(s32 handler_num, void *handler_func)
void SetVInterruptHandler(s32 handler_num, void *handler_func)
void SetGsCrt(s16 interlace, s16 pal_ntsc, s16 field)
s32 iReleaseWaitThread(s32 thread_id)
u32 iSifSetDma(SifDmaTransfer_t *sdd, s32 len)
s32 AddSbusIntcHandler(s32 cause, void(*handler)(int call))
s32 iReleaseAlarm(s32 alarm_id)
void SyncDCache(void *start, void *end)
s32 _iReleaseAlarm(s32 alarm_id)
s32 _iDisableIntc(s32 cause)
s32 AddIntcHandler(s32 cause, s32(*handler_func)(s32 cause), s32 next)
s32 _EnableDmac(s32 channel)
s32 ReleaseWaitThread(s32 thread_id)
int iDisableIntc(int intc)
void InvalidDCache(void *start, void *end)
s32 iSetAlarm(u16 time, void(*callback)(s32 alarm_id, u16 time, void *common), void *common)
void SetGsHParam(void *addr1, void *addr2, void *addr3, void *addr4)
void * GetEntryAddress(int syscall)
s32 iSuspendThread(s32 thread_id)
s32 iTerminateThread(s32 thread_id)
s32 ResumeThread(s32 thread_id)
void ResetEE(u32 init_bitfield)
void * ChangeGP(void *gp)
int iProbeTLBEntry(unsigned int EntryHi, unsigned int *PageMask, unsigned int *EntryLo0, unsigned int *EntryLo1)
s32 WakeupThread(s32 thread_id)
int ProbeTLBEntry(unsigned int EntryHi, unsigned int *PageMask, unsigned int *EntryLo0, unsigned int *EntryLo1)
s32 PollSema(s32 sema_id)
s32 WaitSema(s32 sema_id)
void InitTLBFunctions(void)
s32 StartThread(s32 thread_id, void *args)
s32 _iDisableDmac(s32 channel)
s32 AddDmacHandler(s32 channel, s32(*handler)(s32 channel), s32 next)
void _SyncDCache(void *start, void *end)
s32 _DisableDmac(s32 channel)
int PutTLBEntry(unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1)
void ExitDeleteThread(void)
void * GetInterruptHandler(int intr_no)
int Copy(void *dest, const void *src, int size)
int SifSetReg(u32 register_num, int register_value)
void _Exit(s32 exit_code)
s32 _EnableIntc(s32 cause)
s32 _SetAlarm(u16 time, void(*callback)(s32 alarm_id, u16 time, void *common), void *common)
s32 iReferSemaStatus(s32 sema_id, ee_sema_t *sema)
void DisableDmacHandler(u32 channel)
void SetOsdConfigParam(void *addr)
s32 _ReleaseAlarm(s32 alarm_id)
void iFlushCache(s32 operation)
s32 EnableCache(s32 cache)
int iPutTLBEntry(unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1)
void _LoadExecPS2(const char *filename, s32 num_args, char *args[])
int SetMemoryMode(int mode)
void SetCPUTimerHandler(void(*handler)(void))
void iInvalidDCache(void *start, void *end)
s32 _ExecPS2(void *entry, void *gp, int num_args, char *args[])
s32 RemoveDmacHandler(s32 channel, s32 handler_id)
s32 iCancelWakeupThread(s32 thread_id)
void FlushCache(s32 operation)
s32 _iEnableDmac(s32 channel)
s32 ExecPS2(void *entry, void *gp, int num_args, char *args[])
void SetSyscall(s32 syscall_num, void *handler)
s32 DisableCache(s32 cache)
void ExecOSD(int num_args, char *args[])
s32 iReferThreadStatus(s32 thread_id, ee_thread_status_t *info)
int kCopy(void *dest, const void *src, int size)
void iDisableDmacHandler(u32 channel)
s32 iChangeThreadPriority(s32 thread_id, s32 priority)
s32 _iSetAlarm(u16 time, void(*callback)(s32 alarm_id, u16 time, void *common), void *common)
void setup(int syscall_num, void *handler)
s32 RotateThreadReadyQueue(s32 priority)
int ExpandScratchPad(unsigned int page)
s32 TerminateThread(s32 thread_id)
int kCopyBytes(void *dest, const void *src, int size)
void LoadExecPS2(const char *filename, s32 num_args, char *args[])
int iEnableIntc(int intc)
void _ExecOSD(int num_args, char *args[])
void iSyncDCache(void *start, void *end)
void GetOsdConfigParam(void *addr)
s32 CancelWakeupThread(s32 thread_id)
void GetOsdConfigParam2(void *config, s32 size, s32 offset)
int SifGetReg(u32 register_num)
int _SetTLBEntry(unsigned int index, unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1)
s32 DeleteThread(s32 thread_id)
u32 CpuConfig(u32 config)
void SetVSyncFlag(u32 *, u64 *)
void * GetExceptionHandler(int except_no)
void DisableIntcHandler(u32 cause)
void iEnableIntcHandler(u32 cause)
s32 SetAlarm(u16 time, void(*callback)(s32 alarm_id, u16 time, void *common), void *common)
void SetOsdConfigParam2(void *config, s32 size, s32 offset)
void EnableIntcHandler(u32 cause)
s32 SuspendThread(s32 thread_id)
s32 AddDmacHandler2(s32 channel, s32(*handler)(s32 channel, void *arg, void *addr), s32 next, void *arg)
void _GetGsDxDyOffset(int mode, int *dx, int *dy, int *dw, int *dh)
s32 ChangeThreadPriority(s32 thread_id, s32 priority)
s32 ReleaseAlarm(s32 alarm_id)
int iEnableDmac(int dmac)
s32 RemoveSbusIntcHandler(s32 cause)