PS2SDK
PS2 Homebrew Libraries
kernel.h
Go to the documentation of this file.
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # (C)2001, Gustavo Scotti (gustavo@scotti.com)
7 # (c) 2003 Marcus R. Brown <mrbrown@0xd6.org>
8 # Licenced under Academic Free License version 2.0
9 # Review ps2sdk README & LICENSE files for further details.
10 */
11 
17 #ifndef __KERNEL_H__
18 #define __KERNEL_H__
19 
20 #include <stddef.h>
21 #include <stdarg.h>
22 #include <sifdma.h>
23 #include <mipscopaccess.h>
24 
25 #define DI DIntr
26 #define EI EIntr
27 
28 // Workaround for EE kernel bug: call this immediately before returning from any interrupt handler.
29 #define ExitHandler() __asm__ __volatile__("sync\nei\n")
30 
31 // note: 'sync' is the same as 'sync.l'
32 #define EE_SYNC() __asm__ __volatile__("sync")
33 #define EE_SYNCL() __asm__ __volatile__("sync.l")
34 #define EE_SYNCP() __asm__ __volatile__("sync.p")
35 
36 #define UNCACHED_SEG(x) \
37  ((void *)(((u32)(x)) | 0x20000000))
38 
39 #define IS_UNCACHED_SEG(x) \
40  (((u32)(x)) & 0x20000000)
41 
42 #define UCAB_SEG(x) \
43  ((void *)(((u32)(x)) | 0x30000000))
44 
45 #define PUSHDATA(t, x, v, l) \
46  *(t *)(x) = (v); \
47  (l) = sizeof(t)
48 
49 #define POPDATA(t, x, v, l) \
50  (v) = *(t *)(x); \
51  (l) = sizeof(t)
52 
53 #define ALIGNED(x) __attribute__((aligned((x))))
54 
55 // GP functions
56 extern void *ChangeGP(void *gp);
57 extern void SetGP(void *gp);
58 extern void *GetGP(void);
59 
60 extern void *_gp;
61 #define SetModuleGP() ChangeGP(&_gp)
62 
68 #define TH_SELF 0
69 
71 #define MAX_THREADS 256 // A few will be used for the kernel patches. Thread 0 is always the idle thread.
72 #define MAX_SEMAPHORES 256 // A few will be used for the kernel patches.
73 #define MAX_PRIORITY 128
74 #define MAX_HANDLERS 128
75 #define MAX_ALARMS 64
76 
78 #define WRITEBACK_DCACHE 0
79 #define INVALIDATE_DCACHE 1
80 #define INVALIDATE_ICACHE 2
81 #define INVALIDATE_CACHE 3 // Invalidate both data & instruction caches.
82 
84 enum {
85  INTC_GS,
86  INTC_SBUS,
87  INTC_VBLANK_S,
88  INTC_VBLANK_E,
89  INTC_VIF0,
90  INTC_VIF1,
91  INTC_VU0,
92  INTC_VU1,
93  INTC_IPU,
94  INTC_TIM0,
95  INTC_TIM1,
96  INTC_TIM2,
97  // INTC_TIM3, // Reserved by the EE kernel for alarms (do not use)
98  INTC_SFIFO = 13, // Error encountered during SFIFO transfer
99  INTC_VU0WD // VU0 WatchDog; ForceBreak is sent to VU0 if left in RUN state for extended periods of time.
100 };
101 
102 // For backward-compatibility
103 #define kINTC_GS INTC_GS
104 #define kINTC_SBUS INTC_SBUS
105 #define kINTC_VBLANK_START INTC_VBLANK_S
106 #define kINTC_VBLANK_END INTC_VBLANK_E
107 #define kINTC_VIF0 INTC_VIF0
108 #define kINTC_VIF1 INTC_VIF1
109 #define kINTC_VU0 INTC_VU0
110 #define kINTC_VU1 INTC_VU1
111 #define kINTC_IPU INTC_IPU
112 #define kINTC_TIMER0 INTC_TIM0
113 #define kINTC_TIMER1 INTC_TIM1
114 
116 enum {
117  DMAC_VIF0,
118  DMAC_VIF1,
119  DMAC_GIF,
120  DMAC_FROM_IPU,
121  DMAC_TO_IPU,
122  DMAC_SIF0,
123  DMAC_SIF1,
124  DMAC_SIF2,
125  DMAC_FROM_SPR,
126  DMAC_TO_SPR,
127 
128  DMAC_CIS = 13, // Channel interrupt
129  DMAC_MEIS, // MemFIFO empty interrupt
130  DMAC_BEIS, // Bus error interrupt
131 };
132 
134 #define INIT_DMAC 0x01
135 #define INIT_VU1 0x02
136 #define INIT_VIF1 0x04
137 #define INIT_GIF 0x08
138 #define INIT_VU0 0x10
139 #define INIT_VIF0 0x20
140 #define INIT_IPU 0x40
141 
142 static inline void nopdelay(void)
143 {
144  int i = 0xfffff;
145 
146  do {
147  __asm__ __volatile__("nop\nnop\nnop\nnop\nnop\n");
148  } while (i-- != -1);
149 }
150 
151 static inline int ee_get_opmode(void)
152 {
153  u32 status;
154 
155  status = get_mips_cop_reg(0, COP0_REG_Status);
156 
157  return ((status >> 3) & 3);
158 }
159 
160 static inline int ee_set_opmode(u32 opmode)
161 {
162  u32 status;
163 
164  status = (get_mips_cop_reg(0, COP0_REG_Status) & ~0x18) | opmode;
165  set_mips_cop_reg(0, COP0_REG_Status, status);
166  EE_SYNCP();
167 
168  return ((status >> 3) & 3);
169 }
170 
171 static inline int ee_kmode_enter()
172 {
173  u32 status;
174 
175  status = (get_mips_cop_reg(0, COP0_REG_Status) & ~0x18);
176  set_mips_cop_reg(0, COP0_REG_Status, status);
177  EE_SYNCP();
178 
179  return status;
180 }
181 
182 static inline int ee_kmode_exit()
183 {
184  int status;
185 
186  status = get_mips_cop_reg(0, COP0_REG_Status) | 0x10;
187  set_mips_cop_reg(0, COP0_REG_Status, status);
188  EE_SYNCP();
189 
190  return status;
191 }
192 
193 typedef struct t_ee_sema
194 {
195  int count,
196  max_count,
197  init_count,
198  wait_threads;
199  u32 attr,
200  option;
201 } ee_sema_t;
202 
203 typedef struct t_ee_thread
204 {
205  int status; // 0x00
206  void *func; // 0x04
207  void *stack; // 0x08
208  int stack_size; // 0x0C
209  void *gp_reg; // 0x10
210  int initial_priority; // 0x14
211  int current_priority; // 0x18
212  u32 attr; // 0x1C
213  u32 option; // 0x20 Do not use - officially documented to not work.
214 
215 } ee_thread_t;
216 
218 #define THS_RUN 0x01
219 #define THS_READY 0x02
220 #define THS_WAIT 0x04
221 #define THS_SUSPEND 0x08
222 #define THS_WAITSUSPEND 0x0c
223 #define THS_DORMANT 0x10
224 
226 #define TSW_NONE 0 // Thread is not in WAIT state
227 #define TSW_SLEEP 1
228 #define TSW_SEMA 2
229 
230 // sizeof() == 0x30
231 typedef struct t_ee_thread_status
232 {
233  int status; // 0x00
234  void *func; // 0x04
235  void *stack; // 0x08
236  int stack_size; // 0x0C
237  void *gp_reg; // 0x10
238  int initial_priority; // 0x14
239  int current_priority; // 0x18
240  u32 attr; // 0x1C
241  u32 option; // 0x20
242  u32 waitType; // 0x24
243  u32 waitId; // 0x28
244  u32 wakeupCount; // 0x2C
246 
249  CPU_CONFIG_ENABLE_DIE = 0, // Enable Dual Issue
250  CPU_CONFIG_ENABLE_ICE, // Enable Instruction Cache
251  CPU_CONFIG_ENABLE_DCE, // Enable Data Cache
252  CPU_CONFIG_DISBLE_DIE, // Disable Dual Issue
253  CPU_CONFIG_DISBLE_ICE, // Disable Instruction Cache
254  CPU_CONFIG_DISBLE_DCE // Disable Data Cache
255 };
256 
258 #define CPU_DATA_CACHE 1
259 #define CPU_INSTRUCTION_CACHE 2
260 
262 enum {
263  COP0_INDEX,
264  COP0_RANDOM,
265  COP0_ENTRYLO0,
266  COP0_ENTRYLO1,
267  COP0_CONTEXT,
268  COP0_PAGEMASK,
269  COP0_WIRED,
270  // 7 reserved
271  COP0_BADVADDR = 8,
272  COP0_COUNT,
273  COP0_ENTRYHI,
274  COP0_COMPARE,
275  COP0_STATUS,
276  COP0_CAUSE,
277  COP0_EPC,
278  COP0_PRID,
279  COP0_CONFIG,
280  // 17-22 reserved
281  COP0_BADPADDR = 23,
282  COP0_DEBUG,
283  COP0_PERF,
284  // 26-27 reserved
285  COP0_TAGLO = 28,
286  COP0_TAGHI,
287  COP0_ERROREPC,
288 };
289 
290 #ifdef __cplusplus
291 extern "C" {
292 #endif
293 
294 /* Initialization/deinitialization routines. */
295 extern void _InitSys(void); // Run by crt0
296 
297 extern void TerminateLibrary(void); // Run by crt0
298 
299 /* Thread update functions */
300 extern int InitThread(void); // Run by _InitSys
301 
302 extern s32 iWakeupThread(s32 thread_id);
303 extern s32 iRotateThreadReadyQueue(s32 priority);
304 extern s32 iSuspendThread(s32 thread_id);
305 
306 /* TLB update functions */
307 extern void InitTLBFunctions(void); // Run by _InitSys
308 
309 extern void InitTLB(void);
310 extern void Exit(s32 exit_code) __attribute__((noreturn));
311 extern s32 ExecPS2(void *entry, void *gp, int num_args, char *args[]);
312 extern void LoadExecPS2(const char *filename, s32 num_args, char *args[]) __attribute__((noreturn));
313 extern void ExecOSD(int num_args, char *args[]) __attribute__((noreturn));
314 
315 /* Alarm update functions */
316 extern void InitAlarm(void); // Run by _InitSys
317 
318 /* libosd update functions */
319 extern void InitExecPS2(void); // ExecPS2 patch only. Run by _InitSys, Exit, LoadExecPS2, ExecPS2 and ExecOSD
320 extern void InitOsd(void); // ExecPS2 + System Configuration patches. Please refer to the comments within libosd_full.c
321 
322 extern int PatchIsNeeded(void); // Indicates whether the patch is required.
323 
324 // Debug (print) update functions:
325 extern void InitDebug(void);
326 
327 /* Glue routines. */
328 extern int DIntr(void);
329 extern int EIntr(void);
330 
331 extern int EnableIntc(int intc);
332 extern int DisableIntc(int intc);
333 extern int EnableDmac(int dmac);
334 extern int DisableDmac(int dmac);
335 
336 extern int iEnableIntc(int intc);
337 extern int iDisableIntc(int intc);
338 extern int iEnableDmac(int dmac);
339 extern int iDisableDmac(int dmac);
340 
341 extern void SyncDCache(void *start, void *end);
342 extern void iSyncDCache(void *start, void *end);
343 extern void InvalidDCache(void *start, void *end);
344 extern void iInvalidDCache(void *start, void *end);
345 
346 /* System call prototypes */
347 extern void ResetEE(u32 init_bitfield);
348 extern void SetGsCrt(s16 interlace, s16 pal_ntsc, s16 field);
349 extern void KExit(s32 exit_code) __attribute__((noreturn));
350 extern void _LoadExecPS2(const char *filename, s32 num_args, char *args[]) __attribute__((noreturn));
351 extern s32 _ExecPS2(void *entry, void *gp, int num_args, char *args[]);
352 extern void RFU009(u32 arg0, u32 arg1);
353 extern s32 AddSbusIntcHandler(s32 cause, void (*handler)(int call));
354 extern s32 RemoveSbusIntcHandler(s32 cause);
355 extern s32 Interrupt2Iop(s32 cause);
356 extern void SetVTLBRefillHandler(s32 handler_num, void *handler_func);
357 extern void SetVCommonHandler(s32 handler_num, void *handler_func);
358 extern void SetVInterruptHandler(s32 handler_num, void *handler_func);
359 extern s32 AddIntcHandler(s32 cause, s32 (*handler_func)(s32 cause), s32 next);
360 extern s32 AddIntcHandler2(s32 cause, s32 (*handler_func)(s32 cause, void *arg, void *addr), s32 next, void *arg);
361 extern s32 RemoveIntcHandler(s32 cause, s32 handler_id);
362 extern s32 AddDmacHandler(s32 channel, s32 (*handler)(s32 channel), s32 next);
363 extern s32 AddDmacHandler2(s32 channel, s32 (*handler)(s32 channel, void *arg, void *addr), s32 next, void *arg);
364 extern s32 RemoveDmacHandler(s32 channel, s32 handler_id);
365 extern s32 _EnableIntc(s32 cause);
366 extern s32 _DisableIntc(s32 cause);
367 extern s32 _EnableDmac(s32 channel);
368 extern s32 _DisableDmac(s32 channel);
369 
370 // Alarm value is in H-SYNC ticks.
371 extern s32 SetAlarm(u16 time, void (*callback)(s32 alarm_id, u16 time, void *common), void *common);
372 extern s32 _SetAlarm(u16 time, void (*callback)(s32 alarm_id, u16 time, void *common), void *common);
373 extern s32 ReleaseAlarm(s32 alarm_id);
374 extern s32 _ReleaseAlarm(s32 alarm_id);
375 
376 extern s32 _iEnableIntc(s32 cause);
377 extern s32 _iDisableIntc(s32 cause);
378 extern s32 _iEnableDmac(s32 channel);
379 extern s32 _iDisableDmac(s32 channel);
380 
381 extern s32 iSetAlarm(u16 time, void (*callback)(s32 alarm_id, u16 time, void *common), void *common);
382 extern s32 _iSetAlarm(u16 time, void (*callback)(s32 alarm_id, u16 time, void *common), void *common);
383 extern s32 iReleaseAlarm(s32 alarm_id);
384 extern s32 _iReleaseAlarm(s32 alarm_id);
385 
386 extern s32 CreateThread(ee_thread_t *thread);
387 extern s32 DeleteThread(s32 thread_id);
388 extern s32 StartThread(s32 thread_id, void *args);
389 extern void ExitThread(void);
390 extern void ExitDeleteThread(void);
391 extern s32 TerminateThread(s32 thread_id);
392 extern s32 iTerminateThread(s32 thread_id);
393 // extern void DisableDispatchThread(void); // not supported
394 // extern void EnableDispatchThread(void); // not supported
395 extern s32 ChangeThreadPriority(s32 thread_id, s32 priority);
396 extern s32 iChangeThreadPriority(s32 thread_id, s32 priority);
397 extern s32 RotateThreadReadyQueue(s32 priority);
398 extern s32 _iRotateThreadReadyQueue(s32 priority);
399 extern s32 ReleaseWaitThread(s32 thread_id);
400 extern s32 iReleaseWaitThread(s32 thread_id);
401 extern s32 GetThreadId(void);
402 extern s32 _iGetThreadId(void); // This is actually GetThreadId(), used for a hack by SCE to work around the iWakeupThread design flaw.
403 extern s32 ReferThreadStatus(s32 thread_id, ee_thread_status_t *info);
404 extern s32 iReferThreadStatus(s32 thread_id, ee_thread_status_t *info);
405 extern s32 SleepThread(void);
406 extern s32 WakeupThread(s32 thread_id);
407 extern s32 _iWakeupThread(s32 thread_id);
408 extern s32 CancelWakeupThread(s32 thread_id);
409 extern s32 iCancelWakeupThread(s32 thread_id);
410 extern s32 SuspendThread(s32 thread_id);
411 extern s32 _iSuspendThread(s32 thread_id);
412 extern s32 ResumeThread(s32 thread_id);
413 extern s32 iResumeThread(s32 thread_id);
414 
415 extern u8 RFU059(void);
416 
417 extern void *SetupThread(void *gp, void *stack, s32 stack_size, void *args, void *root_func);
418 extern void SetupHeap(void *heap_start, s32 heap_size);
419 extern void *EndOfHeap(void);
420 
421 extern s32 CreateSema(ee_sema_t *sema);
422 extern s32 DeleteSema(s32 sema_id);
423 extern s32 SignalSema(s32 sema_id);
424 extern s32 iSignalSema(s32 sema_id);
425 extern s32 WaitSema(s32 sema_id);
426 extern s32 PollSema(s32 sema_id);
427 extern s32 iPollSema(s32 sema_id);
428 extern s32 ReferSemaStatus(s32 sema_id, ee_sema_t *sema);
429 extern s32 iReferSemaStatus(s32 sema_id, ee_sema_t *sema);
430 extern s32 iDeleteSema(s32 sema_id);
431 extern void SetOsdConfigParam(void *addr);
432 extern void GetOsdConfigParam(void *addr);
433 extern void GetGsHParam(void *addr1, void *addr2, void *addr3);
434 extern s32 GetGsVParam(void);
435 extern void SetGsHParam(void *addr1, void *addr2, void *addr3, void *addr4);
436 extern void SetGsVParam(s32 arg1);
437 
438 // TLB functions are only available if InitTLBFunctions() is run (Normally run by crt0).
439 extern int PutTLBEntry(unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1);
440 extern int iPutTLBEntry(unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1);
441 extern int _SetTLBEntry(unsigned int index, unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1);
442 extern int iSetTLBEntry(unsigned int index, unsigned int PageMask, unsigned int EntryHi, unsigned int EntryLo0, unsigned int EntryLo1);
443 extern int GetTLBEntry(unsigned int index, unsigned int *PageMask, unsigned int *EntryHi, unsigned int *EntryLo0, unsigned int *EntryLo1);
444 extern int iGetTLBEntry(unsigned int index, unsigned int *PageMask, unsigned int *EntryHi, unsigned int *EntryLo0, unsigned int *EntryLo1);
445 extern int ProbeTLBEntry(unsigned int EntryHi, unsigned int *PageMask, unsigned int *EntryLo0, unsigned int *EntryLo1);
446 extern int iProbeTLBEntry(unsigned int EntryHi, unsigned int *PageMask, unsigned int *EntryLo0, unsigned int *EntryLo1);
447 extern int ExpandScratchPad(unsigned int page);
448 
449 extern void EnableIntcHandler(u32 cause);
450 extern void iEnableIntcHandler(u32 cause);
451 extern void DisableIntcHandler(u32 cause);
452 extern void iDisableIntcHandler(u32 cause);
453 extern void EnableDmacHandler(u32 channel);
454 extern void iEnableDmacHandler(u32 channel);
455 extern void DisableDmacHandler(u32 channel);
456 extern void iDisableDmacHandler(u32 channel);
457 extern void KSeg0(s32 arg1);
458 extern s32 EnableCache(s32 cache);
459 extern s32 DisableCache(s32 cache);
460 extern u32 GetCop0(s32 reg_id);
461 extern void FlushCache(s32 operation);
462 extern u32 CpuConfig(u32 config);
463 extern u32 iGetCop0(s32 reg_id);
464 extern void iFlushCache(s32 operation);
465 extern u32 iCpuConfig(u32 config);
466 extern void SetCPUTimerHandler(void (*handler)(void));
467 extern void SetCPUTimer(s32 compval);
468 
469 // These two are not available in the unpatched Protokernel (Unpatched SCPH-10000 and SCPH-15000 kernels).
470 extern void SetOsdConfigParam2(void *config, s32 size, s32 offset);
471 extern void GetOsdConfigParam2(void *config, s32 size, s32 offset);
472 
473 extern u64 GsGetIMR(void);
474 extern u64 iGsGetIMR(void);
475 extern u64 GsPutIMR(u64 imr);
476 extern u64 iGsPutIMR(u64 imr);
477 extern void SetPgifHandler(void *handler);
478 extern void SetVSyncFlag(u32 *, u64 *);
479 extern void SetSyscall(s32 syscall_num, void *handler);
480 extern void _print(const char *fmt, ...); // Disabled by default, must call InitDebug() to enable
481 
482 extern void sceSifStopDma(void); // Disables SIF0 (IOP -> EE).
483 
484 extern int sceSifDmaStat(int trid);
485 extern int sceiSifDmaStat(int trid);
486 extern int sceSifSetDma(SifDmaTransfer_t *dmat, int count);
487 extern int isceSifSetDma(SifDmaTransfer_t *dmat, int count);
488 
489 // Enables SIF0 (IOP -> EE). Sets channel 5 CHCR to 0x184 (CHAIN, TIE and STR).
490 extern void sceSifSetDChain(void);
491 extern void isceSifSetDChain(void);
492 
493 // Sets/gets SIF register values (Refer to sifdma.h for a register list).
494 extern int sceSifSetReg(u32 register_num, int register_value);
495 extern int sceSifGetReg(u32 register_num);
496 
497 extern void _ExecOSD(int num_args, char *args[]) __attribute__((noreturn));
498 extern s32 Deci2Call(s32, u32 *);
499 extern void PSMode(void);
500 extern s32 MachineType(void);
501 extern s32 GetMemorySize(void);
502 
503 // Internal function for getting board-specific offsets, only present in later kernels (ROMVER > 20010608).
504 extern void _GetGsDxDyOffset(int mode, int *dx, int *dy, int *dw, int *dh);
505 
506 // Internal function for reinitializing the TLB, only present in later kernels. Please use InitTLB() instead to initialize the TLB with all kernels.
507 extern int _InitTLB(void);
508 /* (DESR kernels only) Sets the memory size. mode != 1 -> 64MB mode, mode == 1 -> 32MB mode.
509  The mode is only binding when either _InitTLB() or the PSX ExecPS2() syscall is called.
510  The stack pointer must remain in range of usable memory, or a TLB exception will occur. */
511 extern int SetMemoryMode(int mode); // Arbitrarily named.
512 /* (DESR kernels only) Get the value set by SetMemoryMode. */
513 extern int GetMemoryMode(void); // Arbitrarily named.
514 
515 extern void _SyncDCache(void *start, void *end);
516 extern void _InvalidDCache(void *start, void *end);
517 
518 extern void *GetSyscallHandler(int syscall_no);
519 extern void *GetExceptionHandler(int except_no);
520 extern void *GetInterruptHandler(int intr_no);
521 
522 /* Helper functions for kernel patching */
523 extern int kCopy(void *dest, const void *src, int size);
524 extern int kCopyBytes(void *dest, const void *src, int size);
525 extern int Copy(void *dest, const void *src, int size);
526 extern void setup(int syscall_num, void *handler); // alias of "SetSyscall"
527 extern void *GetEntryAddress(int syscall);
528 
529 // For backwards compatibility
530 #define SifStopDma(...) sceSifStopDma(__VA_ARGS__)
531 // SifDmaStat defined in sifdma.h
532 #define iSifDmaStat(...) isceSifDmaStat(__VA_ARGS__)
533 // SifSetDma defined in sifdma.h
534 #define iSifSetDma(...) isceSifSetDma(__VA_ARGS__)
535 #define SifSetDChain(...) sceSifSetDChain(__VA_ARGS__)
536 #define iSifSetDChain(...) isceSifSetDChain(__VA_ARGS__)
537 #define SifSetReg(...) sceSifSetReg(__VA_ARGS__)
538 #define SifGetReg(...) sceSifGetReg(__VA_ARGS__)
539 
540 // Helpers marcos for no-patch versions
541 // Useful to build a special version of libkernel that does not contain any runtime patches (useful for loaders/resident programs).
542 #define DISABLE_PATCHED_Exit() \
543  void Exit(s32 exit_code) { KExit(exit_code); }
544 
545 #define DISABLE_PATCHED_LoadExecPS2() \
546  void LoadExecPS2(const char *filename, s32 num_args, char *args[]) { _LoadExecPS2(filename, num_args, args); }
547 
548 #define NO_PATCHED_ExecOSD() \
549  void ExecOSD(int num_args, char *args[]) { _ExecOSD(num_args, args); }
550 
551 #define DISABLE_TimerSystemTime() \
552  void _ps2sdk_init_timer() {} \
553  void _ps2sdk_deinit_timer() {}
554 
555 #define DISABLE_TimerAlarm() \
556  void ForTimer_InitAlarm(void) {}
557 
558 #define DISABLE_PATCHED_ALARMS() \
559  void InitAlarm(void) {}
560 
561 #define DISABLE_PATCHED_THREADS() \
562  int InitThread(void) { return 0; } \
563  s32 iRotateThreadReadyQueue(s32 priority) { return _iRotateThreadReadyQueue(priority); } \
564  s32 iWakeupThread(s32 thread_id) { return _iWakeupThread(thread_id); } \
565  s32 iSuspendThread(s32 thread_id) { return _iSuspendThread(thread_id); }
566 
567 #define DISABLE_PATCHED_ExecPS2() \
568  void InitExecPS2(void) {} \
569  s32 ExecPS2(void *entry, void *gp, int num_args, char *args[]) { return _ExecPS2(entry, gp, num_args, args); }
570 
571 #define DISABLE_PATCHED_TLBFunctions() \
572  void InitTLBFunctions(void) {} \
573  void InitTLB(void) {}
574 
575 #define DISABLE_PATCHED_FUNCTIONS() \
576  DISABLE_PATCHED_ALARMS() \
577  DISABLE_PATCHED_THREADS() \
578  DISABLE_PATCHED_ExecPS2() \
579  DISABLE_PATCHED_TLBFunctions() \
580  DISABLE_PATCHED_Exit() \
581  DISABLE_PATCHED_LoadExecPS2()
582 
583 #define DISABLE_EXTRA_TIMERS_FUNCTIONS() \
584  DISABLE_TimerSystemTime() \
585  DISABLE_TimerAlarm()
586 
587 #ifdef __cplusplus
588 }
589 #endif
590 
591 #endif /* __KERNEL_H__ */
sifdma.h
COP0_REG_Status
@ COP0_REG_Status
Definition: mipscopaccess.h:36
s_info
Definition: xprintf.c:78
thread
Definition: thcommon.h:143
mipscopaccess.h
CPU_CONFIG
CPU_CONFIG
Definition: kernel.h:248
t_ee_sema
Definition: kernel.h:193
count
u32 count
start sector of fragmented bd/file
Definition: usbhdfsd-common.h:3
_gp
void * _gp
__attribute__
typedef __attribute__
Definition: tlbfunc.c:60
t_SifDmaTransfer
Definition: sifdma.h:52
t_ee_thread_status
Definition: kernel.h:231
t_ee_thread
Definition: kernel.h:203