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