Difference between revisions of "SceSysmem"

From Vita Development Wiki
Jump to navigation Jump to search
 
(814 intermediate revisions by 4 users not shown)
Line 2: Line 2:
  
 
== Module ==
 
== Module ==
 +
 
This module exists in both non-secure and secure world. The non-secure world SELF can be found in <code>os0:kd/sysmem.skprx</code>. It also can be found in the [[Boot Sequence|Boot Image]].
 
This module exists in both non-secure and secure world. The non-secure world SELF can be found in <code>os0:kd/sysmem.skprx</code>. It also can be found in the [[Boot Sequence|Boot Image]].
  
Line 25: Line 26:
 
|-
 
|-
 
| 0.990-1.692 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || 0xC7309957
 
| 0.990-1.692 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || 0xC7309957
 +
|-
 +
| 1.80-3.74 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || not present. Removed.
 
|-
 
|-
 
| 0.990-3.60 || [[SceSysmem#SceSysmem|SceSysmem]] || Non-secure || User || 0x37FE725A
 
| 0.990-3.60 || [[SceSysmem#SceSysmem|SceSysmem]] || Non-secure || User || 0x37FE725A
Line 36: Line 39:
 
| 3.63-3.65 || [[SceSysmem#SceUartForKernel|SceUartForKernel]] || Non-secure || Kernel || 0x1CCD9BA3
 
| 3.63-3.65 || [[SceSysmem#SceUartForKernel|SceUartForKernel]] || Non-secure || Kernel || 0x1CCD9BA3
 
|-
 
|-
| 0.990-3.65 || [[SceSysmem#SceCpu|SceCpu]] || Non-secure || User || 0x45265161
+
| 0.990-3.740.011 || [[SceSysmem#SceCpu|SceCpu]] || Non-secure || User || 0x45265161
 
|-
 
|-
 
| 0.990-3.61 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0x54BF2BAB
 
| 0.990-3.61 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0x54BF2BAB
Line 44: Line 47:
 
| 0.990-3.65 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E
 
| 0.990-3.65 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E
 
|-
 
|-
| 0.990-1.69 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || 0x24878615
+
| 0.990-1.692 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || 0x24878615
 
|-
 
|-
| 1.80 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || Removed
+
| 1.80-3.74 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || not present. Removed.
 
|-
 
|-
 
| 0.990-3.65 || [[SceSysmem#SceSysclibForDriver|SceSysclibForDriver]] || Non-secure || Kernel || 0x7EE45391
 
| 0.990-3.65 || [[SceSysmem#SceSysclibForDriver|SceSysclibForDriver]] || Non-secure || Kernel || 0x7EE45391
Line 56: Line 59:
 
| 0.990-3.65 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4
 
| 0.990-3.65 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4
 
|-
 
|-
| 0.990-1.69 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E
+
| 0.990-1.692 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E
 
|-
 
|-
| 1.80 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || Moved to [[SceSblPostSsMgr]]
+
| 1.80-3.74 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || not present. Moved to [[SceSblPostSsMgr#SceZlibForDriver]].
 
|-
 
|-
 
| 0.990-3.65 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C
 
| 0.990-3.65 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C
Line 100: Line 103:
 
| 0.931-3.60 || [[SceSysmem#SceSblAIMgrForTZS|SceSblAIMgrForTZS]] || Secure || Kernel || 0x60D19047
 
| 0.931-3.60 || [[SceSysmem#SceSblAIMgrForTZS|SceSblAIMgrForTZS]] || Secure || Kernel || 0x60D19047
 
|}
 
|}
 +
 +
The SceCpu libraries provide wrappers for much ARM CP15 co-processor access as well as low level support of spinlocks and other synchronization primitives.
  
 
== Types ==
 
== Types ==
  
<source lang="C">
+
See [[SceSysmem Types]].
typedef struct SceKernelVARange SceKernelVARange;
 
typedef struct SceKernelBootArgs SceKernelBootArgs;
 
typedef struct SceSysrootProcessHandler SceSysrootProcessHandler;
 
typedef struct SceSysrootModulemgrHandlers SceSysrootModulemgrHandlers;
 
typedef struct SceSysrootForKernel_D29BCA77_struct SceSysrootForKernel_D29BCA77_struct;
 
typedef struct SceSysrootForKernel_733C243E_struct SceSysrootForKernel_733C243E_struct;
 
  
typedef SceUInt32 SceCachedSecureModule;
+
== SysEvent ==
#define SCE_CACHED_SECURE_MODULE_GCAUTHMGR 0            // os0:sm/gcauthmgr_sm.self
 
#define SCE_CACHED_SECURE_MODULE_RMAUTH 1              // os0:sm/rmauth_sm.self
 
#define SCE_CACHED_SECURE_MODULE_ENDEC_W_PORTABILITY 2  // os0:sm/encdec_w_portability_sm.self
 
  
typedef struct SceCachedSecureModuleInfo { // size is 0xC
+
Dispatcher
SceSize size;    // Size of this structure
 
void *pSelfData;  // Virtual address of the SM
 
SceSize selfSize; // Size of the SM
 
} SceCachedSecureModuleInfo;
 
  
#define SCE_SYSROOT_INIT_CALLBACK_MAX_FUNC (9)
+
{| class="wikitable sortable mw-collapsible mw-collapsed"
#define SCE_SYSROOT_INIT_CALLBACK_MAX_SLOT (8)
+
|-
 +
! Module !! Type !! Event !! Description
 +
|-
 +
| [[ScePower]] || 0 || 0x100 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_START</code>. before sceKernelCpuSuspendIntr.
 +
|-
 +
| [[ScePower]] || 0 || 0x101 || unknown
 +
|-
 +
| [[ScePower]] || 0 || 0x102 || unknown. later sceKernelCpuResumeIntr.
 +
|-
 +
| [[ScePower]] || 0 || 0x20F -> 0x200 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE2</code>. after sceKernelCpuResumeIntr.
 +
|-
 +
| [[ScePower]] || 0 || 0x400 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_START</code>.
 +
|-
 +
| [[ScePower]] || 0 || 0x401 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_MAIN</code>. (this is a guessed name. but should be official name)
 +
|-
 +
| [[ScePower]] || 0 || 0x402 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_END</code>. (this is a guessed name)
 +
|-
 +
| [[ScePower]] || 1 || 0x1000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_FREEZE_TIME</code>.
 +
|-
 +
| [[ScePower]] || 1 || 0x400F -> 0x4000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE0</code>.
 +
|-
 +
| [[ScePower]] || 1 || 0x10000 -> 0x1000F || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE0</code>.
 +
|-
 +
| [[ScePower]] || 1 || 0x40000 || <code>SCE_KERNEL_SYSEVENT_RESUME_MELT_TIME</code>. before sceKernelCpuResumeIntr.
 +
|-
 +
| [[ScePower]] || 1 || 0x100000 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_START</code>. after sceKernelCpuResumeIntr.
 +
|-
 +
| [[ScePower]] || 1 || 0x100001 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_MAIN</code>.
 +
|-
 +
| [[ScePower]] || 1 || 0x100002 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_END</code>. (this is a guessed name)
 +
|-
 +
| [[ScePower]] || 1 || 0x400000 || <code>SCE_KERNEL_SYSEVENT_RESUME_COMPLETED
 +
|}
  
typedef struct SceUIDSysrootObject { // size is 0x41C on FW 3.60-3.65
+
Handler
void *object;
 
SceClass *sce_class;
 
SceSize size; // Size of this structure
 
SceUInt32 magic1;
 
int cpu_intr;
 
SceSize boot_alloc_memory_size; // 0x400
 
void *boot_alloc_memory; // used by boot time malloc
 
int unk_0x1C; // 0x4
 
void *unk_0x20; // size is 0x80-bytes
 
SceUInt32 boot_flags; // 0x10 for coldboot, 0x1 for secure state
 
SceUInt32 status;
 
SceCorelockContext corelock_context;
 
  
// start ModulePrivate
+
{| class="wikitable sortable mw-collapsible mw-collapsed"
int unk_0x34;  // ex:0
+
|-
int unk_0x38;  // ex:0
+
! Module !! Type !! Event !! Description
void *unk_0x3C; // size is 4 byte
+
|-
void *unk_0x40; // Related to SceHeap. Size is 0xDC byte.
+
| [[SceAppMgr]] || 0 || 0x20F || _sceAppMgrSystemSuspend
SceExcpmgrData *ExcpmgrData; // Same as value returned by sceKernelGetExcpDataForKernel
+
|-
void *unk_0x48; // ?SceKernelIntrMgr data VA?
+
| [[SceAppMgr]] || 1 || 0x400000 || _sceAppMgrSystemResume
void *unk_0x4C;
+
|-
void *unk_0x50;
+
| [[SceAudio]] || 0 || 0x1000 || Something
int unk_0x54;  // ex:0
+
|-
void *unk_0x58;
+
| [[SceAudio]] || 0 || 0x400F || Something
int unk_0x5C;  // ex:0
+
|-
int unk_0x60;  // ex:0
+
| [[SceAudio]] || 0 || 0x102 || Something
int unk_0x64;  // ex:0
+
|-
int unk_0x68;  // Used by Tzs SceSblSmsched
+
| [[SceAudio]] || 1 || 0x1000F || Something
// end ModulePrivate
+
|-
 
+
| [[SceAudioin]] (SceAudioIn) || 0 || 0x102 || Something
SceKblParam *kbl_param;
+
|-
SceKernelBootArgs *boot_args;
+
| [[SceAudioin]] (SceAudioIn) || 1 || 0x1000F || Something
SceUInt32 soc_revision;
+
|-
SceUInt32 pervasive_unk_dword; // read from physical address 0xE3100004 (ScePervasiveMisc + 0x4). ex: 0
+
| [[SceAVConfig]] || 0 || 0x200 || Something
SceUInt32 kermit_revision;
+
|-
SceUInt32 model_info;
+
| [[SceAVConfig]] || 1 || 0x400000 || Something
SceUInt32 model_capability;
+
|-
 
+
| [[SceAVConfig]] || 1 || 0x1000F || Something
void *longtime5base;
+
|-
 
+
| [[SceAVConfig]] || 1 || 0x100001 || Something
int cpu_intr_for_init_callback;
+
|-
SceUInt32 init_callback_registable_base_number;
+
| [[SceBt]] || 0 || 0x401 || Something
struct {
+
|-
int (* callback)(int a1, void *args);
+
| [[SceBt]] || 0 || 0x402 || Something
void *args;
+
|-
} init_callback_slot[SCE_SYSROOT_INIT_CALLBACK_MAX_FUNC][SCE_SYSROOT_INIT_CALLBACK_MAX_SLOT];
+
| [[SceBt]] || 1 || 0x100001 || Something
 
+
|-
int (* sceKernelSysrootThreadMgrStartAfterProcess)(void);
+
| [[SceBt]] || 1 || 0x100002 || Something
int (* sceKernelSysrootIofilemgrStart)(void);
+
|-
void *unk_0x2DC;
+
| [[SceCamera]] || 0 || 0x401 || Something
void *unk_0x2E0;
+
|-
char *sysroot_names[9];
+
| [[SceCamera]] || 0 || 0x402 || Something
SceUID this_object_uid;
+
|-
void *unk_0x30C; // size is 0x2C-bytes, maybe guid entry heap object
+
| [[SceCamera]] || 0 || 0x400 || Something
void *unk_0x310;
+
|-
void *unk_0x314;
+
| [[SceCamera]] || 1 || 0x100000 || Something
void *VBAR;
+
|-
void *MVBAR;
+
| [[SceCamera]] || 1 || 0x100002 || Something
void *unk_0x320;
+
|-
void **unk_func_0x324; // SceSblACMgr
+
| [[SceClockgen]] || 1 || 0x10000 || Something
#if SCE_SDK_VERSION >= 0x3630000
+
|-
int (* sceKernelSysrootAppMgrFunction1)(int a1, int a2, int a3, int a4, int a5, int a6); // SceAppMgr + 0x2795, SceAppMgrForDriver_324DD34E
+
| [[SceClockgen]] || 1 || 0x100000 || Something
SceUID (* sceKernelSysrootGetShellPid)(void);
+
|-
// offset: 0x330
+
| [[SceCodec]] || 0 || 0x200 || Something
#endif
+
|-
SceUID (* sceKernelSysrootGetThreadId)(void);
+
| [[SceCodec]] || 1 || 0x10000 || Something
int (* sceKernelSysrootThreadFunction3)(void);                  // Temp name, SceKernelThreadMgr + 0xC79, SceThreadmgrForDriver_91382762
+
|-
SceUID (* sceKernelSysrootGetProcessId)(void);
+
| [[SceCodecEngineWrapper]] || 0 || 0x401 || Something
int (* sceKernelSysrootThreadFunction4)(void);                  // Temp name, SceKernelThreadMgr + 0x8D1
+
|-
int (* sceKernelSysrootThreadFunction5)(void);                  // Temp name, SceKernelThreadMgr + 0x8ED
+
| [[SceCodecEngineWrapper]] || 0 || 0x200 || Something
#if SCE_SDK_VERSION >= 0x3630000
+
|-
// offset: 0x344
+
| [[SceCodecEngineWrapper]] || 0 || 0x402 || Something
SceSysrootModulemgrHandlers *modulemgr_handlers;
+
|-
#endif
+
| [[SceCodecEngineWrapper]] || 0 || 0x400E || Something
int (* sceKernelSysrootThreadFunction6)(void);                  // Temp name, SceKernelThreadMgr + 0x90D
+
|-
void (* sceKernelSysrootThreadFunction7)(void);                  // Temp name, SceKernelThreadMgr + 0xE69
+
| [[SceCodecEngineWrapper]] || 1 || 0x1000E || Something
int (* sceKernelSysrootThreadFunction8)(void);                  // Temp name, SceKernelThreadMgr + 0x8BD, SceThreadmgrForDriver_332E127C
+
|-
int (* sceKernelSysrootThreadFunction9)(int a1, int a2, int a3); // Temp name, SceKernelThreadMgr + 0x2541
+
| [[SceCodecEngineWrapper]] || 1 || 0x100000 || Something
int (* sceKernelSysrootThreadFunction10)(int a1);                // Temp name, SceKernelThreadMgr + 0xC99, SceThreadmgrForDriver_AB977C72
+
|-
#if SCE_SDK_VERSION < 0x3630000
+
| [[SceCompat]] || 1 || 0x100000 || Something
// offset: 0x350
+
|-
SceSysrootModulemgrHandlers *modulemgr_handlers;
+
| [[SceCtrl]] || 0 || 0x402 || Something
#endif
+
|-
int unk_0x354; // ex:0xFFFFFFFF
+
| [[SceCtrl]] || 0 || 0x400C || Something
SceSysrootForKernel_D29BCA77_struct *processmgr_callbacks_1;
+
|-
SceSysrootForDriver_733C243E_struct *processmgr_callbacks_2;
+
| [[SceCtrl]] || 0 || 0x400 || Something
#if SCE_SDK_VERSION < 0x3630000
+
|-
void *unk_func_0x360; // SceDeci4pSDfMgr
+
| [[SceCtrl]] || 1 || 0x1000C || Something
int (* sceKernelSysrootGetBusError)(void *dst, SceSize len);
+
|-
int (* sceKernelSysrootAppMgrFunction1)(int a1, int a2, int a3, int a4, int a5, int a6); // SceAppMgr + 0x2795, SceAppMgrForDriver_324DD34E
+
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x102 || Something
SceUID (* sceKernelSysrootGetShellPid)(void);
+
|-
#endif
+
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x4003 || Something
#if SCE_SDK_VERSION >= 0x3630000
+
|-
// offset: 0x368
+
| [[SceDbgSdio]] (SceDbgSdio1) || 1 || 0x10003 || Something
int (* sceKernelSysrootGetLicenseStatusForDriver)(void); // SceSblPostSsMgr + 0x9001, sceSblLicMgrGetLicenseStatusForDriver
+
|-
int (* unk_func_0x384)(void); // SceSblPostSsMgr + 0xB005, SceSblPostSsMgrForDriver_22599675, get flag
+
| [[SceDeci4pDbgp]] || 0 || 0x102 || Something
int (* unk_func_0x388)(void); // SceSblPostSsMgr + 0xB011, SceSblPostSsMgrForDriver_9B49C249, get flag
+
|-
void *unk_func_0x360; // SceDeci4pSDfMgr
+
| [[SceDeci4pDbgp]] || 0 || 0x4000 || Something
int (* sceKernelSysrootGetBusError)(void *dst, SceSize len);
+
|-
// offset: 0x37C
+
| [[SceDeci4pDbgp]] || 1 || 0x10000 || Something
#endif
+
|-
void *unk_func_0x370; // SceCoredump + 0x7109, SceCoredumpForDriver_A7D214A7
+
| [[SceDeci4pDbgp]] || 1 || 0x400000 || Something
void *unk_func_0x374; // SceCoredump + 0x74F9, SceCoredumpForDriver_340856F7
+
|-
void *unk_func_0x378; // SceCoredump + 0x132ED, SceCoredumpForDriver_EF20949F
+
| [[SceDeci4pDfMgr]] || 0 || 0x200 || Something
int unk_0x37C; // ex:0
+
|-
#if SCE_SDK_VERSION < 0x3630000
+
| [[SceDeci4pDfMgr]] || 0 || 0x100 || Something
// offset: 0x380
+
|-
int (* sceKernelSysrootGetLicenseStatusForDriver)(void); // SceSblPostSsMgr + 0x9001, sceSblLicMgrGetLicenseStatusForDriver
+
| [[SceDeci4pDfMgr]] || 0 || 0x401 || Something
int (* unk_func_0x384)(void); // SceSblPostSsMgr + 0xB005, SceSblPostSsMgrForDriver_22599675, get flag
+
|-
int (* unk_func_0x388)(void); // SceSblPostSsMgr + 0xB011, SceSblPostSsMgrForDriver_9B49C249, get flag
+
| [[SceDeci4pDfMgr]] || 0 || 0x402 || Something
#endif
+
|-
void *unk_func_0x38C;        // SceSblPostSsMgr + 0xB4ED, SceSblPostSsMgrForDriver_D8A2D465
+
| [[SceDeci4pDfMgr]] || 1 || 0x100002 || Something
int (* sceKernelSysrootGetTrilithiumBufferForDriver)(void); // SceSblPostSsMgr + 0xB111, sceSblUtMgrGetTrilithiumBufferForDriver
+
|-
int (* sceKernelSysrootHasNpTestFlag)(void);
+
| [[SceDeci4pDfMgr]] || 1 || 0x400000 || Something
void *unk_func_0x398; // SceSblUpdateMgr + 0x8B01
+
|-
int (* sceKernelSysrootLedSetMode)(int led, int mode, void *led_configuration);
+
| [[SceDeci4pDfMgr]] || 1 || 0x100000 || Something
SceKernelVARange *cached_sm_info_ranges; // See SceCachedSecureModuleInfo
+
|-
int (* sceKernelSysrootGetFunctionNameByNIDForKernel)(SceNID funcnid, const char **name); // sceNidsymtblGetFunctionNameByNIDForDriver
+
| [[SceDeci4pDrfp]] || 0 || any || Something
void *SceSysrootForKernel_47724459_func; // SceDeci4pSDfMgr or SceDeci4pDfMgr, set by SceSysrootForDriver_C5EAF5F7
+
|-
void *unk_0x3AC; // SceDeci4pSDfMgr
+
| [[SceDeci4pDtracep]] || 0 || 0x200 || Something
void *unk_struct_0x3B0; // SceDeci4pDfMgr
+
|-
void *unk_0x3B4; // SceDeci4pTsmp
+
| [[SceDeci4pDtracep]] || 0 || 0x1000 || Something
void *unk_0x3B8; // SceDeci4pTsmp
+
|-
void *unk_0x3BC; // SceDeci4pTsmp
+
| [[SceDeci4pDtracep]] || 1 || 0x40000 || Something
void *unk_0x3C0; // SceDeci4pTsmp
+
|-
SceSysrootProcessHandler *process_handler; // maybe for SceDeci4p
+
| [[SceDeci4pDtracep]] || 1 || 0x100002 || Something
SceSysrootDbgpHandler    *dbgp_handler;    // maybe for SceDeci4p
+
|-
void *unk_func_0x3CC; // SceNetPs + 0x3E51, SceNetPsForDriver_83A12CCC
+
| [[SceDeci4pSDfCtl]] || 0 || 0x102 || Something
void *unk_func_0x3D0; // SceNetPs + 0x3F4D, SceNetPsForDriver_C000CA8F
+
|-
void *unk_func_0x3D4; // SceDeci4pTmcp
+
| [[SceDisplay]] || 0 || 0x400 || Something
void *unk_func_0x3D8; // SceDeci4pSDbgp
+
|-
void *unk_func_0x3DC; // SceNetPs + 0x3E51, SceNetPsForDriver_83A12CCC
+
| [[SceDisplay]] || 0 || 0x200 || Something
void *unk_func_0x3E0; // SceNetPs + 0x3F4D, SceNetPsForDriver_C000CA8F
+
|-
int (* sceKernelSysrootAppMgrFunction3)(int a1, int a2); // SceAppMgr + 0x9F49
+
| [[SceDisplay]] || 0 || 0x402 || Something
int (* sceKernelSysrootAppMgrFunction4)(int a1, int a2); // SceAppMgr + 0x9EED
+
|-
int (* sceKernelSysrootAppMgrFunction5)(int a1); // SceAppMgr + 0x9D31
+
| [[SceDisplay]] || 0 || 0x400A || Something
void *unk_func_0x3F0; // ScePfsMgr + 0x1, ScePfsMgrForKernel_4C148288
+
|-
void *unk_struct_0x3F4; // SceBt
+
| [[SceDisplay]] || 1 || 0x40000 || Something
void *unk_struct_0x3F8; // SceHid
+
|-
void *unk_struct_0x3FC; // SceDeci4pSDbgp
+
| [[SceDisplay]] || 1 || 0x100000 || Something
void *unk_data_0x400; // SceDeci4pSDbgp
+
|-
void *unk_func_0x404; // SceDeci4pSDfCtl
+
| [[SceDisplay]] || 1 || 0x1000A || Something
void *unk_func_0x408; // SceDeci4pSDfCtl
+
|-
void *unk_func_0x40C; // ScePamgr
+
| [[SceError]] || 0 || 0x200 || Something
void *unk_func_0x410; // ScePamgr
+
|-
void *unk_func_0x414; // ScePamgr
+
| [[SceError]] || 1 || 0x100001 || Something
SceUInt32 magic2;
+
|-
} SceUIDSysrootObject;
+
| [[SceGps]] (SceGpsd) || 0 || 0x102 || Something
 
+
|-
typedef SceUIDSysrootObject SceSysroot;
+
| [[SceGps]] (SceGpsd) || 1 || 0x400000 || Something
 
+
|-
typedef struct SceSysrootForKernel_D29BCA77_struct_0940 { // size is 0x48 on FWs 0.940-0.945
+
| [[SceGpuEs4]] (SceGpu) || 0 || 0x402 || Something
SceSize size; // Size of this structure
+
|-
void *get_dword_from_offset_0x184;
+
| [[SceGpuEs4]] (SceGpu) || 0 || 0x4005 || Something
void *get_dword_from_offset_0x188;
+
|-
void *get_dword_from_offset_0x18C;
+
| [[SceGpuEs4]] (SceGpu) || 0 || 0x400 || Something
void *sceKernelAllocCurrentProcessHeap;
+
|-
void *sceKernelFreeCurrentProcessHeap;
+
| [[SceGpuEs4]] (SceGpu) || 1 || 0x10005 || Something
void *sceKernelAllocRemoteProcessHeap;
+
|-
void *sceKernelFreeRemoteProcessHeap;
+
| [[SceHdmi]] || 0 || 0x400 || Something
void *sceKernelGetProcessLibdb;
+
|-
void *sceKernelSetProcessLibdb;
+
| [[SceHdmi]] || 0 || 0x402 || Something
void *ProcessmgrModuleStart2;
+
|-
void *sceKernelRegisterKPLS;
+
| [[SceHdmi]] || 1 || 0x100000 || Something
void *sceKernelGetRemoteKPLS;
+
|-
void *sceKernelGetCurrentKPLS;
+
| [[SceHid]] || 0 || 0x402 || Something
void *sceKernelInhibitProcEvent;
+
|-
        void *sceKernelPermitProcEvent;
+
| [[SceHid]] || 0 || 0x4000 || Something
void *sceKernelInsertProcessThreadList;
+
|-
void *sceKernelDeleteProcessThreadList;
+
| [[SceHid]] || 0 || 0x200 || Something
} SceSysrootForKernel_D29BCA77_struct_0940;
+
|-
 
+
| [[SceHid]] || 1 || 0x100000 || Something
typedef struct SceSysrootForKernel_D29BCA77_struct_0990 { // size is 0x44 on FWs 0.990-0.995
+
|-
SceSize size; // Size of this structure
+
| [[SceHpremote]] (SceHprm) || 1 || 0x1000C || Something
void *get_dword_from_offset_0x184;
+
|-
void *get_dword_from_offset_0x188;
+
| [[SceIdStorage]] || ? || ? || Something
void *get_dword_from_offset_0x18C;
+
|-
void *sceKernelAllocCurrentProcessHeap;
+
| [[SceIofilemgr]] || 0 || 0x401 || vfs_sync_all_mount_point
void *sceKernelFreeCurrentProcessHeap;
+
|-
void *sceKernelAllocRemoteProcessHeap;
+
| [[SceIofilemgr]] || 0 || 0x402 || Something
void *sceKernelFreeRemoteProcessHeap;
+
|-
void *sceKernelGetProcessLibdb;
+
| [[SceIofilemgr]] || 0 || 0x400 || Something
void *sceKernelSetProcessLibdb;
+
|-
void *ProcessmgrModuleStart2;
+
| [[SceIofilemgr]] || 1 || 0x10000 || Something
void *sceKernelRegisterKPLS;
+
|-
void *sceKernelGetRemoteKPLS;
+
| [[SceIofilemgr]] || 1 || 0x400000 || Something
void *sceKernelGetCurrentKPLS;
+
|-
void *sceKernelInhibitProcEvent;
+
| [[SceLowio]] (ScePervasive) || 1 || 0x10000 || Something
void *sceKernelPermitProcEvent;
+
|-
void *sceKernelGetProcessHeapID;
+
| [[SceLowio]] (SceGpio) || 1 || 0x10002 || Something
} SceSysrootForKernel_D29BCA77_struct_0990;
+
|-
 
+
| [[SceLowio]] (ScePwm) || 0 || 0x4002 || Something
// Size of SceSysrootForKernel_D29BCA77_struct for FWs 0.996.070-0.996.090 is 0x58
+
|-
// Size of SceSysrootForKernel_D29BCA77_struct for FWs 1.000.071-1.500.151 (maybe higher) is 0x5C
+
| [[SceLowio]] (ScePwm) || 1 || 0x10002 || Something
typedef struct SceSysrootForKernel_D29BCA77_struct_3600 { // size is 0x44 on FWs 3.60-3.65,
+
|-
SceSize size; // Size of this structure
+
| [[SceLowio]] (SceI2c) || 0 || 0x402 || Something
        //a1 might be process object (needs to be checked)
+
|-
SceInt32 (*get_dword_from_offset_0x1E4)(void* a1);
+
| [[SceLowio]] (SceI2c) || 0 || 0x4002 || Something
SceInt32 (*get_dword_from_offset_0x1E8)(void* a1);
+
|-
SceInt32 (*get_dword_from_offset_0x1EC)(void* a1);
+
| [[SceLowio]] (SceI2c) || 1 || 0x10002 || Something
        //Allocations are made from current process' "Unique" heap
+
|-
        //Fails if TPIDRPRW is NULL
+
| [[SceLowio]] (SceDsi) || 0 || 0x4004 || Something
void *(*sceKernelAllocCurrentProcessHeap)(SceSize size, SceKernelHeapMemoryOpt* opt);
+
|-
SceInt32 (*sceKernelFreeCurrentProcessHeap)(void* ptr);
+
| [[SceLowio]] (SceIftu) || 0 || 0x4005 || Something
 
+
|-
//Allocations are made from specified process' "Unique" heap
+
| [[SceLowio]] (SceIftu) || 1 || 0x10005 || Something
        //KERNEL_PID (0x10005), DummyProcessGame (0x10013) and DummyProcessSystem (0x10015) are accepted as PIDs
+
|-
        void *(*sceKernelAllocRemoteProcessHeap)(ScePID process, SceSize size, SceKernelHeapMemoryOpt* opt);
+
| [[SceLowio]] (SceCsi) || 0 || 0x4004 || Something
SceInt32 (*sceKernelFreeRemoteProcessHeap)(ScePID process, void* ptr);
+
|-
 
+
| [[SceLowio]] (SceCsi) || 1 || 0x10004 || Something
SceInt32 (*ProcessmgrModuleStart2)();
+
|-
 
+
| [[SceMotionDev]] (SceMotion) || 0 || 0x401 || Something
        //Equivalent to sceKernelWaitSema(processObject->EventLock_sema, 1, NULL);
+
|-
SceInt32 (*sceKernelInhibitProcEvent)(ScePID process);
+
| [[SceMotionDev]] (SceMotion) || 0 || 0x402 || Something
//Equivalent to sceKernelSignalSema(processObject->EventLock_sema, 1);
+
|-
        SceInt32 *(sceKernelPermitProcEvent)(ScePID process);
+
| [[SceMotionDev]] (SceMotion) || 0 || 0x400 || Something
 
+
|-
        //info_type = 0 -> returns processObject->unk0x424
+
| [[SceMotionDev]] (SceMotion) || 1 || 0x100000 || Something
        //info_type = 1 -> returns processObject->MaxFHCount
+
|-
        //other values -> return 0
+
| [[SceMotionDev]] (SceMotion) || 1 || 0x100002 || Something
        SceInt32 (*query_some_process_info)(ScePID process, SceUInt32 info_type);
+
|-
 
+
| [[SceMsif]] || 0 || 0x400C || Something
SceInt32 (*sceKernelRegisterKPLS)(char* name, SceSize size);
+
|-
        //Fails if TPIDRPRW is NULL
+
| [[SceMsif]] || 1 || 0x1000C || Something
        void *(*sceKernelGetCurrentKPLS)(SceUInt32 key);
+
|-
SceInt32 (*sceKernelGetRemoteKPLS)(ScePID process, SceUInt32 key, ScePVoid* pKPLS, SceBool create);
+
| [[SceNetPs]] || 0 || 0x200 || Something
 
+
|-
SceInt32 (*sceKernelProcessDebugSuspend)(ScePID process, int status);
+
| [[SceNetPs]] || 1 || 0x400000 || Something
        //Retreived from process object's SceLoadProcessParam
+
|-
        SceInt32 (*sceKernelGetCompiledSdkVersionByPid)(ScePID process, SceUInt32* pSdkVersion);
+
| [[SceOled]] || 0 || 0x402 || Something
} SceSysrootForKernel_D29BCA77_struct;
+
|-
 
+
| [[SceOled]] || 0 || 0x4003 || Something
typedef struct SceSysrootForKernel_733C243E_struct_old { // size is 0x28 on FW 0.990
+
|-
SceSize size; // Size of this structure
+
| [[SceOled]] || 1 || 0x10003 || Something
SceUID (* sceKernelGetCurrentProcessId)(void);
+
|-
int (* sceKernelGetEntryHeap)(SceUID pid, int *pHeap);
+
| [[ScePfsMgr]] || 0 || 0x402 || Something
int (* SceProcessmgrForKernel_C77C2085)(SceUID pid);
+
|-
int (* sceKernelPIDtoAddressSpaceCB)(SceUID pid, void **pASCb);
+
| [[ScePower]] (ScePower) || 0 || 0x402 || Something
int (* FUN_81000000)(int* dst, int *src);
+
|-
int (* sceKernelGetProcessType)(SceUID pid);
+
| [[ScePower]] (ScePower) || 0 || 0x4009 || Something
int (* sceKernelGetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
+
|-
int (* sceKernelSetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
+
| [[ScePower]] (ScePower) || 0 || 0x400 || Something
int (* sceKernelGetProcessAccessLevel)(SceUID pid);
+
|-
} SceSysrootForKernel_733C243E_struct_old;
+
| [[ScePower]] (ScePower) || 1 || 0x10009 || Something
 
+
|-
typedef struct SceSysrootForKernel_733C243E_struct { // size is 0x20 on FWs 3.60-3.65
+
| [[ScePower]] (ScePower) || 1 || 0x100000 || Something
SceSize size; // Size of this structure
+
|-
SceInt32 (* funcGetProcessEntryHeapObject)(SceUID pid, void **entry_heap_obj);
+
| [[ScePower]] (SceLed) || 0 || 0x102 || Something
SceUID (* get_process_address_space_UID)(SceUID pid);
+
|-
SceInt32 (* funcGetProcessAddressSpaceCB)(SceUID pid, void **address_space_obj);
+
| [[ScePower]] (SceLed) || 0 || 0x400A || Something
SceInt32 (* sceKernelGetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
+
|-
SceInt32 (* sceKernelGetProcessTitleId)(SceUID pid, char *title_id, SceSize len); //Copies processObject->list_entry->process_name to title_id - maybe this should be GetProcessName?
+
| [[ScePower]] (SceLed) || 1 || 0x100000 || Something
SceInt32 (* sceKernelIncProcessResource)(SceUInt32 type); // Type must be < 0x3
+
|-
SceInt32 (* sceKernelDecProcessResource)(SceUInt32 type); //^
+
| [[SceRtc]] || 0 || 0x200 || Something
} SceSysrootForKernel_733C243E_struct;
+
|-
 
+
| [[SceRtc]] || 0 || 0x1000 || Something
typedef struct SceSysrootProcessHandler { // size is 0x28 on FW 3.60
+
|-
SceSize size;                                                      // Size of this structure
+
| [[SceRtc]] || 1 || 0x1000A || Something
void (* unk_4)(SceUID pid, SceUID modid, int flags, uint64_t time); //!< process start shared modules
+
|-
void (* exit)(SceUID pid, int flags, uint64_t time);
+
| [[SceRtc]] || 1 || 0x100000 || Something
void (* kill)(SceUID pid);                                          //!< by SceShell
+
|-
void (* unk_10)(SceUID pid, SceUID modid, uint64_t time);
+
| [[SceSblSmSchedProxy]] || 1 || 0x10004 || Something
void (* unk_14)(SceUID pid, SceUID modid, uint64_t time);
+
|-
void (* unk_18)(SceUID pid, SceUID modid, uint64_t time);
+
| [[SceSblSsMgr]] || 0 || 0x200 || Something
int (* on_process_created)(int a1, int a2, int a3);                //!< called when process is created
+
|-
void (* unk_20)(SceUID pid, SceUID modid, uint64_t time);
+
| [[SceSblSsMgr]] || 1 || 0x100000 || Something
void (* unk_24)(SceUID pid, SceUID modid, int flags, uint64_t time);
+
|-
} SceSysrootProcessHandler;
+
| [[SceSblUpdateMgr]] || 0 || any || Something
 
+
|-
typedef struct SceSysrootModulemgrHandlers { // size is 0x18 on FW 3.60
+
| [[SceSdif]] || 0 || 0x400C || Something
SceSize size; // Size of this structure
+
|-
int (* sceKernelGetProcessSyscallInfo)(SceUID pid, const void *module_addr, void *pInfo); // SceKernelModulemgr + 0x20D0 on FW 3.60
+
| [[SceSdif]] || 1 || 0x10009 || resume eMMC with sdif reset
int (* handler_2)(SceUID pid, const void *module_addr); // SceKernelModulemgr + 0x1F44 on FW 3.60
+
|-
void *sceKernelGetModuleInfoMinByAddr;
+
| [[SceSdif]] || 1 || 0x1000C || resume eMMC
void *sceKernelBacktraceInternal;
+
|-
void *sceKernelPrintBacktrace;
+
| [[SceSdstor]] || 0 || 0x200 || Umount 0x900/0xA00/0x100. invalidate gc sdpart str.
} SceSysrootModulemgrHandlers;
+
|-
 
+
| [[SceSdstor]] || 0 || 0x400D || disable intr/power off for gc/rm
// ScePamgrCallbacks
+
|-
typedef struct SceSysrootForDriver_C94C76FA_struct { // size is 0x10 on FW 3.60
+
| [[SceSdstor]] || 1 || 0x100000 || Something
SceSize size; // Size of this structure
+
|-
int (__cdecl *unk_func_4)();
+
| [[SceSdstor]] || 1 || 0x400000 || Something
int (__cdecl *unk_func_8)();
+
|-
int (__cdecl *unk_func_C)();
+
| [[SceSyscon]] || 0 || 0x4006 || Something
} SceSysrootForDriver_C94C76FA_struct;
+
|-
 
+
| [[SceSyscon]] || 0 || 0x402 || Something
typedef struct SceKernelFreeMemorySizeInfo {
+
|-
SceSize size;
+
| [[SceSyscon]] || 0 || 0x400F || Something
SceSize sizeMain;
+
|-
SceSize sizeCdram;
+
| [[SceSyscon]] || 1 || 0x10006 || Something
SceSize sizePhycont;
+
|-
} SceKernelFreeMemorySizeInfo;
+
| [[SceSyscon]] || 1 || 0x1000F || Something
 
+
|-
//Constructor/destructor of a class item
+
| [[SceTouch]] || 0 || 0x401 || Something
//For classes inheriting another class, the constructors are called from the parent to the child
+
|-
//while the destructors are called in reverse order (same as C++ cstr/dstr)
+
| [[SceTouch]] || 0 || 0x400 || Something
typedef int (*SceClassCallback)(void *item);
+
|-
 
+
| [[SceTouch]] || 0 || 0x402 || Something
//What is this?
+
|-
typedef struct SceClass_0990 { // size is 0x10 on FW 0.990
+
| [[SceTouch]] || 0 || 0x400C || Something
SceSize size; // Size of this structure
+
|-
struct SceClass *next;
+
| [[SceTouch]] || 1 || 0x1000C || Something
struct SceClass *root; // to confirm
+
|-
struct SceClass *prev; // to confirm
+
| [[SceTouch]] || 1 || 0x100000 || Something
} SceClass_0990;
+
|-
 
+
| [[SceUsbEtherRtl]] || 0 || 0x401 || Something
// How is this structure wrong? So where is the valid SceClass for FW 3.60? See below
+
|-
typedef struct SceClass_wrong { // size is 0x2C on FW 3.60
+
| [[SceUsbEtherRtl]] || 0 || 0x402 || Something
struct SceClass *next; // 0x00
+
|-
struct SceClass *root; // 0x04
+
| [[SceUsbEtherRtl]] || 0 || 0x400 || Something
struct SceClass *prev; // 0x08
+
|-
const char *name; // 0x0C
+
| [[SceUsbEtherSmsc]] || 0 || 0x401 || Something
struct SceClass *uid_class; // 0x10
+
|-
unsigned int attr; // 0x14
+
| [[SceUsbEtherSmsc]] || 0 || 0x402 || Something
unsigned short item_size; // 0x18
+
|-
unsigned short unk_1A; // 0x1A
+
| [[SceUsbEtherSmsc]] || 0 || 0x400 || Something
SceClassCallback constructor; // 0x1C
+
|-
SceClassCallback destructor; // 0x20
+
| [[SceUsbServ]] || 0 || 0x200 || Something
const unsigned int magic; // 0x24 - 0xABCE9DA5
+
|-
SceClassCallback allocMethod; // 0x28
+
| [[SceUsbServ]] || 0 || 0x400E || Something
} SceClass_wrong;
+
|-
 
+
| [[SceUsbServ]] || 1 || 0x100000 || Something
typedef struct SceClass { //size is 0x28 on FW 0.990, 0x2C on FW 3.60
+
|-
    struct SceClass *next;            //0x00 - pUserdata of SceKernelObject, pointer to next class in DLink list
+
| [[SceUsbServ]] || 1 || 0x100002 || Something
    struct SceClass *pClass;          //0x04 - pClass of SceKernelObject, always points to SceUIDClass class
+
|-
    struct SceClass *prev;            //0x08 - Pointer to previous class in DLink list
+
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x401 || Something
    const char* name;                  //0x0C - Pointer to class' name
+
|-
    struct SceClass *parent;          //0x10 - Pointer to parent class
+
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x400 || Something
    SceUInt32 attr;                    //0x14 - Usage unknown (bottom 8 bits = some counter?)
+
|-
    SceUInt16 itemSize;                //0x18 - Size of items of this class
+
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100000 || Something
    SceUInt16 itemAllocationSize;      //0x1A - Size of allocations used for items of this class (rounded up itemSize)
+
|-
#if (/* firmware 3.60 */)
+
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100002 || Something
    SceUInt32 unk0x1C;                //0x1C
+
|}
#endif
 
    SceClassCallback constructor;      //0x1C / 0x20 - called after item is allocated
 
    SceClassCallback destructor;      //0x20 / 0x24 - called before item is freed
 
    SceUInt32 magic;                  //0x24 / 0x28 - magic value 0xABCD9DA5
 
    //NOTE: additional data can be stored here for use by the class
 
} SceClass;
 
 
 
// Aka SceObjectBase in vitasdk
 
typedef struct SceKernelObject {
 
void *pObject;
 
SceClass *pClass;
 
uintptr_t data[];
 
} SceKernelObject;
 
 
 
// Here is a wrong structure for SceKernelObject, but this could be a SceUIDXxxClass structure
 
typedef struct SceKernelObject_wrong { // size is at least 0x24
 
void *pObject; // 0x0
 
SceClass pClass; // 0x4
 
uint32_t type; // 0x8
 
uint16_t lcount; // 0xC
 
uint16_t ucount; // 0xE
 
uint16_t ccount; // 0x10
 
uint32_t unk_12; // 0x12 - 0x54c3
 
uint16_t unk_16; // 0x16
 
uint32_t uid; // 0x18
 
char unk_1C[4]; // 0x1C
 
const char *name; // 0x20
 
uint32_t indexRaw; // 0x24
 
} SceKernelObject_wrong;
 
 
 
/** @name Memory types that can be specified with sceKernelAllocMemBlock
 
*/
 
/*@{*/
 
 
 
/**
 
* @brief User readable / writable LPDDR2 memory
 
*
 
* This type secures a readable / writable memory block in user space.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RW 0x0c20d060U
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
 
 
 
/**
 
* @brief User readable / writable LPDDR2 non-cache memory
 
*
 
* A type to secure a memory block on LPDDR2 that is readable
 
* and writable in user space and does not use cache.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW 0x0c208060U
 
 
 
/**
 
* @brief An alias for SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW
 
 
 
/**
 
* @brief An alias for SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA_UNCACHE SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
 
 
 
/**
 
* @brief User readable and writable LPDDR2 physical continuous memory
 
*
 
* A type that can read and write in user space and secure
 
* memory blocks from the physical continuous memory area.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW 0x0c80d060U
 
 
 
/**
 
* @brief User-readable and non-cacheable physical continuous memory
 
*
 
* A type for on-cacheable read / write in user space and to secure
 
* memory blocks from the physical continuous memory area.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW 0x0d808060U
 
 
 
/**
 
* @brief User-readable and non-cacheable CDRAM memory
 
*
 
* A type that can be read and written in user space and secures
 
* memory blocks on CDRAM.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW 0x09408060U
 
 
 
/**
 
* @brief An alias for SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW.
 
*/
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RWDATA SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
 
 
 
/*@}*/
 
 
 
/**
 
* @brief A type representing a memory type
 
*
 
* A type that represents the type of memory block secured by sceKernelAllocMemBlock.
 
*/
 
typedef int SceKernelMemoryType;
 
 
 
/**
 
* @brief Memory block information structure
 
*
 
* A structure for obtaining information about memory blocks. Size is 0x14 bytes on FW 0.990.
 
*/
 
typedef struct SceKernelMemBlockInfo0990 {
 
SceSize size; /**< Size of the structure itself */
 
void *mappedBase; /**< Map base address */
 
SceSize mappedSize; /**< Mapped size */
 
SceKernelMemoryType memoryType; /**< Memory type */
 
SceUInt32 access; /**< Access right */
 
} SceKernelMemBlockInfo0990;
 
 
 
/**
 
* @brief Memory block information structure
 
*
 
* A structure for obtaining information about memory blocks. Size is 0x18 bytes on FWs 0.996+.
 
*/
 
typedef struct SceKernelMemBlockInfo {
 
SceSize size; /**< Size of the structure itself */
 
void *mappedBase; /**< Map base address */
 
SceSize mappedSize; /**< Mapped size */
 
SceKernelMemoryType memoryType; /**< Memory type */
 
SceUInt32 access; /**< Access right */
 
SceKernelMemBlockType type; /**< Memory block type */
 
} SceKernelMemBlockInfo;
 
 
 
typedef struct SceKernelMemBlockInfoExDetails {
 
SceKernelMemBlockType type;
 
SceUID memblk_uid;
 
const char *name;
 
void *mappedBase;
 
SceSize mappedSize;
 
SceSize memblock_some_size_or_alignment;
 
int extraLow;
 
int extraHigh;
 
int unk20;
 
SceUID unk24; // ex: 0x10045, maybe some pid
 
SceKernelObject *SceUIDPhyMemPartClass_obj;
 
} SceKernelMemBlockInfoExDetails;
 
 
 
typedef struct SceKernelMemBlockInfoEx { // size is 0xAC on FW 0.990, 0xB8 on FW 3.60
 
SceSize size; // Size of this structure
 
SceKernelMemBlockInfoExDetails details;
 
SceSize unk30; // paddr num
 
SceSize unk34; // paddr size num?
 
void *paddr_list[0x10];
 
SceSize size_list[0x10];
 
} SceKernelMemBlockInfoEx;
 
 
 
typedef struct SceKernelMemBlockInfoSimple { // size is 0x24 on FW 0.990
 
SceSize size; // Size of this structure
 
SceKernelMemBlockType type;
 
SceUID uid;
 
char *name; // "SceNULL" by default
 
char unk_0x10[0x14];
 
} SceKernelMemBlockInfoSimple;
 
 
 
/*----- memory access permission -----*/
 
 
 
/**
 
* @brief readable memory
 
*/
 
#define SCE_KERNEL_MEMORY_ACCESS_R 0x04U
 
 
 
/**
 
* @brief writable memory
 
*/
 
#define SCE_KERNEL_MEMORY_ACCESS_W 0x02U
 
 
 
/**
 
* @brief executable memory (kernel only)
 
*/
 
#define SCE_KERNEL_MEMORY_ACCESS_X 0x01U
 
 
 
/*----- memory type -----*/
 
 
 
/**
 
* @brief uncache normal memory
 
*/
 
#define SCE_KERNEL_MEMORY_TYPE_NORMAL_NC 0x80
 
 
 
/**
 
* @brief cache normal memory
 
*/
 
#define SCE_KERNEL_MEMORY_TYPE_NORMAL 0xD0
 
  
/**
+
== SceSysmemForKernel ==
* Optional parameter of sceKernelAllocMemBlock for FWs <=0.940.
 
*/
 
typedef struct SceKernelAllocMemBlockOpt0940 { // size is 0x14 on FW 0.940-0.990
 
SceSize size; /**< Size of this structure */
 
SceUInt32 attr; /**< Attributes field */
 
SceSize alignment; /**< Specify alignment.
 
SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT must be set for the attr member. */
 
SceUID uidBaseBlock; /**< Base memory block UID */
 
const char *strBaseBlockName; /**< Base memory block UID name */
 
} SceKernelAllocMemBlockOpt0940;
 
  
/**
+
=== SceSysmemForKernel_A7D44B50 ===
* Option parameter of sceKernelAllocMemBlock
+
{| class="wikitable"
*/
+
|-
typedef struct SceKernelAllocMemBlockOpt { // size is 0x14/0x38/0x3C/0x40 on FW 3.60
+
! Version !! NID
/**
+
|-
* Size of this structure
+
| 0.931.010-1.692.000 || 0xA7D44B50
*/
+
|-
SceSize size;
+
| 1.800.071-3.740.011 || not present
 +
|}
  
/**
+
A guessed name is sceKernelSetSysmemFuncForKernel.
* Attributes field
 
*/
 
SceUInt32 attr;
 
  
/**
+
Used by [[SceKernelSSProxy]]'s module_start to register a function that just calls [[SMC]] 0x10E (BusErrorClear).
* Specify alignment.
 
* SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT must be set for the attr member.
 
*/
 
SceSize alignment;
 
  
/**
+
The registered function is used internally by [[#sceKernelPhysicalMemReadForKernel]] and [[#sceKernelPhysicalMemWriteForKernel]].
* reserved
 
*/
 
SceUInt32 uidBaseBlock;
 
  
/**
+
<source lang="C">int SceSysmemForKernel_A7D44B50(void* pBusErrorClearFunc);</source>
* reserved2
 
*/
 
const char *strBaseBlockName;
 
  
#if 0
+
=== sceKernelSysmemModuleStartAfterProcessmgrForKernel ===
/**
+
{| class="wikitable"
* mapped base address [out]
+
|-
*/
+
! Version !! NID
void *mappedBase;
+
|-
 +
| 3.600.011-3.610.011 || 0xE7938BFB
 +
|-
 +
| 3.630.011-3.740.011 || 0x4E74DA48
 +
|}
  
/**
+
Temp name was sceKernelInitProcessMemoryForKernel.
* mapped size [out]
 
*/
 
SceSize mappedSize;
 
  
/**
+
Used by [[SceProcessmgr]].
* memory type [out]
 
*/
 
SceKernelMemoryType memoryType;
 
  
SceUInt32 access;
+
<source lang="C">int sceKernelSysmemModuleStartAfterProcessmgrForKernel(void);</source>
#endif
 
} SceKernelAllocMemBlockOpt;
 
  
/**
+
=== sceKernelSysmemCleanerForKernel ===
* Option parameter of kernel sceKernelAllocMemBlock on old FWs (as seen on FWs 0.900-0.990)
+
{| class="wikitable"
*/
+
|-
typedef struct SceKernelAllocMemBlockOptKernel_old { // size is 0x28 on 0.900, 0x2C on 0.910, 0x30 on 0.931-0.990, 0x34 on ?.??
+
! Version !! NID
SceSize size; // Size of this structure
+
|-
SceUInt32 unk_4;
+
| 3.60-3.61 || 0x43E81C4B
SceUInt32 attr;
+
|-
void *vbase;
+
| 3.63 || 0x50980298
void *pbase; // Physical address to use as base
+
|}
SceSize alignment;
 
SceUInt32 extraLow;
 
SceUInt32 extraHigh;
 
void *base;
 
SceUID pid;
 
SceKernelPAVector *pPAV;
 
SceSize roundupUnitSize;
 
SceUInt32 unk_30;
 
} SceKernelAllocMemBlockOptKernel_old;
 
  
/**
+
Only implemented in sysdbg build.
* Option parameter of kernel sceKernelAllocMemBlock on recent FWs (as seen on FW 3.60)
 
*/
 
typedef struct SceKernelAllocMemBlockOptKernel { // size is 0x58 on FW 3.60
 
SceSize size; // Size of this structure
 
SceUInt32 unk_4;                // Never used?
 
SceUInt32 attr;
 
void *vbase;                    // Virtual address memblock should be mapped at
 
void *pbase; // Physical address to use as base
 
SceSize alignment;
 
SceSize extraLow;              // Size of extra area starting from memblock vbase
 
SceSize extraHigh;              // Size of extra area starting "after" memblock - extra area is ?not mapped?
 
SceUID baseMemBlock;            // UID of memblock this one is based on
 
SceUID pid;
 
SceKernelPAVector *pPAV;
 
SceSize roundupUnitSize;        // Used to roundup memblock vsize
 
SceUInt8 domain;
 
SceUInt32 unk_34; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_38; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_3C; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_40; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_44; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_48; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_4C; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_50; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
SceUInt32 unk_54; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
 
} SceKernelAllocMemBlockOptKernel;
 
  
/**
+
<source lang="C">int sceKernelSysmemCleanerForKernel(void);</source>
* Attributes to enable some SceKernelAllocMemBlockOpt members.
 
*/
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_VBASE        0x00000001
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PBASE        0x00000002
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT    0x00000004
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_LOW    0x00000008
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_HIGH  0x00000010
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20        0x00000020
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASE        0x00000040
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PID          0x00000080
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASENAME    0x00000200 // Only available for sceKernelAllocMemBlockForUser - kernel callers must use HAS_BASE instead
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PPAV        0x00001000 // Official name may be HAS_PVECTOR
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ROUNDUP      0x00002000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_DOMAIN      0x00010000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_NOPHYPAGE        0x00020000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_DONT_MAP        0x00040000 // Do not map the memory block in the virtual address space (unofficial name)
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_PHYCONT         0x00200000 // Memory area is physically continuous.
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_UNK              0x00400000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_SHARE_VBASE      0x00800000 // Memblock shares vbase with base block - requires HAS_BASE
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_SHARE_PHYPAGE    0x01000000 // Memblock shares physical pages with base block - requires HAS_BASE
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_ALLOW_PARTIAL_OP 0x04000000 // Allow partial operation. ?What does that mean?
 
  
/**
+
=== sceKernelStrnlenFromUserForKernel ===
* UID is created by sceKernelOpen***()
+
{| class="wikitable"
*/
+
|-
#define SCE_UID_ATTR_OPEN_FLAG 0x00080000U
+
! Version !! NID
 +
|-
 +
| 0.931 || 0x9BC3DEAC
 +
|-
 +
| 3.60 || not present
 +
|}
  
typedef struct SceKernelHeapInfo { // size is 0xCC on FW 0.990
+
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source>
SceSize size; // Size of this structure
 
char unk_4[0xC8];
 
} SceKernelHeapInfo;
 
  
typedef struct SceKernelHeapObject { // size is 0x40 on FW 0.990
+
=== sceKernelPhysicalMemWriteForKernel ===
SceSize size; // Size of this structure
+
{| class="wikitable"
uint32_t unk_4; // 0x4
+
|-
uint32_t unk_8; // 0x8
+
! Version !! NID
uint32_t unk_C; // 0xC
+
|-
uint32_t unk_10; // 0x10
+
| 0.931.010-1.060.031 || 0x4B86A751
uint32_t unk_14; // 0x14
+
|-
uint32_t unk_18; // 0x18
+
| 1.50-3.740.011 || not present
uint32_t unk_1C; // 0x1C
+
|}
uint32_t unk_20; // 0x20
 
uint32_t unk_24; // 0x24
 
uint32_t unk_28; // 0x28
 
uint32_t unk_2C; // 0x2C
 
uint32_t unk_30; // 0x30
 
uint32_t magic; // 0x34 - 0xD2BBDEC3
 
uint32_t unk_38; // 0x38
 
uint32_t unk_3C; // 0x3C
 
uint32_t unk_40; // 0x40
 
} SceKernelHeapObject;
 
  
typedef struct SceKernelFixedHeap { // size is 0x40 on FW 0.990
+
Writes to physical address <code>pdest</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.
SceSize size; // Size of this structure
 
SceClass pClass; // 0x4
 
uint32_t unk_8; // 0x8
 
uint32_t unk_C; // 0xC
 
uint32_t unk_10; // 0x10
 
uint32_t unk_14; // 0x14
 
uint32_t pageSize; // 0x18 - min 0x1000 on FW 0.990
 
uint16_t itemSize; // 0x1C
 
uint16_t unk_1E; // 0x1E
 
uint32_t unk_20; // 0x20
 
uint32_t unk_24; // 0x24
 
uint32_t magic; // 0x28 - 0xFD9B28A6
 
uint16_t sizeInWords; // 0x2C
 
uint16_t index; // 0x2E
 
SceKernelHeapObject *heapObject; // 0x30
 
uint32_t unk_34; // 0x34
 
uint32_t unk_38; // 0x38
 
uint16_t unk_3C; // 0x3C
 
} SceKernelFixedHeap;
 
  
typedef struct SceKernelFixedHeapInfo { // size is 0x14 on FW 0.990
+
<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source>
SceSize size; // Size of this structure
 
uint32_t unk_4; // = (uint32_t)*(uint16_t *)(pObject + 0x1C)
 
uint32_t unk_8; // = *(uint32_t *)(pObject + 0x18) + (uint32_t)*(uint16_t *)(pObject + 0x2E)
 
uint32_t unk_C; // = (uint32_t)*(uint16_t *)(pObject + 0x1E)
 
uint32_t unk_10; // = (uint32_t)*(uint16_t *)(pObject + 0x20)
 
} SceKernelFixedHeapInfo;
 
  
typedef struct SceKernelHeapMemoryOpt { // size is 0x14 on FW 0.990
+
=== sceKernelPhysicalMemReadForKernel ===
SceSize size; // Size of this structure
+
{| class="wikitable"
uint32_t unk_4;
+
|-
SceSize alignment; // ex: 0x10
+
! Version !! NID
uint32_t unk_C; // ex: 0x20
+
|-
uint32_t unk_10;
+
| 0.931.010-1.060.031 || 0xF96E3AE2
} SceKernelHeapMemoryOpt;
+
|-
 +
| 1.50-3.740.011 || not present
 +
|}
  
typedef struct SceKernelHeapCreateOpt { // size is 0x14 on FW 0.931-0.990, 0x1C on FW 3.60
+
Temp name was memcpy_from_paddr.
  SceSize size;
 
union { //<! Union for compatibility
 
SceUInt32 attr;
 
SceUInt32 uselock; //<! Do not use uselock as it will be deprecated. ex: 1, 0x100
 
};
 
  SceUInt32 field_8; // ex: 0x8000
 
  SceUInt32 field_C;
 
  SceUInt32 block_type; // wrongly called memtype in vitasdk
 
  SceUInt32 field_14;
 
  SceUInt32 field_18;
 
} SceKernelHeapCreateOpt;
 
  
typedef struct SceKernelMMUL1Info { // size is 0xC in 0.990 - holds information about a single L1PT entry
+
Dest must be a virtual address and src must be a physical address. Returns copied size on success.
    SceUIntVAddr vbase; // Start of the virtual address range mapped by L1PT entry
 
    SceUIntPAddr pbase; // Start of the physical address held in L1PT - paddr mapped for Section, paddr of L2PT for Page Table entry
 
    SceUInt32 entryType; // 0 = Invalid (fault on access), 1 = Section/Supersection, 2 = Page Table
 
} SceKernelMMUL1Info;
 
  
typedef struct SceAddressSpace { // size is at least 0xEC
+
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source>
char unk[0x14];
 
SceKernelMMUContext *context;
 
char unk[0xC4];
 
void *funcAlloc;
 
char unk2[0x8];
 
uint32_t magic; // always 0x4d95AEEC
 
} SceAddressSpace;
 
  
typedef struct SceKernelAddressSpaceCallback {
+
=== sceKernelCopyFromUser32DomainForKernel ===
SceUInt32 index;
+
{| class="wikitable"
void *(* funcMalloc)(SceUInt32 index, SceSize length);
+
|-
void (* funcFree)(SceUInt32 index, void *ptr);
+
! Version !! NID
// maybe more
+
|-
} SceKernelAddressSpaceCallback;
+
| 0.931 || 0xD530399A
 
+
|-
typedef struct SceKernelAddressSpace { // size is 0x10 bytes on FW 0.940-3.60
+
| 3.60 || not present
SceSize size; // Size of this structure
+
|}
int flag;
 
SceKernelAddressSpaceCallback *data_0x08; // info dst buff ptr, need AddrSpace.flag  = 2;
 
void *TTBR1; // info dst buff ptr, need AddrSpace.flag |= 4;
 
} SceKernelAddressSpace;
 
 
 
typedef struct SceKernelVARange {
 
uint32_t addr;
 
SceSize size;
 
} SceKernelVARange;
 
  
typedef struct SceKernelPARange {
+
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source>
uint32_t addr;
 
SceSize size;
 
} SceKernelPARange;
 
  
typedef struct SceKernelPAVector { // size is 0x14 on FW 0.990
+
=== sceKernelCopyToUserProcTextDomainForKernel ===
SceSize size; // Size of this structure
+
{| class="wikitable"
uint32_t pRanges_size; // Ex: 8
+
|-
uint32_t nDataInVector; // Must be <= 8
+
! Version !! NID
uint32_t count;
+
|-
SceKernelPARange *pRanges;
+
| 0.931-3.60 || 0x30931572
} SceKernelPAVector;
+
|-
 +
| 3.65 || 0x2995558D
 +
|}
  
#define SCE_KERNEL_PROCESS_ID_SELF 0 // Current running process ID is always 0.
+
Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.
  
typedef struct SceKernelPhyMemPart { // size is at least 0x9C on FWs 0.931-3.60
+
Same as [[SceSysmem#sceKernelCopyToUserProcDomainForDriver|sceKernelCopyToUserProcDomain]], but performs a DCache clean after the copy. Use this function if you want to write code in user pages.
uint32_t field_0x0;
 
uint32_t field_0x4;
 
uint32_t some_counter; // always positive
 
uint32_t field_0xc;
 
char *name;
 
int type; // 0x10000 for Lpddr2Main, 0x30000 for Cdram
 
int mutex;
 
SceUIntPAddr pbase;
 
SceSize totalSize;
 
int field_0x24;
 
void *pRoot;
 
uint32_t field_0x2c;
 
uint32_t field_0x30;
 
uint32_t field_0x34;
 
uint32_t field_0x38;
 
int status;
 
int pindex40; //1
 
int field_0x44;
 
int pindex48; //2
 
int field_0x4c;
 
int pindex50; //3
 
int field_0x54;
 
int pindex58; //4
 
int field_0x5c;
 
int pindex60; //5
 
int field_0x64;
 
int pindex68; //6
 
int field_0x6c;
 
int pindex70; //7
 
int field_0x74;
 
int pindex78; //8
 
int field_0x7c;
 
int pindex80; //9
 
SceSize psize2;
 
int min;
 
int pindex8C; //10
 
int field_0x90;
 
SceUInt32 nClient;
 
SceSize freeSize;
 
} SceKernelPhyMemPart;
 
  
typedef struct ScePhyMemPartInfoCore { // size is 0x10 on FWs 0.990-3.60
+
This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.
SceUIntPAddr pbase; // same as SceKernelPhyMemPart field 0x1C
 
SceSize totalSize;
 
SceSize freeSize;
 
SceUInt32 unk_C; // maybe some counter
 
} ScePhyMemPartInfoCore;
 
  
typedef struct SceKernelPhyMemLow { // size is 0x1C on 0.990
+
<source lang="c">SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);</source>
        SceUInt32 mutex;        // For use with sceKernelCpuLockSuspendIntrStoreLR
 
        SceUIntPAddr pbase;    // Base address of range managed by this instance
 
        SceSize psize;          // Size of range managed by this instance
 
        SceSize granularity;    // Minimum size that can be allocated from this instance (i.e. every allocation must be aligned to this)
 
        SceUInt32 unk10;        // Maybe backing memory type? Seen values: 0x20 (CDRAM)
 
        SceSize bitmapSize;    // Size of the bitmap array (in elements)
 
        SceUInt32* bitmap;     // Bitmap used to store which elements managed by this instance are in use - each bit represents a granularity-sized element. Status of element n can be found by looking at (bitmap[n / 32] >> (n % 32)): 0 means free, 1 means occupied 
 
} SceKernelPhyMemLow;
 
  
typedef struct ScePhyMemLowInfo { // size is 0x1C on 0.990
+
=== sceKernelCopyToUserProcTextDomainForDBGPForKernel ===
        SceSize size; // Size of this structure
+
{| class="wikitable"
        SceUIntPAddr pbase;
+
|-
        SceSize psize;
+
! Version !! NID
        SceSize granularity;
+
|-
        SceUInt32 unk10;      // unk14 from PhyMemLow
+
| 3.60-3.61 || 0xE65EA709
        SceSize bmArraySize;  // Size of the array pointed to by bitmap, IN ELEMENTS. Nothing is written here. Pass 0 if bitmap is NULL.
+
|-
        SceUInt32* bitmap;    // Optional - array that receives a copy of the PhyMemLow bitmap
+
| 3.63 || 0x4345C61F
} ScePhyMemLowInfo;
+
|}
  
//for 0.990
+
<source lang="C">int sceKernelCopyToUserProcTextDomainForDBGPForKernel(SceUID pid, void *dst, const void *src, SceSize length);</source>
#define SCE_KERNEL_PHYMEMLOW_TYPE_LPDDR2MAIN 0x10001
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_UNK 0x10002
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_CDRAM 0x20001
 
  
typedef struct kernel_message_ctx { // size is 0x18 on FW 3.60
+
=== sceKernelCopyToUserTextDomainForKernel ===
  SceUInt32 fileHash; //First 4 bytes of SHA1(__FILE__) - e.g. 0x123EC4E8 = "processmgr.c"
+
{| class="wikitable"
  SceUInt32 lineHash; //First 4 bytes of SHA1("%s:%d" % (__FILE__, __LINE__)) - e.g. 0x7D3F4B00 = "boot.c:1868"
+
|-
  SceUInt32 funcHash; //First 4 bytes of SHA1(__FUNC__) - e.g. 0x197C5ED2 = "LedModuleStart"
+
! Version !! NID
  const char *pFile;  //Pointer to file name - can be NULL.
+
|-
  int line; //Line in file - ignored if pFile is NULL.
+
| 3.60 || 0x67BAD5B4
  const char *pFunc; //Pointer to function name - ignored if pFile is NULL.
+
|-
} kernel_message_ctx;
+
| 3.65 || 0x5EF1DAAF
 +
|}
  
/**
+
This is a guessed name. Temp name was sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.
* An enumeration to represent the various logging levels which can be output by sceDbgLoggingHandler().
 
*/
 
typedef enum SceDbgLogLevel {
 
SCE_DBG_LOG_LEVEL_TRACE = 0, /* An extremely verbose logging level, mostly useful for internal developers. */
 
SCE_DBG_LOG_LEVEL_DEBUG,    /* A diagnostic logging level. */
 
SCE_DBG_LOG_LEVEL_INFO,      /* An informational logging level. */
 
SCE_DBG_LOG_LEVEL_WARNING,  /* A logging level that gives warnings of situations detrimental to proper execution. */
 
SCE_DBG_LOG_LEVEL_ERROR,    /* A logging level that will report erroneous conditions in execution. */
 
SCE_DBG_NUM_LOG_LEVELS      /* The number of logging levels available. */
 
} SceDbgLogLevel;
 
  
/*
+
Similar to [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]], but performed in the current address space.
Target Manager (Communication Processor) Logging levels.
 
These levels can be set using psp2ctrl set-logging-level <level>.
 
LOG_LEVEL_NONE (0)
 
LOG_LEVEL_ERROR (1)
 
LOG_LEVEL_WARNING (2)
 
LOG_LEVEL_SERVICE (3)
 
LOG_LEVEL_INFO (4)
 
LOG_LEVEL_INTERNAL (5)
 
LOG_LEVEL_MAX (6)
 
*/
 
  
typedef struct SceSyscallInfo { // size is 0x3C on FW 3.60
+
In FW 3.60, [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]] calls this function to perform the copy after changing address space.
SceSize size; // Size of this structure
 
SceUInt32 moduleFingerprint;
 
SceUInt32 maybeModuleAttr;
 
char moduleName[0x20];
 
char *libName;
 
SceUInt32 maybeLibAttr;
 
SceUInt32 libVer;
 
SceUInt32 libNid;
 
} SceSyscallInfo;
 
  
typedef struct SceSyscallFrame { // size is at least 0x5C on FW 3.60
+
<source lang="c">SceInt32 sceKernelCopyToUserTextDomainForKernel(void *dst, const void *src, SceSize len);</source>
SceUInt32 r0; // 0x00
 
SceUInt32 r1; // 0x04
 
SceUInt32 r2; // 0x08
 
SceUInt32 r3; // 0x0C
 
SceUInt32 r4; // 0x10
 
SceUInt32 r5; // 0x14
 
SceUInt32 r6; // 0x18
 
SceUInt32 r7; // 0x1C
 
SceUInt32 r8; // 0x20
 
SceUInt32 r9; // 0x24
 
SceUInt32 r10; // 0x28
 
SceUInt32 r11; // 0x2C
 
SceUInt32 r12; // 0x30
 
SceUInt32 unk_34; // 0x34
 
void *entry; // 0x38
 
SceUInt32 unk_3C; // 0x3C
 
SceUInt32 resultType; // 0x40, 0-3
 
int unk_44[3]; // 0x44
 
SceUInt32 SP; // 0x50
 
SceUInt32 LR; // 0x54
 
SceUInt32 PC; // 0x58
 
} SceSyscallFrame;
 
  
// process
+
=== sceKernelCopyToUserDomainForKernel ===
typedef struct SceKernelDebugEventLog1 { // size is 0x1C
+
{| class="wikitable"
int data_0x40;
+
|-
SceUID pid;
+
! Version !! NID
int budget_type;
+
|-
int data_0x4C;    // 0xA
+
| 0.931.010 || Not present
char titleid[0xC];
+
|-
} __attribute__((packed)) SceKernelDebugEventLog1;
+
| 3.60-3.61 || 0xA6F95838
 +
|-
 +
| 3.63 || 0x499A9FFF
 +
|}
  
// Related to network
+
This is a guessed name. Temp name was sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.
typedef struct SceKernelDebugEventLog2 { // size is 0x4
 
int data_0x40;    // 0 or 0x80412118?
 
} __attribute__((packed)) SceKernelDebugEventLog2;
 
  
// Related to network
+
Similar to [[SceSysmem#sceKernelCopyToUserTextDomainForKernel|sceKernelCopyToUserTextDomain]], but doesn't perform any DCache clean.
typedef struct SceKernelDebugEventLog3 { // size is 0x54
 
int data_0x40;    // 0?
 
char ip1[0x10];
 
char ip2[0x10];
 
char ip3[0x10];
 
char ip4[0x10];
 
char ip5[0x10];
 
} __attribute__((packed)) SceKernelDebugEventLog3;
 
  
typedef struct SceKernelDebugEventLog {
+
Uses the same DACR, 0x15450FC3, for the copy.
SceSize size;
 
int data_0x04;    // 0xA, titleid size?
 
char titleid[0xC];
 
int flags;
 
SceUID ppid;
 
SceUID data_0x1C; // thid?
 
int rsvd[4];
 
SceUInt64 time;
 
int data_0x38;
 
SceSize item_size;
 
union {
 
SceKernelDebugEventLog1 type1;
 
SceKernelDebugEventLog2 type2;
 
SceKernelDebugEventLog3 type3;
 
};
 
} __attribute__((packed)) SceKernelDebugEventLog;
 
  
typedef SceVoid(*SceKernelSysrootVeneziaRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);
+
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source>
  
typedef SceVoid(*SceKernelSysrootVipRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);
+
=== sceKernelRegisterClassForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990 || 0x11761B77
 +
|-
 +
| 3.60 || not present
 +
|}
  
// This is a guessed name
+
=== sceKernelFindClassByNameForKernel ===
typedef SceUInt32 SceKernelMemoryRefPerm;
+
{| class="wikitable"
#define SCE_KERNEL_MEMORY_REF_PERM_0x10 0x10
+
|-
#define SCE_KERNEL_MEMORY_REF_PERM_0x20 0x20
+
! Version !! NID
 
+
|-
typedef struct SceKernelModulePrivate9 { // size is 0xAC-bytes on 3.60
+
| 3.60 || 0x62989905
SceClass SceUIDModuleClass;
+
|-
SceClass SceUIDLibraryClass;
+
| 3.65 || 0x7D87F706
SceClass SceUIDLibStubClass;
+
|}
SceKernelProcessModuleInfo ProcModuleInfo;
 
SceUID ScePsp2BootConfig_modid;
 
} SceKernelModulePrivate9;
 
</source>
 
  
=== GetPhyMemPartIndex ===
+
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **ppClass);</source>
  
<source lang="C">
+
=== sceKernelGetUIDHeapClassForKernel ===
uint GetPhyMemPartIndex(uint param_1) {
+
{| class="wikitable"
  uint cpuId;
+
|-
 
+
! Version !! NID
  if (param_1 == 0xea0d050) goto LAB_81009494;
+
|-
  if (param_1 < 0xea0d051) {
+
| 3.60-3.61 || 0x4CCA935D
    if (param_1 == 0x620d004) {
+
|-
      return 6;
+
| 3.63 || 0x7C878E94
    }
+
|}
    if (param_1 < 0x620d005) {
 
      if (param_1 != 0x3b0d060) {
 
        if (param_1 < 0x3b0d061) {
 
          if (param_1 != 0x3a0d060) {
 
            if (param_1 < 0x3a0d061) {
 
              if (param_1 == 0x3a0d040) goto LAB_81009494;
 
              if (param_1 == 0x3a0d050) {
 
                return 10;
 
              }
 
            }
 
            else {
 
              if (param_1 == 0x3b0d040) goto LAB_81009494;
 
              if (param_1 == 0x3b0d050) {
 
                return 0xb;
 
              }
 
            }
 
            goto LAB_81009402;
 
          }
 
        }
 
        else {
 
          if (param_1 != 0x3f0d060) {
 
            if (param_1 < 0x3f0d061) {
 
              if ((param_1 == 0x3f0d040) || (param_1 == 0x3f0d050)) goto LAB_81009494;
 
            }
 
            else {
 
              if (param_1 == 0x6208004) {
 
                return 6;
 
              }
 
              if (param_1 == 0x6208006) {
 
                return 6;
 
              }
 
            }
 
            goto LAB_81009402;
 
          }
 
        }
 
      }
 
LAB_81009494:
 
      return (param_1 << 8) >> 0x1c;
 
    }
 
    if (param_1 == 0xc208060) {
 
      return 0xb;
 
    }
 
    if (param_1 < 0xc208061) {
 
      if (param_1 == 0x9408060) {
 
        return 0xc;
 
      }
 
      if (param_1 < 0x9408061) {
 
        if (param_1 == 0x620d006) {
 
          return 6;
 
        }
 
        if (param_1 == 0x9404060) {
 
          return 0xc;
 
        }
 
      }
 
      else {
 
        if (param_1 == 0xb100860) {
 
          return 1;
 
        }
 
        if (param_1 == 0xc200860) {
 
          return 0xb;
 
        }
 
      }
 
    }
 
    else {
 
      if (param_1 == 0xea08040) goto LAB_81009494;
 
      if (param_1 < 0xea08041) {
 
        if (param_1 == 0xc20d050) {
 
          return 0xb;
 
        }
 
        if (param_1 == 0xc20d060) {
 
          return 0xb;
 
        }
 
      }
 
      else {
 
        if (param_1 == 0xea08060) goto LAB_81009494;
 
        if (param_1 == 0xea0d040) {
 
          return 10;
 
        }
 
      }
 
    }
 
  }
 
  else {
 
    if (param_1 == 0x20108004) {
 
      return 1;
 
    }
 
    if (param_1 < 0x20108005) {
 
      if (param_1 == 0x1020d006) {
 
        return 6;
 
      }
 
      if (param_1 < 0x1020d007) {
 
        if (param_1 == 0x10208004) {
 
          return 6;
 
        }
 
        if (param_1 < 0x10208005) {
 
          if (param_1 == 0xea0d060) goto LAB_81009494;
 
          if (param_1 == 0x10200806) {
 
            return 6;
 
          }
 
        }
 
        else {
 
          if (param_1 == 0x10208006) {
 
            return 6;
 
          }
 
          if (param_1 == 0x1020d004) {
 
            return 6;
 
          }
 
        }
 
      }
 
      else {
 
        if (param_1 == 0x20100206) {
 
          return 1;
 
        }
 
        if (param_1 < 0x20100207) {
 
          if (param_1 == 0x1050d006) {
 
            return 5;
 
          }
 
          if (param_1 == 0x20100204) {
 
            return 1;
 
          }
 
        }
 
        else {
 
          if (param_1 == 0x20100804) {
 
            return 1;
 
          }
 
          if (param_1 == 0x20100806) {
 
            return 1;
 
          }
 
        }
 
      }
 
    }
 
    else {
 
      if (param_1 == 0x60208006) {
 
        return 6;
 
      }
 
      if (param_1 < 0x60208007) {
 
        if (param_1 == 0x40404006) {
 
          return 0xc;
 
        }
 
        if (param_1 < 0x40404007) {
 
          if (param_1 == 0x20108006) {
 
            return 1;
 
          }
 
          if (param_1 == 0x2010d006) {
 
            return 1;
 
          }
 
        }
 
        else {
 
          if (param_1 == 0x40408006) {
 
            return 0xc;
 
          }
 
          if (param_1 == 0x60208004) {
 
            return 6;
 
          }
 
        }
 
      }
 
      else {
 
        if (param_1 == 0x6050d006) goto LAB_81009494;
 
        if (param_1 < 0x6050d007) {
 
          if (param_1 == 0x6020d004) {
 
            return 6;
 
          }
 
          if (param_1 == 0x6020d006) {
 
            return 6;
 
          }
 
        }
 
        else {
 
          if (0x70f0d003 < param_1) {
 
            if (param_1 < 0x70f0d007) goto LAB_81009494;
 
            if (param_1 == 0xa0408006) {
 
              return 0xc;
 
            }
 
          }
 
        }
 
      }
 
    }
 
  }
 
LAB_81009402:
 
  cpuId = sceKernelCpuIdForDriver();
 
  sceKernelPrintfLevelForDriver
 
            (1,
 
            "%d:address_space.c:%s:Warning:Using SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX for0x%08x\n"
 
            , cpuId, "GetPhyMemPartIndex", param_1);
 
  return 6;
 
}
 
</source>
 
  
== Memory Block Type ==
+
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source>
 
 
The <code>type</code> parameter indicates what kind of memory to allocate. Here is a mapping of <code>type</code> flags to ARM MMU flags. Higher bits are used for other options including where to allocate from. Not all flag values are valid, there is a table of valid types in the kernel. You cannot, for example, allocate RWX memory.
 
 
 
All memtype list for 3.60
 
 
 
<source lang="C">
 
// For usermode
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_L1WBWA_RW    (0x09404060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_R            (0x09408040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW          (0x09408060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0C200860_RW    (0x0C200860)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_R            (0x0C20D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RW            (0x0C20D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_NC_RW        (0x0C208060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_GAME_RW      (0x0C50D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW    (0x0C80D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW (0x0D808060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_CDIALIG_RW    (0x0CA0D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_CDIALIG_NC_RW (0x0CA08060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RW      (0x0CF0D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_NC_RW    (0x0CF08060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_R          (0x0E20D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW        (0x0E20D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_R      (0x0E208040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_RW      (0x0E208060)
 
 
 
// For kernel
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_R      (0x0320D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RX    (0x0320D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RW    (0x0320D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_R    (0x0390D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RX  (0x0390D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RW  (0x0390D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_R  (0x03A0D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RX  (0x03A0D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RW  (0x03A0D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_R      (0x03F0D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RX    (0x03F0D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RW    (0x03F0D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_R            (0x08F0D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_RX            (0x08F0D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_RW            (0x08F0D060)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_UNK_RW        (0x08F0D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RX            (0x0C20D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_R    (0x0C80D040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_R  (0x0D808040)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RX      (0x0CF0D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX        (0x0E20D050)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0720D006_RW    (0x0720D006) /* SCE_KERNEL_ERROR_ILLEGAL_PARTITION_INDEX */
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100240_R    (0x0B100240)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100260_RW    (0x0B100260)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100840_R    (0x0B100840)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100860_RW    (0x0B100860)
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_SO_RW        (0x10200206)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_DEVICE_RW    (0x10200806)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_L1WBWA_RW    (0x10204006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_R          (0x10208004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_RW        (0x10208006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_R            (0x1020D004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RX            (0x1020D005)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RW            (0x1020D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_R    (0x1080D004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_RW    (0x1080D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_R  (0x30808004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_RW (0x30808006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_GAME_RW      (0x1050D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_R    (0x10A0D004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_RW    (0x10A0D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_NC_RW  (0x10C08006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW      (0x10C0D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_R            (0x10F0D004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RX            (0x10F0D005)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RW            (0x10F0D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_R          (0x10F08004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW        (0x10F08006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_R      (0x1220D004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_RW    (0x1220D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_NC_R  (0x13208004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_NC_RW  (0x13208006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R            (0x20100204)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW          (0x20100206)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_R              (0x20100804)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW              (0x20100806)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R            (0x20108004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RW          (0x20108006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW    (0x40404006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW          (0x40408006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R          (0x60208004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW          (0x60208006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R              (0x6020D004)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW            (0x6020D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW        (0x6050D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_GAME_RW        (0xC050D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW        (0xC0F0D006)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_UNK_11208006_NC_RW (0x11208006) // from ScePhyMemPartKD to SceKernelRootUncacheGpuGame
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_UNK_60208014_NC_R  (0x60208014)
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_UNK_60208016_NC_RW (0x60208016)
 
</source>
 
 
 
Note
 
 
 
The only commonly available memtypes are those that are publicly available.
 
 
 
sceKernelAllocMemblockInternal uses a list to translate it into an internal memtype.
 
 
 
So we can't create memtype with any bits and use that's.
 
 
 
=== memtype bit value ===
 
  
 +
=== sceKernelGetUIDMemBlockClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Mask !! Value !! Description
+
! Version !! NID
 
|-
 
|-
| 0xF000000 || N/A || Partition index.
+
| 3.60-3.61 || 0xAF729575
 
|-
 
|-
| 0xF00000 || N/A || Src [[Memory_budget|ScePhyMemPart]].
+
| 3.63 || 0x86681B64
 +
|}
 +
 
 +
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</source>
 +
 
 +
=== sceKernelGetUIDDLinkClassForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
| 0x10000 || 0x10000 || Global. <code>nG</code> bit NOT set
+
! Version !! NID
 
|-
 
|-
| 0xFF00 || 0x800 || <code>B</code> bit set. Sharable device memory.
+
| 0.990-3.610.011 || 0xC105604E
 
|-
 
|-
| 0xFF00 || 0x2000 || <code>TEX[2]</code> and <code>TEX[0]</code> bit set. Outer cache Write-back, Write-Allocate. Inner cache non-cachable.
+
| 3.630.011-3.740.011 || 0xE4193EB6
 +
|}
 +
 
 +
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source>
 +
 
 +
=== sceKernelGetUIDAddressSpaceClassForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
| 0xFF00 || 0x4000 || <code>TEX[2]</code> and <code>B</code> bit set. Outer cache non-cachable. Inner cache Write-back, Write-Allocate
+
! Version !! NID
 
|-
 
|-
| 0xFF00 || 0x8000 || <code>TEX[0]</code> bit set. <code>S</code> bit unset. Outer and inner non-cachable. Not sharable.
+
| 3.60-3.61 || 0xAF180A3F
 
|-
 
|-
| 0xFF00 || 0xD000 || <code>TEX[0]</code> bit set. <code>C,B</code> bits set. Outer and inner Write-back, Write-Allocate.
+
| 3.63 || 0x99D3BF76
 +
|}
 +
 
 +
This is a guessed name.
 +
 
 +
<source lang="C">SceClass *sceKernelGetUIDAddressSpaceClassForKernel(void);</source>
 +
 
 +
=== sceKernelGetUIDPartitionClassForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
| 0xFF || 0x4 || <code>AP[2:0] = 5</code>, <code>XN=1</code>. Privileged RO, User NA.
+
! Version !! NID
 
|-
 
|-
| 0xFF || 0x5 || <code>AP[2:0] = 5</code>. Privileged RX, User NA.
+
| 3.60-3.61 || 0x2791F109
 
|-
 
|-
| 0xFF || 0x6 || <code>AP[2:0] = 1</code>, <code>XN=1</code>. Privileged RW, User NA.
+
| 3.63 || 0x5C0FC6BE
 +
|}
 +
 
 +
This is a guessed name.
 +
 
 +
<source lang="C">SceClass *sceKernelGetUIDPartitionClassForKernel(void);</source>
 +
 
 +
=== sceUIDDLinkClassInitForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
| 0xFF || 0x7 || <code>AP[2:0] = 1</code>. Privileged RWX, User NA. (Never used, 3.60 0x80024B01)
+
! Version !! NID
 
|-
 
|-
| 0xFF || 0x50 || <code>AP[2:0] = 7</code>. Privileged RX, User RX.
+
| 3.60-3.61 || 0x21285F40
 
|-
 
|-
| 0xFF || 0x60 || <code>AP[2:0] = 3</code>, <code>XN=1</code>. Privileged RW, User RW.
+
| 3.63 || 0x7CDB7655
|-
 
| 0xFF || 0x40 || <code>AP[2:0] = 7</code>, <code>XN=1</code>. Privileged RO, User RO.
 
 
|}
 
|}
  
 +
Temp name was sceKernelCreateClassForKernel, sceUIDClassInitClassForKernel.
  
 +
Calls [[SceSysmem#sceUIDClassInitClassForDriver|sceUIDClassInitClassForDriver]].
  
This is based internal memtypes.
+
<source lang="C">int sceUIDDLinkClassInitForKernel(SceClass *pClass, const char *name, SceClass *subclass, SceSize itemsize, void *cstr, void *dstr);</source>
  
 +
=== sceUIDClassGetClassInfoAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
! Mask !! Value !! Name
 
 
|-
 
|-
| 0x0F000000 || 0x00000000 || root
+
! Version !! NID
 
|-
 
|-
| 0x0F000000 || 0x01000000 || SceKernelRootUncacheGpuGame
+
| 0.990 || not present
 
|-
 
|-
| 0x0F000000 || 0x02000000 || SceKernelTmpFsGame
+
| 3.60-3.61 || 0xC0BF149E
 
|-
 
|-
| 0x0F000000 || 0x03000000 || SceKernelTmpFsGame
+
| 3.63 || 0x100B4029
 +
|}
 +
 
 +
This is a guessed name (ForDriver function name and NID changed at some point before 1.69). Temp name was sceKernelGetRegisterClassInfoForKernel.
 +
 
 +
<source lang="C">
 +
typedef struct SceClassInfo {
 +
    SceSize size;
 +
    SceClass *pClass;
 +
    SceClass *pSubClass;
 +
    const char *name;
 +
} SceClassInfo;
 +
 
 +
int sceUIDClassGetClassInfoAllForKernel(SceClassInfo *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);
 +
</source>
 +
 
 +
=== sceKernelCreateAddressSpaceForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
| 0x0F000000 || 0x04000000 || SceKernelTool
+
! Version !! NID
 
|-
 
|-
| 0x0F000000 || 0x05000000 || SceKernelRootUncache?
+
| 0.990-3.60 || 0x4A3737F0
 
|-
 
|-
| 0x0F000000 || 0x06000000 || Unknown
+
| 3.65 || 0x8EE89D2C
 +
|}
 +
 
 +
<source lang="C">
 +
// type: 0x10000001 (user AS)
 +
// name: maybe titleid
 +
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelCreateAddressSpaceOpt *pOpt);
 +
</source>
 +
 
 +
=== sceKernelDeleteAddressSpaceForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
| 0x0F000000 || 0x07000000 || SCE_KERNEL_ERROR_ILLEGAL_PARTITION_INDEX
+
! Version !! NID
 
|-
 
|-
| 0x0F000000 || 0x08000000 || SceKernelUserTool
+
| 0.931-3.60 || 0xF2D7FE3A
 
|-
 
|-
| 0x0F000000 || 0x09000000 || SceKernelUserCdram
+
| 3.65 || 0x4A2E421D
 +
|}
 +
 
 +
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>
 +
 
 +
=== sceKernelAddressSpaceSetNameForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
| 0x0F000000 || 0x0A000000 || SceKernelUserShared
+
! Version !! NID
 
|-
 
|-
| 0x0F000000 || 0x0B000000 || SceKernelUserIO
+
| 0.990-1.50 || not present
 
|-
 
|-
| 0x0F000000 || 0x0C000000 || SceKernelUserMain
+
| 3.60 || 0x7BD56D6D
 
|-
 
|-
| 0x0F000000 || 0x0D000000 || SceKernelUserUncache
+
| 3.65 || 0xCEBC4963
|-
 
| 0x0F000000 || 0x0E000000 || SceKernelUserCDialog
 
|-
 
| 0x0F000000 || 0x0F000000 || SceKernelUserCDialogNC
 
 
|}
 
|}
  
=== Available memory types ===
+
Used by [[SceProcessmgr]].
  
See also : [[Memory budget]]
+
<source lang="C">int sceKernelAddressSpaceSetNameForKernel(SceUID guid, const char *name);</source>
  
<source lang="C">
+
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931-3.60 || 0x67955EE9
 +
|-
 +
| 3.65 || 0x7DF07D60
 +
|}
  
Mask value  Description
+
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, SceUInt32 index, SceKernelPhyMemPart *pPhyMemPart);</source>
0x000000FF | memory access.
 
            0x0000000F for kernel
 
            0x000000F0 for user
 
              0 1 1 0
 
              - R W X
 
0x00000F00 | unknown
 
            0x00000100 for unknown
 
            0x00000200 for SO
 
            0x00000400 for unknown
 
            0x00000800 for DEVICE
 
0x0000F000 | cache
 
            0x00002000 for No internal cache only
 
            0x00004000 for No external cache only
 
            0x00008000 for NORMAL_NC (uncache)
 
            0x0000D000 for NORMAL (cache)
 
0x00F00000 | memory partition select
 
            0x00100000 for IO
 
            0x00200000 for NORMAL (kernel:KD, user:GAME)
 
            0x00300000 for maybe unused
 
            0x00400000 for CDRAM
 
            0x00500000 for GAME
 
            0x00800000 for PHYCONT
 
            0x00900000 for SHARED (usermode only)
 
            0x00A00000 for CDIALOG
 
            0x00C00000 for ???
 
            0x00F00000 for TOOL
 
0xFF000000 | memory VA select
 
            0x05000000 for user CDRAM2
 
            0x06000000 for user KTMP
 
            0x09000000 for user CDRAM
 
            0x0C000000 for user normal?
 
            0x0D000000 for user MAIN PHYCONT
 
            0x0E000000 for user CDIALOG
 
            0x10000000 for kernel ROOT
 
            0x20000000 for kernel IO
 
            0x30000000 for kernel PHYCONT
 
            0x40000000 for kernel CDRAM
 
            0x50000000 for kernel CDRAM2
 
            0x60000000 for kernel TMP
 
            0xA0000000 for kernel GPU
 
  
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM2_RW                0x05408060
+
=== sceKernelAddressSpaceCtrSetObjectHeapForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60-3.61 || 0xFC74A355
 +
|-
 +
| 3.63 || 0xFA348CB1
 +
|}
  
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP*****                0x0620D006
+
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931-3.60 || 0x89CE1F31
 +
|-
 +
| 3.65 || 0x36159CF5
 +
|}
  
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW_UNCACHE_EXTERNAL 0x09404060
+
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source>
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RO_UNCACHE          0x09408040
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW_UNCACHE          0x09408060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW                  0x09408060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RWDATA              0x09408060
 
  
SCE_KERNEL_MEMBLOCK_TYPE_USER_DEVICE_RW                0x0C200860
+
=== sceKernelAddressSpaceUnmapForKernel ===
SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW                    0x0C208060
+
{| class="wikitable"
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE                0x0C208060
+
|-
SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA_UNCACHE            0x0C208060
+
! Version !! NID
SCE_KERNEL_MEMBLOCK_TYPE_USER_RO                        0x0C20D040
+
|-
SCE_KERNEL_MEMBLOCK_TYPE_USER_TEXT                      0x0C20D050
+
| 0.931-3.61 || 0xCE72839E
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW                        0x0C20D060
+
|-
SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA                    0x0C20D060
+
| 3.63 || 0x73C38695
SCE_KERNEL_MEMBLOCK_TYPE_USER_GAME_RW                  0x0C50D060
+
|}
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW          0x0C80D060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_UNKNOWN_RW_UNCACHE        0x0CA08060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_UNKNOWN_RW                0x0CA0D060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_UNKNOWN2_RW              0x0CF0D060
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW        0x0D808060
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RO_UNCACHE        0x0E208040
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX_UNCACHE        0x0E208050
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW_UNCACHE        0x0E208060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RO                0x0E20D040
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW                0x0E20D060
 
  
 +
<source lang="C">
 +
# For FW 0.931:
 +
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int a2, void* addr, SceSize size);
 +
# For FW 3.60:
 +
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int a2, int a3, void* addr, SceSize size);
 +
</source>
  
kernel memory types:
+
Example: 0.990 [[SceSysStateMgr]]:
 +
<source lang="C">
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);
 +
</source>
  
/* alloc from ScePhyMemPartKD */
+
Example: 3.60 [[SceSysStateMgr]]:
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_DEVICE_RW          0x10200806
+
<source lang="C">
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);
 +
</source>
  
/* alloc from ScePhyMemPartKD */
+
=== sceKernelAddressSpaceSetProcessForKernel ===
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_SO_RW              0x10200206
+
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990-3.61 || 0x2476B90F
 +
|-
 +
| 3.63 || 0x5E772E19
 +
|}
  
/* alloc from ScePhyMemPartKD */
+
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID address_space, SceUID pid);</source>
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R_UNCACHE          0x10208004
 
  
/* alloc from ScePhyMemPartKD */
+
=== sceKernelAddressSpaceChangeMMUContextForKernel ===
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_UNCACHE        0x10208006
+
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931-3.61 || 0x653B0849
 +
|-
 +
| 3.63 || 0x20D01AFA
 +
|}
  
/* alloc from ScePhyMemPartKD */
+
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R                  0x1020D004
 
  
/* alloc from ScePhyMemPartKD */
+
<source lang="C">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source>
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX                0x1020D005
 
  
/* alloc from ScePhyMemPartKD */
+
=== sceKernelAddressSpaceGetMMUContextForKernel ===
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW                0x1020D006
+
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990 || not present
 +
|-
 +
| 3.10-3.61 || 0x9894B9E1
 +
|-
 +
| 3.63 || 0xA7C91D62
 +
|}
  
/* alloc from ScePhyMemPartGame */
+
This is a guessed name.
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_GAME            0x1050D006
 
  
/* alloc from ScePhyMemPartPhyCont */
+
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID address_space, SceKernelMMUContext **ppCtx);</source>
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_PHYCONT        0x1080D006
 
  
/* alloc from ScePhyMemPartGameCDialog */
+
=== SceSysmemForKernel_FBEF93AA ===
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_CDIALOG        0x10A0D006
+
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931 || not present
 +
|-
 +
| 0.990-3.01 || 0xFBEF93AA
 +
|-
 +
| 3.10-3.74 || not present
 +
|}
  
/* Seems alloc from remaining area */
+
Maybe gets MMU context. Maybe was replaced by [[#sceKernelAddressSpaceGetMMUContextForKernel]].
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_10C0D006        0x10C0D006
 
  
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RO          0x20100204
+
<source lang="C">int SceSysmemForKernel_FBEF93AA(SceUID address_space, void* pOut);</source>
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW          0x20100206
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RO              0x20100804
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW              0x20100806
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RO          0x20108004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RW          0x20108006
 
  
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_PHYCONT_RW_UNCACHE 0x30808006
+
=== sceKernelAddressSpaceGetTimerVbaseForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990 || not present
 +
|-
 +
| 0.996.090-3.610.011 || 0x7D92B2D3
 +
|-
 +
| 3.630.011-3.740.011 || 0xFA1A73DD
 +
|}
  
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW_UNK      0x40404006
+
<source lang="C">int sceKernelAddressSpaceGetTimerVbaseForKernel(SceUID address_space, void **ppBase);</source>
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW          0x40408006
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM2_RW          0x50408006
 
  
/* alloc from ScePhyMemPartKD */
+
=== sceKernelGetAddressSpaceInfoForKernel ===
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R          0x60208004
+
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990.000-3.610.011 || 0x4492421F
 +
|-
 +
| 3.630.011-3.740.011 || 0xC3EF4055
 +
|}
  
/* alloc from ScePhyMemPartKD */
+
This is a guessed name..
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW          0x60208006
 
  
/* alloc from ScePhyMemPartKD */
+
<source lang="C">int sceKernelGetAddressSpaceInfoForKernel(SceUID address_space, SceKernelAddressSpaceInfo *pInfo);</source>
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R              0x6020D004
 
  
/* alloc from ScePhyMemPartKD */
+
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW            0x6020D006
+
{| class="wikitable"
 
+
|-
/* alloc from ScePhyMemPartGame */
+
! Version !! NID
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW        0x6050D006
+
|-
 
+
| 0.931-0.990 || 0x671A3444
code memory types:
+
|-
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L2WBWA: 0x2000
+
| 3.60 || not present
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L1WBWA: 0x4000
+
|}
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_NORMAL_NC: 0x8000
 
 
 
from 0.990
 
/* need check */
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW
 
  
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_SO_RW        0x10200206
+
Gets information about a L1PT entry in the translation table of an address space. Pass the virtual address of the target entry maps as <code>addr</code>.
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_DEVICE_RW    0x10200806
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_R          0x10208004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_RW        0x10208006
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_R            0x1020D004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RX            0x1020D005
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RW            0x1020D006
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_BOOT_IMAGE        0x1020D007
 
  
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_GAME_RW      0x1050D006
+
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source>
  
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R            0x20100204
+
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_R        0x20100804
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_RW      0x20100806
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R            0x20108004
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_R  0x30808004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_RW 0x30808006
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_R    0x3080D004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_RW    0x3080D006
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_R    0x10A0D004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_RW    0x10A0D006
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW        0x10F08004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_R          0x10F08006
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_R            0x10F0D004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RX            0x10F0D005
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RW            0x10F0D006
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R          0x60208004
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW          0x60208006
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R              0x6020D006
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW        0x6050D006
 
 
 
/* need check */
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW        0x60F0D006
 
 
 
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_GPU_CDRAM_RW      0xA0408006
 
</source>
 
 
 
=== Types to reverse ===
 
 
 
from 0.990:
 
<source>
 
CDIALOG:
 
SCE_KERNEL_MEMBLOCK_TYPE_CDIALOG_NC_R
 
 
 
FREE:
 
SCE_KERNEL_MEMBLOCK_TYPE_FREE
 
 
 
KERNEL:
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_GAME_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_SO_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RX
 
 
 
USER:
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_RW
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_SO_RW
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_RW
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_GAME_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RX
 
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RX
 
</source>
 
 
 
== SceSysmemForKernel ==
 
 
 
=== sceKernelStrnlenFromUserForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x9BC3DEAC
+
| 0.931 || 0xCB6E1C80
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source>
+
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID address_space, const void *addr, void *pInfo);</source>
  
=== SceSysmemForKernel_BD33EDDF ===
+
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xBD33EDDF
+
| 0.931-0.990 || 0x1A898F2E
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Gets thread's name. Returns 0 on success.
+
<source lang="C">
 +
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
 +
  SceSize size; // Size of this structure
 +
  char unk[0x4008];
 +
} SceKernelAddressSpaceMMUL1AllInfo;
  
<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source>
+
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID address_space, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source>
  
=== scePUIDGetEntryInfoAllForKernel ===
+
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2770A7D7
+
| 0.931 || 0x1E1AA29B
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int scePUIDGetEntryInfoAllForKernel(int a1, int a2, int a3, int a4, int a5, void *pInfoAll);</source>
+
<source lang="C">
 +
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
 +
  SceSize size; // Size of this structure
 +
  char unk[0x400];
 +
} SceKernelAddressSpaceMMUL2AllInfo;
  
=== sceGUIDGetUIDVectorWeakByClassForKernel ===
+
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID address_space, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source>
 +
 
 +
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x59F577E8
+
| 0.990-3.61 || 0xCC7BB240
 +
|-
 +
| 3.63 || 0x0B5A3E93
 
|}
 
|}
  
<source lang="C">int sceGUIDGetUIDVectorWeakByClassForKernel(int a1, int a2, int a3, int a4, void *pUIDVectorWeak);</source>
+
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>
  
=== scePUIDGetAttrForKernel ===
+
=== sceKernelAddressSpaceVAtoPAForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x86E83C0D
+
| 0.990-3.61 || 0xF2179820
 +
|-
 +
| 3.63 || 0x1BAF8C0B
 
|}
 
|}
  
<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID uid, void *pAttr);</source>
+
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, SceUInt32 mode, void *pVA, void **pPA);</source>
  
=== sceKernelGrowPhyMemPartForKernel ===
+
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x6B3F4102
+
| 0.990-3.61 || 0xF7250E6C
 +
|-
 +
| 3.63 || 0xA541E0CF
 
|}
 
|}
  
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.
+
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID address_space, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
  
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source>
+
=== sceKernelAddressSpaceGetPhyMemPartByIndexForKernel ===
 
 
=== sceKernelGrowPhyMemPartWithFlagsForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0x3F74E45C
 
|-
 
|-
| 3.60 || 0x775AA5E3
+
| 3.63 || 0x47C55DCC
 
|}
 
|}
  
Grows physical memory partition with flags.
+
<source lang="C">int sceKernelAddressSpaceGetPhyMemPartByIndexForKernel(SceUInt32 index, void **result);</source>
 
 
<source lang="C">int sceKernelGrowPhyMemPartWithFlagsForKernel(SceKernelPhyMemPart *pPhyMemPart, int flags, SceSize psize);</source>
 
  
=== sceKernelGetGrownPhyMemPartSizeForKernel ===
+
=== sceKernelAddressSpaceGetPartitionByIndexForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0x210DB518
 
|-
 
|-
| 3.60 || 0x4D809B47
+
| 3.63 || 0x1F84FE44
 
|}
 
|}
  
This is a temp name.
+
This is a guessed name.
  
Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.
+
<source lang="C">SceUIDPartitionObject *sceKernelAddressSpaceGetPartitionByIndexForKernel(void *pAS, int pindex);</source>
  
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source>
+
=== sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel ===
 
 
=== sceKernelAddressSpaceSetProcessForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2476B90F
+
| 3.60-3.61 || 0x46A5CB84
 +
|-
 +
| 3.63 || 0xC3F9607E
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID uid, SceUID pid);</source>
+
<source lang="C">int sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel(SceUID asid, int a2, int a3, int a4);</source>
  
=== sceKernelAddressSpaceChangeMMUContextForKernel ===
+
=== sceKernelCheckAddressSpaceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x653B0849
+
| 3.60-3.61 || 0x8B07BB52
 +
|-
 +
| 3.63 || 0x16A54BFE
 
|}
 
|}
  
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.
+
This is a guessed name.
  
<source lang="C">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source>
+
<source lang="C">int sceKernelCheckAddressSpaceForKernel(void);</source>
  
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===
+
=== sceKernelGetKernelAddressSpaceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x671A3444
+
| 1.500.151-3.610.011 || 0xC38B4D52
 
|-
 
|-
| 3.60 || not present
+
| 3.630.011-3.740.011 || 0x2E5CC243
 
|}
 
|}
  
Get information about a L1PT entry in the translation table of an address space. Pass the vaddress the target entry maps as <code>addr</code>.
+
<source lang="C">void* sceKernelGetKernelAddressSpaceForKernel(void);</source>
  
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source>
+
=== sceKernelCreatePhyMemPartForKernel ===
 
 
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xCB6E1C80
+
| 0.931-3.61 || 0x2E36E0C4
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xA2DFA383
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID uid, const void *addr, void *pInfo);</source>
+
Calls [[#sceKernelCreatePhyMemPartByPbaseForKernel]] with pbase = 0.
 +
 
 +
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart **pPhyMemPart);</source>
  
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===
+
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x1A898F2E
+
| 0.931-3.61 || 0x63D83911
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x5CC56F87
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
+
/*
  SceSize size; // Size of this structure
+
type
  char unk[0x4008];
+
 
} SceKernelAddressSpaceMMUL1AllInfo;
+
ORed values:
 +
0x00002 : Shell
 +
0x00004 : Game
 +
0x00005 : PhyCont
 +
0x00060 : CDialog
 +
0x10000 : Lpddr2Main
 +
0x30000 : Cdram
 +
 
 +
seen values:
 +
0x10002 : ShellLpddr2Main (shared)
 +
0x10004 : GameLpddr2Main
 +
0x10005 : PhyContLpddr2Main
 +
0x10064 : GameCDialogLpddr2Main
 +
 
 +
0x30002 : ShellCdram
 +
0x30004 : GameCdram
 +
*/
  
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID uid, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source>
+
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);
 +
</source>
  
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===
+
=== sceKernelDeletePhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x1E1AA29B
+
| 0.931-3.61 || 0x2AEA9E09
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x3F72B2E7
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
+
 
  SceSize size; // Size of this structure
+
=== sceKernelGetPhyMemPartAllForKernel ===
  char unk[0x400];
 
} SceKernelAddressSpaceMMUL2AllInfo;
 
 
 
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID uid, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source>
 
 
 
=== sceKernelGetPhyPartKernelForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.61 || 0x4D38F861
+
| 0.931-3.61 || 0x2F6F9C2C
 
|-
 
|-
| 3.63-3.65 || 0x0164D817
+
| 3.63 || 0x021053DD
 
|}
 
|}
  
return gpPhyPartKernel;
+
<source lang="C">int sceKernelGetPhyMemPartAllForKernel(SceUInt32 vis_level, SceUID *pVector, SceSize vectorSize, SceUInt32 *ret_num);</source>
 
 
<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source>
 
  
=== sceKernelGetPhyPartToolForKernel ===
+
=== sceKernelGetPhyMemPartInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.61 || 0xF8E95A5A
+
| 0.931-0.990 || 0x67849418
 
|-
 
|-
| 3.63-3.65 || 0x0B1B4ACA
+
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source>
+
<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source>
  
=== SceSysmemForKernel_54E85275 ===
+
=== sceKernelGetPhyMemPartInfoByIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || not present
+
| 0.931-3.61 || 0xF4FA0575
 
|-
 
|-
| 3.60 || 0x54E85275
+
| 3.63 || 0x029F5989
 
|}
 
|}
  
Uses result from [[SceSysmem#sceKernelGetPhyPartToolForKernel]].
+
<source lang="C">
 +
typedef struct SceKernelPhyMemPartInfo { // size is 0x44 on FW 0.931-0.990
 +
  SceSize size;  // Size of this structure
 +
  uint32_t unk_4; // some size or address
 +
  uint32_t unk_8; // some size or address
 +
  char unk1[0xC];
 +
  char *name; // name, maybe pointer or array
 +
  char unk2[0x24];
 +
} SceKernelPhyMemPartInfo;
  
<source lang="C">
+
int sceKernelGetPhyMemPartInfoByIDForKernel(SceUID guid, SceKernelPhyMemPartInfo *pInfo);
// pPhyPartTool comes from sceKernelGetPhyPartToolForKernel
 
// pOut points to a structure of size 0xB0 bytes
 
int SceSysmemForKernel_54E85275(void *pPhyPartTool, void *pOut);
 
 
</source>
 
</source>
  
=== sceKernelGetPhyPartGameForKernel ===
+
=== sceKernelGetPhyMemPartInfoCoreForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60-3.61 || 0xB60568F9
+
| 0.931 || not present
 +
|-
 +
| 0.990-3.61 || 0x3650963F
 
|-
 
|-
| 3.63 || 0x62800A6B
+
| 3.63-3.65 || 0xB9B69700
 
|}
 
|}
  
<source lang="C">void *sceKernelGetPhyPartGameForKernel(void);</source>
+
<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source>
  
=== sceKernelSetPhyPartGameForKernel ===
+
=== sceKernelGetPhyMemPartInfoForDebuggerForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60-3.61 || 0x77876A8D
+
| 0.990-1.50 || not present
 +
|-
 +
| 3.60-3.61 || 0x54E85275
 
|-
 
|-
| 3.63 || 0x3753C584
+
| 3.63 || 0x73E03A38
 
|}
 
|}
  
<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source>
+
info size is 0xB0-bytes.
 +
 
 +
<source lang="C">int sceKernelGetPhyMemPartInfoForDebuggerForKernel(SceKernelPhyMemPart *pPhyMemPart, void *pInfo);</source>
  
=== sceKernelGetPhyMemPartInfoCoreForKernel ===
+
=== sceKernelGrowPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present
+
| 0.990-3.61 || 0x6B3F4102
|-
 
| 0.990-3.61 || 0x3650963F
 
 
|-
 
|-
| 3.63-3.65 || 0xB9B69700
+
| 3.63 || 0x5B434019
 
|}
 
|}
  
<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source>
+
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.
 +
 
 +
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source>
  
=== sceKernelPhyMemLowAllocForKernel ===
+
=== sceKernelGrowPhyMemPartByPbaseForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x5E169FEF
+
| 0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0x775AA5E3
 +
|-
 +
| 3.63 || 0x36FDA794
 
|}
 
|}
  
Allocate a range of physically contiguous "pages" from a PhyMemLow object.
+
Temp name was sceKernelGrowPhyMemPartWithFlagsForKernel.
 +
 
 +
Grows physical memory partition with pbase.
  
<source lang="C">
+
<source lang="C">int sceKernelGrowPhyMemPartByPbaseForKernel(SceKernelPhyMemPart *pPMP, SceUIntPtr pbase, SceSize psize);</source>
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 
// size and alignment must be aligned to the target PHYMEMLOW granularity
 
// On success, *pOut contains the base physical address of a range with the provided size
 
SceInt32 sceKernelPhyMemLowAllocForKernel(SceUInt32 type, SceSize size, SceSize alignment, SceUIntPAddr* pOut);
 
</source>
 
  
=== sceKernelPhyMemLowPA2VAForKernel ===
+
=== sceKernelGetGrownPhyMemPartSizeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x0FD6B756
+
| 0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0x4D809B47
 +
|-
 +
| 3.63 || 0xBC36755F
 
|}
 
|}
  
<source lang="C">
+
This is a guessed name.
// type must be 0x10002
+
 
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
+
Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.
</source>
+
 
 +
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source>
  
=== sceKernelGetPhyMemLowInfoForKernel ===
+
=== SceSysmemForKernel_153A08A0 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x06A4DA6C
+
| 0.990-3.61 || 0x153A08A0
 +
|-
 +
| 3.63 || 0x6D563733
 
|}
 
|}
  
<source lang="C">
+
Adds 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
+
 
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);
+
<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source>
</source>
 
  
=== sceKernelPhyMemLowFreeForKernel ===
+
=== sceKernelAllocPhyPageForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x18B99FDD
+
| 0.990-3.61 || 0xD449547B
 +
|-
 +
| 3.63-3.74 || 0xB488C82E
 
|}
 
|}
  
Free a range of physical "pages" from a PhyMemLow object.
+
Temp name was sceKernelPhyMemPartAllocPhyPageForKernel.
  
<source lang="C">
+
<source lang="C">int sceKernelAllocPhyPageForKernel(void *pPhyMemPart, SceSize size, void **ppPhyPage);</source>
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);
 
</source>
 
  
=== sceGUIDtoClassForKernel ===
+
=== sceKernelResetPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x66636970
+
| 3.60 || 0xEEB85560
 +
|-
 +
| 3.65 || 0x9B7E673F
 
|}
 
|}
  
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID uid);</source>
+
Used by [[SceProcessmgr#sceKernelResetGameBudgetForKernel]].
 +
 
 +
Called with same argument as [[#sceKernelSetPhyPartGameForKernel]].
 +
 
 +
<source lang="C">int sceKernelResetPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
  
=== sceGUIDFindByObjectForKernel ===
+
=== sceKernelShowPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x95ABFDC3
+
| 3.60-3.61 || 0x5C257482
 +
|-
 +
| 3.63-3.65 || 0x8F0B5536
 
|}
 
|}
  
<source lang="C">int sceGUIDFindByObjectForKernel(uint32_t uid_or_flags_or_object);</source>
+
Prints information about a Physical Memory Partition.
  
=== sceKernelRegisterClassForKernel ===
+
Only implemented in sysdbg build.
 +
 
 +
<source lang="C">SceInt32 sceKernelShowPhyMemPartForKernel(SceKernelPhyMemPart *pPMP);</source>
 +
 
 +
=== sceKernelFreePhyPageForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x11761B77
+
| 0.990-3.61 || 0x00BC5B4A
 +
|-
 +
| 3.63 || 0x193A9D2F
 
|}
 
|}
  
=== sceKernelAllocKernelHeapForKernel ===
+
<source lang="C">int sceKernelFreePhyPageForKernel(void *pPhyMemPart, void *pPage);</source>
 +
 
 +
=== sceKernelSetPhyMemPartHookForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x432EADA6
+
| 3.60-3.61 || 0x17F1AA22
 +
|-
 +
| 3.63 || 0x31FA81B5
 
|}
 
|}
  
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
+
This is a guessed name.
 +
 
 +
Only implemented in sysdbg build.
 +
 
 +
<source lang="C">int sceKernelSetPhyMemPartHookForKernel(void *pHook);</source>
  
=== sceUIDCreateEntryHeapForKernel ===
+
=== sceKernelSetPhyMemPartLogCallbackForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x19CAEF35
+
| 3.60-3.61 || 0x72E7BFAC
 
|-
 
|-
| 3.65 || 0x89BEF058
+
| 3.63 || 0x93D0A183
 
|}
 
|}
  
<source lang="C">int sceUIDCreateEntryHeapForKernel(void);</source>
+
This is a guessed name.
  
=== sceUIDObjectSetClassForKernel ===
+
Only implemented in sysdbg build.
 +
 
 +
<source lang="C">int sceKernelSetPhyMemPartLogCallbackForKernel(void *pCallbacks);</source>
 +
 
 +
=== sceKernelAllocKernelHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x226DE851
+
| 0.931-0.990 || 0x432EADA6
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>
+
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
  
=== sceGUIDGetEntryInfoAllForKernel ===
+
=== sceKernelGetHeapInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2A79C51C
+
| 0.931-3.61 || 0x91733EF4
 +
|-
 +
| 3.63 || 0x17DB1A0A
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUID uid, void *vectors, uint32_t nVector, void *out);</source>
+
<source lang="C">
 +
// 0.931-0.990:
 +
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);
  
=== sceGUIDNameForKernel ===
+
// 3.60:
 +
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceUInt32 level, SceKernelHeapInfo *pInfo);
 +
</source>
 +
 
 +
=== sceKernelGetHeapInfoAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x250EE289
+
| 0.990-3.61 || 0x48D87E17
 +
|-
 +
| 3.63 || 0x1380E144
 
|}
 
|}
  
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>
+
This is a guessed namee.
 +
 
 +
<source lang="C">int sceKernelGetHeapInfoAllForKernel(SceUInt32 vis_level, void *pInfo, SceSize infoSize, SceUInt32 *pnInfo);</source>
  
=== sceGUIDRegisterForKernel ===
+
=== sceKernelGetHeapInfoAllChunkForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xAF42AAD5
+
| 0.931-0.990 || 0xAC4C0EB1
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
+
<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);</source>
  
=== sceUIDRegisterForKernel ===
+
=== sceKernelGetHeapInfoByPtrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x59162CD7
+
| 0.931-0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0x68451777
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x80A75187
 
|}
 
|}
  
Calls sceGUIDRegisterForKernel.
+
Temp name was sceKernelGetHeapInfoByPointerForKernel.
  
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
+
<source lang="C">int sceKernelGetHeapInfoByPtrForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>
  
=== SceSysmemForKernel_48D87E17 ===
+
=== sceKernelReallocHeapMemoryForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x48D87E17
+
| 3.60-3.61 || 0xFDC0EA11
 +
|-
 +
| 3.63 || 0x8EE8B917
 
|}
 
|}
  
=== sceKernelGetAddressSpaceMMUContextForKernel ===
+
This is a guessed name.
 +
 
 +
<source lang="C">void *sceKernelReallocHeapMemoryForKernel(SceUID heapid, void *ptr, SceSize size);</source>
 +
 
 +
=== sceKernelHeapEnableModeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xFBEF93AA
+
| 3.60-3.61 || 0xF1433852
 +
|-
 +
| 3.63 || 0x0B36F7F9
 
|}
 
|}
  
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID uid, void *context);</source>
+
This is a guessed name.
  
=== sceKernelAllocSimpleMemBlockForKernel ===
+
<source lang="C">int sceKernelHeapEnableModeForKernel(SceUID heapid, SceUInt32 mode);</source>
 +
 
 +
=== sceKernelHeapDiableModeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF81F4672
+
| 3.60-3.61 || 0x71869119
 +
|-
 +
| 3.63 || 0x6E82D5A0
 
|}
 
|}
  
<source lang="C">
+
This is a guessed name.
typedef struct SceKernelSimpleMemBlock {
 
char unk_0[0x14];
 
void *base;
 
char unk_18[0x14];
 
void *PhyPage;
 
SceSize size;
 
} SceKernelSimpleMemBlock;
 
  
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);
+
<source lang="C">int sceKernelHeapDiableModeForKernel(SceUID heapid, SceUInt32 mode);</source>
</source>
 
  
=== sceKernelGetSimpleMemBlockBaseForKernel ===
+
=== sceKernelHeapMemoryGetAllocateSizeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0A8D14EC
+
| 3.60-3.61 || 0x60735311
 +
|-
 +
| 3.63 || 0xD124075A
 
|}
 
|}
  
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>
+
This is a guessed name.
 +
 
 +
<source lang="C">SceSize sceKernelHeapMemoryGetAllocateSizeForKernel(void *ptr);</source>
  
=== sceKernelGetMemBlockInfoSimpleForKernel ===
+
=== sceKernelPrintHeapSegmentListForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2364A170
+
| 3.60-3.61 || 0x2EE50533
 +
|-
 +
| 3.63 || 0x82059651
 
|}
 
|}
  
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source>
+
Only implemented in sysdbg build.
 +
 
 +
<source lang="C">int sceKernelPrintHeapSegmentListForKernel(SceUID heap_guid);</source>
  
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
+
=== sceKernelGetKernelFixedHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF7250E6C
+
| 0.990.000-3.610.011 || 0x68CB9266
 +
|-
 +
| 3.630.000-3.740.011 || 0x3717C322
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID uid, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
+
Temp name was sceKernelGetFixedHeapBySizeForKernel.
 +
 
 +
<source lang="C">SceUIDFixedHeapObject *sceKernelGetKernelFixedHeapForKernel(SceSize size);</source>
  
=== sceKernelCreatePhyMemPartForKernel ===
+
=== sceKernelGetFixedHeapInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2E36E0C4
+
| 0.990.000-3.610.011 || 0x4FA4A624
 +
|-
 +
| 3.630.000-3.740.011 || 0x890D9160
 
|}
 
|}
  
Calls sceKernelCreatePhyMemPartByPbaseForKernel with pbase = 0.
+
<source lang="C">int sceKernelGetFixedHeapInfoForKernel(SceUID heapid, SceKernelFixedHeapInfo *pInfo);</source>
 +
 
 +
=== sceKernelGetFixedHeapInfoByPointerForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990.000-3.610.011 || 0x219E90FD
 +
|-
 +
| 3.630.000-3.740.011 || 0xA24D2C8D
 +
|}
  
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart *pPhyMemPart);</source>
+
<source lang="C">int sceKernelGetFixedHeapInfoByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, SceKernelFixedHeapInfo *pInfo);</source>
  
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
+
=== sceKernelFixedHeapSetHookForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x63D83911
+
| 0.931.010-1.06 || not present
 +
|-
 +
| 1.500.151-3.610.011 || 0x8C8E2DD1
 +
|-
 +
| 3.630.000-3.740.011 || 0xD4511A52
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelFixedHeapSetHookForKernel(SceUID heapid, void *hookdata);</source>
/*
 
type
 
  
ORed values:
+
=== sceKernelFixedHeapAllocObjectForKernel ===
0x00002 : Shell
+
{| class="wikitable"
0x00004 : Game
+
|-
0x00005 : PhyCont
+
! Version !! NID
0x00060 : CDialog
+
|-
0x10000 : Lpddr2Main
+
| 0.990.000-3.610.011 || 0xC8672A3D
0x30000 : Cdram
+
|-
 +
| 3.630.000-3.740.011 || 0xABA5313C
 +
|}
  
seen values:
+
This is a guessed name.
0x10002 : ShellLpddr2Main (shared)
 
0x10004 : GameLpddr2Main
 
0x10005 : PhyContLpddr2Main
 
0x10064 : GameCDialogLpddr2Main
 
  
0x30002 : ShellCdram
+
<source lang="C">void *sceKernelFixedHeapAllocObjectForKernel(SceUIDFixedHeapObject *pFixedHeap);</source>
0x30004 : GameCdram
 
*/
 
  
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);
+
=== sceKernelFixedHeapFreeObjectForKernel ===
</source>
 
 
 
=== sceKernelDeletePhyMemPartForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2AEA9E09
+
| 0.990.000-3.610.011 || 0x571660AA
 +
|-
 +
| 3.630.000-3.740.011 || 0x93344755
 
|}
 
|}
  
<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
+
This is a guessed name.
 +
 
 +
<source lang="C">int sceKernelFixedHeapFreeObjectForKernel(SceUIDFixedHeapObject *pFixedHeap, void *pObject);</source>
  
=== sceKernelGetPhyMemPartAllForKernel ===
+
=== sceKernelFixedHeapSetHookByPointerForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2F6F9C2C
+
| 0.931.010-2.12 || not present
 +
|-
 +
| 2.500.071-3.610.011 || 0x3EC2345B
 +
|-
 +
| 3.630.000-3.740.011 || 0x811C452B
 
|}
 
|}
  
<source lang="C">int sceKernelGetPhyMemPartAllForKernel(int param_1, int param_2, void *pCountInBuffer);</source>
+
This is a guessed name.
 +
 
 +
<source lang="C">int sceKernelFixedHeapSetHookByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, void *a2);</source>
  
=== sceKernelGetPhyMemPartInfoForKernel ===
+
=== sceKernelNameHeapInsertForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x67849418
+
| 0.990-3.61 || 0x08AB3DAE
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xB628B46B
 
|}
 
|}
  
<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source>
+
<source lang="C">int sceKernelNameHeapInsertForKernel(const char *name, int flags, char **result);</source>
  
=== sceKernelGetPhyMemPartInfoByIDForKernel ===
+
=== sceKernelNameHeapDeleteForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF4FA0575
+
| 0.990-3.61 || 0x9C7B62AB
 +
|-
 +
| 3.63 || 0x634D0D0C
 
|}
 
|}
  
<source lang="C">
+
name max length is 31 characters.
typedef struct SceKernelPhyMemPartInfo { // size is 0x44 on FW 0.931-0.990
 
  SceSize size;  // Size of this structure
 
  uint32_t unk_4; // some size or address
 
  uint32_t unk_8; // some size or address
 
  char unk1[0xC];
 
  char *name; // name, maybe pointer or array
 
  char unk2[0x24];
 
} SceKernelPhyMemPartInfo;
 
  
int sceKernelGetPhyMemPartInfoByIDForKernel(SceUID id, SceKernelPhyMemPartInfo *pInfo);
+
<source lang="C">int sceKernelNameHeapDeleteForKernel(const char *name, SceUInt32 flag);</source>
</source>
 
  
=== sceUIDDeleteEntryHeapForKernel ===
+
=== sceKernelNameHeapLinkForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF0C3FCFC
+
| 3.60-3.61 || 0xEC1293D2
 
|-
 
|-
| 3.65 || 0xF6D09BD9
+
| 3.63 || 0x40965FD1
 
|}
 
|}
  
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID uid);</source>
+
<source lang="C">int sceKernelNameHeapLinkForKernel(const char *name, int flags, void **result);</source>
  
=== sceGUIDUnregisterForKernel ===
+
=== sceKernelNameHeapFindForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xE79BBCF2
+
| 3.60-3.61 || 0xB543A23C
 +
|-
 +
| 3.63 || 0x9F1A9AA6
 
|}
 
|}
  
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>
+
<source lang="C">int sceKernelNameHeapFindForKernel(const char *name, int flags, void **result);</source>
  
=== sceGUIDGetEntryInfoClassForKernel ===
+
=== sceKernelNameHeapGetKeyForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xE90CFD62
+
| 3.60-3.61 || 0x942D15FC
 +
|-
 +
| 3.63 || 0xEB48682E
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID uid, int a2, void *vectors, int nVector, void *pInfoClass);</source>
+
This is a guessed name. Computes MurmurHash. Used to get UID by name.
  
=== sceKernelGetPhyPageResetForKernel ===
+
<source lang="C">SceUInt32 sceKernelNameHeapGetKeyForKernel(const char *key, SceSize len, SceUInt32 seed);</source>
 +
 
 +
=== sceKernelNameHeapGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xEB350679
+
| 0.931.010-0.990 || not present
 +
|-
 +
| 0.996.090-3.610.011 || 0xE443253B
 +
|-
 +
| 3.630.000-3.740.011 || 0x01194C2E
 
|}
 
|}
  
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>
+
<source lang="C">int sceKernelNameHeapGetInfoForKernel(void *pInfo);</source>
  
=== sceKernelFreePhyPageForKernel ===
+
=== sceKernelCreateObjectHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x00BC5B4A
+
| 3.60-3.61 || 0x36830F46
 +
|-
 +
| 3.63 || 0x9D8F3BE8
 
|}
 
|}
  
<source lang="C">int sceKernelFreePhyPageForKernel(uint32_t a1, int pPage, uint32_t a3, uint32_t a4);</source>
+
<source lang="C">int sceKernelCreateObjectHeapForKernel(SceUID pid, SceBool a2, SceFixedHeapHook *pHeapHook, SceKernelObjectHeap **ppObjectHeap);</source>
  
=== sceKernelNameHeapInsertForKernel ===
+
=== sceKernelCreateObjectHeapWithHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x08AB3DAE
+
| 3.60-3.61 || 0x7FD757FE
 +
|-
 +
| 3.63 || 0x660DC18A
 
|}
 
|}
  
<source lang="C">int sceKernelNameHeapInsertForKernel(char *name, uint32_t flags, uint32_t *out);</source>
+
This is a guessed name.
 +
 
 +
<source lang="C">int sceKernelCreateObjectHeapWithHeapForKernel(SceKernelObjectHeap *pObjectHeap, SceUID pid, SceUID heapid);</source>
  
=== sceGUIDKernelCreateForKernel ===
+
=== sceKernelDeleteObjectHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xE6FAD50A
+
| 3.60-3.61 || 0x080BA2F3
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x2F526AB8
 
|}
 
|}
  
Create a GUID with default attribute (0x30000).
+
This is a guessed name.
  
<source lang="C">int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
+
<source lang="C">int sceKernelDeleteObjectHeapForKernel(SceKernelObjectHeap *pObjectHeap);</source>
  
=== sceGUIDKernelCreateWithAttrForKernel ===
+
=== sceKernelObjectHeapAllocForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x53E1FFDE
+
| 3.60-3.61 || 0x7FDF483A
 +
|-
 +
| 3.63 || 0xEBFC8E10
 
|}
 
|}
  
Create a GUID with the specified attribute.
+
This is a guessed name.
  
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);</source>
+
<source lang="C">void *sceKernelObjectHeapAllocForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size);</source>
  
=== sceGUIDKernelCreateWithOptForKernel ===
+
=== sceKernelObjectHeapFreeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-0.995 || not present
+
| 3.60-3.61 || 0x131CEF52
 
|-
 
|-
| 0.996-3.60 || 0xDF0288D7
+
| 3.63 || 0x17D3D4BD
|-
 
| 3.65 || 0xFB6390CE
 
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.
+
This is a guessed name.
  
<source lang="c">
+
<source lang="C">int sceKernelObjectHeapFreeForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size, void *pObject);</source>
typedef struct SceGUIDKernelCreateOpt { // size is at least 0x20 on FW 3.60
 
SceUInt32 attr;
 
SceUInt32 field_4;
 
SceUID uid;
 
SceUID pid;
 
SceUInt32 field_10;
 
SceUInt32 classAttr;
 
SceUInt32 uidAttr;
 
SceUID pid2;
 
} SceGUIDKernelCreateOpt;
 
 
 
SceUID sceGUIDKernelCreateWithOptForKernel(SceClass *pClass, const char *name, SceGUIDKernelCreateOpt *pOpt, SceKernelObject **ppEntry);
 
</source>
 
  
=== scePUIDReleaseObjectForKernel ===
+
=== sceKernelObjectHeapSetResourceLimitForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x3FCA782B
+
| 3.60-3.61 || 0x98E6905B
 +
|-
 +
| 3.63 || 0xDFA1EB57
 
|}
 
|}
  
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID uid);</source>
+
<source lang="C">int sceKernelObjectHeapSetResourceLimitForKernel(int a1, int a2, int a3, int a4, int a5);</source>
  
=== scePUIDGetInfoForKernel ===
+
=== sceKernelObjectHeapSetResourceLimitAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0x5409397F
 
|-
 
|-
| 3.60 || 0x12ED88AE
+
| 3.63 || 0x067F2550
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelObjectHeapSetResourceLimitAllForKernel(SceKernelObjectHeap *pObjectHeap, int a2, int a3);</source>
// pInfo size is 0x14 bytes
 
int scePUIDGetInfoForKernel(SceUID pid, SceUID uid, void *pInfo);
 
</source>
 
  
=== sceGUIDGetEntryForKernel ===
+
=== sceKernelObjectHeapSetSizeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x45F2A59C
+
| 3.60-3.61 || 0x6427560F
 +
|-
 +
| 3.63 || 0xB591E49F
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceGUIDEntry **ppEntry);</source>
+
This is a guessed name.
 +
 
 +
<source lang="C">int sceKernelObjectHeapSetSizeForKernel(SceUInt32 index, SceUInt32 size);</source>
  
=== sceGUIDGetVisibilityLevelForKernel ===
+
=== sceKernelGetObjectHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC69666C3
+
| 3.60-3.61 || 0x3B75CBED
 +
|-
 +
| 3.63 || 0x857408DA
 
|}
 
|}
  
=== sceGUIDSetVisibilityLevelForKernel ===
+
This is a guessed name.
 +
 
 +
<source lang="C">SceKernelObjectHeap *sceKernelGetObjectHeapForKernel(void);</source>
 +
 
 +
=== sceKernelGetSharedObjectHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCB8D03C0
+
| 3.60-3.61 || 0xBF0294E4
 +
|-
 +
| 3.63 || 0x791D6205
 
|}
 
|}
  
Sets visibilityLevel into guid's GUIDEntry.
+
This is a guessed name.
  
<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source>
+
<source lang="C">SceKernelObjectHeap *sceKernelGetSharedObjectHeapForKernel(void);</source>
  
=== sceGUIDFindByNameForKernel ===
+
=== SceSysmemForKernel_B8D769C6 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCEBA8031
+
| 3.60-3.61 || 0xB8D769C6
 +
|-
 +
| 3.63 || 0xDBEACE2C
 
|}
 
|}
  
=== sceGUIDFindByNameAllForKernel ===
+
<source lang="C">int SceSysmemForKernel_B8D769C6(SceKernelObjectHeap *pObjectHeap, void *info);</source>
 +
 
 +
=== sceUIDCreateEntryHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4B5C85AC
+
| 0.990-3.60 || 0x19CAEF35
 +
|-
 +
| 3.65 || 0x89BEF058
 
|}
 
|}
  
=== sceGUIDGetPIDForKernel ===
+
<source lang="C">int sceUIDCreateEntryHeapForKernel(SceUID pid, SceUID heap_guid);</source>
 +
 
 +
=== sceUIDDeleteEntryHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCF5A2311
+
| 0.990-3.60 || 0xF0C3FCFC
 +
|-
 +
| 3.65 || 0xF6D09BD9
 
|}
 
|}
  
Returns Process ID for guid.
+
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID guid);</source>
  
<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source>
+
=== sceUIDRegisterForKernel ===
 
 
=== sceGUIDSetPIDForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x812E7A53
+
| 0.931-0.990 || 0x59162CD7
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Sets Process ID for guid.
+
Calls [[#sceGUIDRegisterForKernel]].
  
<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source>
+
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
  
=== sceGUIDSetCNOAForKernel ===
+
=== sceUIDObjectSetClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8D6AF468
+
| 0.931-0.990 || 0x226DE851
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceGUIDSetForKernel ===
+
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>
 +
 
 +
=== sceUIDGetUIDVectorByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xD7B323EB
+
| 0.931.010-1.060.031 || 0xA2F03233
 +
|-
 +
| 1.500.151-3.740.011 || not present
 
|}
 
|}
  
Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.
+
Calls [[#sceGUIDGetUIDVectorByClassForKernel]].
 
 
<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
 
  
 
=== sceUIDGetProcUIDVectorByClassForKernel ===
 
=== sceUIDGetProcUIDVectorByClassForKernel ===
Line 2,612: Line 1,949:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x51C08396
+
| 0.990.000-1.060.031 || 0x51C08396
 
|-
 
|-
| 3.60 || not present
+
| 1.500.151-3.740.011 || not present
 
|}
 
|}
  
Line 2,629: Line 1,966:
 
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source>
 
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source>
  
=== sceGUIDReferForKernel ===
+
=== sceUIDGetObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB3E2AA7A
+
| 0.931-0.990 || 0xC4893914
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceGUIDReferForKernel(SceUID pid, int guid);</source>
+
Calls [[#sceGUIDGetObjectForDriver]].
  
=== sceKernelPhysicalMemWriteForKernel ===
+
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source>
 +
 
 +
=== sceUIDtoObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x4B86A751
+
| 0.990-3.60 || 0xED221825
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0xFA6C098C
 
|}
 
|}
  
Writes to physical address <code>paddr</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.
+
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].
  
<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source>
+
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>
  
=== sceKernelPhysicalMemReadForKernel ===
+
=== sceUIDClassIsSubclassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xF96E3AE2
+
| 0.990-1.691 || not present (in ForDriver)
 
|-
 
|-
| 3.60 || not present
+
| 3.60-3.61 || 0x48750A5A
 +
|-
 +
| 3.63 || 0x7F7D5C4A
 
|}
 
|}
  
Temp name was memcpy_from_paddr.
+
This is a guessed name. Temp name was sceUIDClassIsWithinSubclassChainForKernel.
  
Dest must be a virtual address and src must be a physical address. Returns copied size on success.
+
<source lang="C">SceBool sceUIDClassIsSubclassForKernel(SceClass *pClass, SceClass *pTargetClass);</source>
  
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source>
+
=== sceUIDEntryHeapCloseAllPUIDForKernel ===
 
 
=== sceKernelAllocPartitionMemBlockForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x5FFE4B79
+
| 0.931-3.60 || 0xFAF96C1F
 
|-
 
|-
| 3.65 || 0x6DB45017
+
| 3.65 || 0x133024A5
 
|}
 
|}
  
Temp name was sceKernelAllocSystemCallTableForKernel.
+
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID guid);</source>
 
 
<source lang="C">
 
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);
 
</source>
 
  
=== sceUIDEntryHeapGetInfoForKernel ===
+
=== sceKernelUIDEntryHeapGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 2,692: Line 2,029:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 3.60 || 0x686AA15C
+
| 3.60-3.61 || 0x686AA15C
 +
|-
 +
| 3.63 || 0xCCD47B97
 
|}
 
|}
  
=== sceUIDEntryHeapCloseAllPUIDForKernel ===
+
Official name may also be sceUIDEntryHeapGetInfoForKernel (seen in 4.00).
 +
 
 +
<source lang="C">
 +
typedef struct SceUIDEntryHeapInfo {
 +
    SceSize size; //<! Size of this structure (0x18)
 +
    SceSize objectSize;
 +
    SceSize totalHeapSize;
 +
    SceSize totalItemCount;
 +
    SceSize unk10;
 +
    SceSize unk14;
 +
} SceUIDEntryHeapInfo;
 +
 
 +
SceInt32 sceKernelUIDEntryHeapGetInfoForKernel(SceUID entryHeapId, SceUIDEntryHeapInfo *pInfo);
 +
</source>
 +
 
 +
=== sceUIDEntryHeapSetHookForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xFAF96C1F
+
| 3.60-3.61 || 0xCD985AEB
 
|-
 
|-
| 3.65 || 0x133024A5
+
| 3.63 || 0x666C878F
 
|}
 
|}
  
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID uid);</source>
+
?Implemented in internal system software.? Not implemented in external system software.
 +
 
 +
<source lang="C">int sceUIDEntryHeapSetHookForKernel(SceUID guid, void *pHook);</source>
  
=== sceKernelNameHeapGetInfoForKernel ===
+
=== sceUIDEntryGetNameForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0x114E6476
 
|-
 
|-
| 3.60 || 0xE443253B
+
| 3.63 || 0x5FD15C6E
 
|}
 
|}
  
=== sceKernelGetFixedHeapInfoByPointerForKernel ===
+
This is a guessed name.
 +
 
 +
<source lang="C">char *sceUIDEntryGetNameForKernel(SceUIDEntry *pEntry);</source>
 +
 
 +
=== sceUIDEntryGetLevelForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x219E90FD
+
| 3.60-3.61 || 0xC2F7D8A4
 +
|-
 +
| 3.63 || 0x797C858B
 
|}
 
|}
  
<source lang="C">
+
This is a guessed name.
// pObject is of size 0x30
+
 
// pObject first 4 bytes are structure size
+
<source lang="C">SceUInt16 sceUIDEntryGetLevelForKernel(SceUIDEntry *pEntry);</source>
int sceKernelGetFixedHeapInfoByPointerForKernel(void *pObject, SceKernelFixedHeapInfo *pInfo);</source>
 
  
=== sceKernelGetHeapInfoAllChunkForKernel ===
+
=== sceUIDEntryGetAttrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xAC4C0EB1
+
| 3.60-3.61 || 0x8FB73A29
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x17F12DCE
 
|}
 
|}
  
<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID uid, SceKernelHeapInfo *pInfo);</source>
+
This is a guessed name.
 +
 
 +
<source lang="C">SceUInt32 sceUIDEntryGetAttrForKernel(SceUIDEntry *pEntry);</source>
  
=== sceKernelGetHeapInfoByPointerForKernel ===
+
=== sceUIDEntryGetLinkCountForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || not present
+
| 3.60-3.61 || 0x876A7F44
 
|-
 
|-
| 3.60 || 0x68451777
+
| 3.63 || 0xF3DB2D71
 
|}
 
|}
  
<source lang="C">int sceKernelGetHeapInfoByPointerForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>
+
This is a guessed name.
  
=== sceKernelGetHeapInfoForKernel ===
+
<source lang="C">SceUInt8 sceUIDEntryGetLinkCountForKernel(SceUIDEntry *pEntry);</source>
 +
 
 +
=== sceUIDEntryGetUIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x91733EF4
+
| 3.60-3.61 || 0x6BB6AF94
 +
|-
 +
| 3.63 || 0x03A2CAF0
 
|}
 
|}
  
<source lang="C">
+
This is a guessed name.
// 0.931-0.990:
 
int sceKernelGetHeapInfoForKernel(SceUID uid, SceKernelHeapInfo *pInfo);
 
  
// 3.60:
+
<source lang="C">SceUID sceUIDEntryGetUIDForKernel(SceUIDEntry *pEntry);</source>
int sceKernelGetHeapInfoForKernel(SceUID uid, SceUInt32 level, SceKernelHeapInfo *pInfo);
 
</source>
 
  
=== sceKernelFreeSimpleMemBlockForKernel ===
+
=== sceGUIDRegisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA1FFA2C9
+
| 0.990-3.61 || 0xAF42AAD5
 +
|-
 +
| 3.63 || 0x6DB44A42
 
|}
 
|}
  
=== sceKernelAllocForKernel ===
+
<source lang="C">SceUID sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
 +
 
 +
=== sceGUIDUnregisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC0A4D2F3
+
| 0.931-0.990 || 0xE79BBCF2
 
|-
 
|-
| 3.65 || 0x85571907
+
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>
+
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>
  
=== sceKernelAllocWithOptForKernel ===
+
=== sceGUIDOpenByGUIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA2CD1697
+
| 0.990-3.61 || 0xCF53EEE4
 +
|-
 +
| 3.63 || 0x89D33DF0
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">SceUID sceGUIDOpenByGUIDForKernel(SceUID guid);</source>
  
typedef struct SceAllocOpt {
+
=== sceGUIDNameForKernel ===
    SceSize size;  // 0x14
+
{| class="wikitable"
    SceSize data04; // maybe len align?
+
|-
    SceSize align;
+
! Version !! NID
    int data0C;
+
|-
    int data10;
+
| 0.990.000-1.060.031 || 0x250EE289
} SceAllocOpt;
+
|-
 +
| 1.50-3.740.011 || not present
 +
|}
  
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);
+
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>
  
</source>
+
=== sceGUIDtoClassForKernel ===
 
 
=== sceKernelFreeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xABAB0FAB
+
| 0.990-3.61 || 0x66636970
 
|-
 
|-
| 3.65 || 0x4233C16D
+
| 3.63 || 0x368F1C36
 
|}
 
|}
<source lang="C">
+
 
void sceKernelFreeForKernel(void *ptr);
+
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID guid);</source>
</source>
 
  
 
=== sceGUIDGetObjectWithClassForKernel ===
 
=== sceGUIDGetObjectWithClassForKernel ===
Line 2,830: Line 2,198:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x7ABFA9A7
+
| 0.990-3.61 || 0x7ABFA9A7
 +
|-
 +
| 3.63 || 0x0E43E113
 
|}
 
|}
  
Line 2,837: Line 2,207:
 
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>
 
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>
  
=== SceSysmemForKernel_C38D61FC ===
+
=== sceGUIDGetUIDVectorByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xC38D61FC
+
| 0.931.010-3.600.011 || 0xEC7D36EF
 +
|-
 +
| 3.630.011-3.740.011 || 0x52137FA3
 
|}
 
|}
  
Calls [[#SceSysmemForDriver_89A44858]].
+
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.
  
=== sceUIDGetObjectForKernel ===
+
<source lang="C">
 +
/*
 +
* nVector - maximum number of copied UIDs
 +
* ret_num - number of retrieved UIDs
 +
*/
 +
int sceGUIDGetUIDVectorByClassForKernel(SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);
 +
</source>
 +
 
 +
=== sceGUIDGetUIDVectorWeakByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xC4893914
+
| 0.931.010-1.060.031 || not present
 +
|-
 +
| 1.500.151-3.610.011 || 0x59F577E8
 +
|-
 +
| 3.630.011-3.740.011 || 0xE9957329
 
|}
 
|}
  
Calls [[#sceGUIDGetObjectForDriver]].
+
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.
  
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source>
+
<source lang="C">
 +
/*
 +
* nVector - maximum number of copied UIDs
 +
* ret_num - number of retrieved UIDs
 +
*/
 +
int sceGUIDGetUIDVectorWeakByClassForKernel(SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);
 +
</source>
  
=== scePUIDReferObjectForKernel ===
+
=== sceGUIDGetEntryForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x620E00E7
+
| 3.60-3.61 || 0x45F2A59C
 +
|-
 +
| 3.63 || 0xFF464A49
 
|}
 
|}
  
<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source>
+
<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceUIDEntry **ppEntry);</source>
  
=== SceSysmemForKernel_7C797940 ===
+
=== sceGUIDGetEntryInfoAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x7C797940
+
| 0.990.000-3.610.011 || 0x2A79C51C
 +
|-
 +
| 3.630.011-3.740.011 || 0x3BF0DE65
 
|}
 
|}
  
Calls [[#SceSysmemForKernel_620E00E7]] or [[#sceGUIDReferObjectForDriver]].
+
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUInt32 vis_level, SceUID guid, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source>
  
=== sceKernelCopyFromUser32DomainForKernel ===
+
=== sceGUIDGetEntryInfoClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xD530399A
+
| 0.990.000-3.610.011 || 0xE90CFD62
 
|-
 
|-
| 3.60 || not present
+
| 3.630.011-3.740.011 || 0x71E934DB
 
|}
 
|}
  
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source>
+
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID guid, SceClass *pClass, SceUInt32 vis_level, void *pInfoVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
  
=== sceKernelCopyToUserProcTextDomainForKernel ===
+
=== sceGUIDKernelCreateForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x30931572
+
| 0.990 || 0xE6FAD50A
 
|-
 
|-
| 3.65 || 0x2995558D
+
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.
+
Create a GUID with default attribute (0x30000).
  
Same as [[SceSysmem#sceKernelCopyToUserProcDomainForDriver|sceKernelCopyToUserProcDomain]], but performs a DCache clean after the copy. Use this function if you want to write code in user pages.
+
<source lang="C">int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
  
This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.
+
=== sceGUIDKernelCreateWithAttrForKernel ===
 
 
<source lang="c">SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);</source>
 
 
 
=== sceKernelCopyToUserTextDomainForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x67BAD5B4
+
| 0.990-3.61 || 0x53E1FFDE
 
|-
 
|-
| 3.65 || 0x5EF1DAAF
+
| 3.63 || 0x6D26B066
 
|}
 
|}
  
This is a guessed name. Temp names were sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.
+
Create a GUID with the specified attribute.
  
Similar to [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]], but performed in the current address space.
+
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);</source>
  
In 3.60, sceKernelCopyToUserProcTextDomain calls this function to perform the copy after changing address space.
+
=== sceGUIDKernelCreateWithOptForKernel ===
 
 
<source lang="c">SceInt32 sceKernelCopyToUserTextDomainForKernel(void *dst, const void *src, SceSize len);</source>
 
 
 
=== sceKernelCopyToUserDomainForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || Not present
+
| 0.990-0.995 || not present
 
|-
 
|-
| 3.60 || 0xA6F95838
+
| 0.996-3.60 || 0xDF0288D7
 +
|-
 +
| 3.65 || 0xFB6390CE
 
|}
 
|}
  
This is a guessed name. Temp names were sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.
+
This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.
  
Similar to [[SceSysmem#sceKernelCopyToUserTextDomainForKernel|sceKernelCopyToUserTextDomain]], but doesn't perform any DCache clean.
+
<source lang="c">
 
+
typedef struct SceGUIDKernelCreateOpt { // size is at least 0x20 on FW 3.60
Uses the same DACR, 0x15450FC3, for the copy.
+
SceUInt32 attr;
 
+
SceUInt32 field_4;
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source>
+
SceUID uid;
 +
SceUID pid;
 +
SceUInt32 field_10;
 +
SceUInt32 classAttr;
 +
SceUInt32 uidAttr;
 +
SceUID pid2;
 +
} SceGUIDKernelCreateOpt;
 +
 
 +
SceUID sceGUIDKernelCreateWithOptForKernel(SceClass *pClass, const char *name, SceGUIDKernelCreateOpt *pOpt, SceKernelObject **ppEntry);
 +
</source>
  
=== sceUIDtoObjectForKernel ===
+
=== sceGUIDGetVisibilityLevelForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xED221825
+
| 3.60-3.61 || 0xC69666C3
 
|-
 
|-
| 3.65 || 0xFA6C098C
+
| 3.63 || 0x4E923101
 
|}
 
|}
  
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].
+
<source lang="C">SceUInt32 sceGUIDGetVisibilityLevelForKernel(SceUID guid);</source>
  
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>
+
=== sceGUIDSetVisibilityLevelForKernel ===
 
 
=== sceGUIDOpenByGUIDForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCF53EEE4
+
| 3.60-3.61 || 0xCB8D03C0
|}
 
 
 
=== sceGUIDGetUIDVectorByClassForKernel ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| 3.63 || 0xE8CC2166
|-
 
| 0.931-3.60 || 0xEC7D36EF
 
|-
 
| 3.65 || 0x52137FA3
 
 
|}
 
|}
  
Copy uid to vector by referring to all objects created by cls.
+
Sets visibilityLevel into guid's GUIDEntry.
  
<source lang="C">
+
<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source>
/*
 
* num - max copy number
 
*/
 
int sceGUIDGetUIDVectorByClassForKernel(SceClass *cls, int vis_level, SceUID *vector, SceSize num, SceSize *ret_num);
 
</source>
 
  
=== scePUIDGetUIDVectorByClassForKernel ===
+
=== sceGUIDFindByObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB16D5136
+
| 0.990-3.61 || 0x95ABFDC3
 +
|-
 +
| 3.63 || 0xEC90AA11
 
|}
 
|}
  
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]].
+
<source lang="C">SceUID sceGUIDFindByObjectForKernel(void *pObject);</source>
  
<source lang="C">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, int a2, int a3, int a4, int a5, SceSize *ret_num);</source>
+
=== sceGUIDFindByNameForKernel ===
 
 
=== sceUIDGetUIDVectorByClassForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xA2F03233
+
| 3.60-3.61 || 0xCEBA8031
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xBDE00106
 
|}
 
|}
  
It is simply a wrapper for [[#sceGUIDGetUIDVectorByClassForKernel]].
+
<source lang="C">SceUID sceGUIDFindByNameForKernel(const char *name);</source>
  
=== sceKernelCreateAddressSpaceForKernel ===
+
=== sceGUIDFindByNameAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x4A3737F0
+
| 3.60-3.61 || 0x4B5C85AC
 
|-
 
|-
| 3.65 || 0x8EE89D2C
+
| 3.63 || 0xF49C0BE8
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
// type: 0x10000001 (user AS)
+
// return value: to reverse, should be either SceUID guid or void* pObj
// name: maybe titleid
+
SceUID sceGUIDFindByNameAllForKernel(const char *name);
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelAddressSpace *pAS);
 
 
</source>
 
</source>
  
=== sceKernelDeleteAddressSpaceForKernel ===
+
=== sceGUIDGetPIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF2D7FE3A
+
| 3.60-3.61 || 0xCF5A2311
 
|-
 
|-
| 3.65 || 0x4A2E421D
+
| 3.63 || 0xBD42A0FC
 
|}
 
|}
  
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>
+
Returns Process ID for guid.
 +
 
 +
<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source>
  
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
+
=== sceGUIDSetPIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x89CE1F31
+
| 3.60-3.61 || 0x812E7A53
 
|-
 
|-
| 3.65 || 0x36159CF5
+
| 3.63 || 0x46DF8C8A
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source>
+
Sets Process ID for guid.
 +
 
 +
<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source>
  
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
+
=== sceGUIDSetCNOAForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x67955EE9
+
| 3.60-3.61 || 0x8D6AF468
 
|-
 
|-
| 3.65 || 0x7DF07D60
+
| 3.63 || 0x5EDDEEB5
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, int a2, SceKernelPhyMemPart *pPhyMemPart);</source>
+
Setting Class Name Object Attr.
 +
 
 +
<source lang="C">int sceGUIDSetCNOAForKernel(SceUID guid, SceClass *pClass, const char *name, void *pObject, SceUInt32 attr);</source>
  
=== sceKernelAddressSpaceUnmapForKernel ===
+
=== sceGUIDSetForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xCE72839E
+
| 0.931-3.61 || 0xD7B323EB
 +
|-
 +
| 3.63 || 0xBF275C5A
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int unk, void *vbase, SceSize size);</source>
+
Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.
  
3.60:
+
<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
<source lang="C">int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int flags, int unk, uint32_t paddr, SceSize size);</source>
 
  
Example: in SceSysStateMgr:
+
=== scePUIDGetEntryInfoAllForKernel ===
<source lang="C">
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);
 
</source>
 
 
 
3.60
 
 
 
<source lang="C">
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);
 
</source>
 
 
 
=== sceKernelAddressSpaceVAtoPAForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF2179820
+
| 0.931.010-1.692.000 || not present
 +
|-
 +
| 1.800.071-3.610.011 || 0x2770A7D7
 +
|-
 +
| 3.630.011-3.740.011 || 0x3C3005EE
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, uint32_t mode, void *pVA, void **pPA);</source>
+
<source lang="C">int scePUIDGetEntryInfoAllForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source>
  
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
+
=== scePUIDGetAttrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCC7BB240
+
| 3.60-3.61 || 0x86E83C0D
 +
|-
 +
| 3.63 || 0x96BD47D1
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>
+
<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID puid, SceUInt32 *pAttr);</source>
 
 
=== sceKernelFindClassByNameForKernel ===
 
  
 +
=== scePUIDReleaseObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x62989905
+
| 0.990-3.61 || 0x3FCA782B
 
|-
 
|-
| 3.65 || 0x7D87F706
+
| 3.63 || 0xCE561224
 
|}
 
|}
  
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **class);</source>
+
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID puid);</source>
 
 
=== sceKernelGetMemBlockTypeForKernel ===
 
  
 +
=== scePUIDGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x289BE3EC
+
| 0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0x12ED88AE
 +
|-
 +
| 3.63 || 0x857701D4
 
|}
 
|}
  
<source lang="c">
+
<source lang="C">
/***
+
// pInfo size is 0x14 bytes
* Gets the memory block type of a memory block
+
int scePUIDGetInfoForKernel(SceUID pid, SceUID puid, void *pInfo);
*
+
</source>
* @param[in] uid - SceUID of the memory block
 
* @param[out] type - Type of the memory block identified by uid
 
*
 
* @return 0 on success, < 0 on error.
 
*/
 
int sceKernelGetMemBlockTypeForKernel(SceUID uid, unsigned int *type);</source>
 
 
 
=== sceKernelGetUIDHeapClassForKernel ===
 
  
 +
=== scePUIDtoGUIDWithDebugForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4CCA935D
+
| 3.60-3.61 || 0xB3E2AA7A
 +
|-
 +
| 3.63 || 0x188C8742
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source>
+
This is a guessed name.
  
=== sceKernelGetUIDMemBlockClassForKernel ===
+
<source lang="C">SceUID scePUIDtoGUIDWithDebugForKernel(SceUID pid, SceUID puid);</source>
  
 +
=== scePUIDReferObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xAF729575
+
| 0.990-3.61 || 0x620E00E7
 +
|-
 +
| 3.63 || 0x2C15615F
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</source>
+
<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source>
  
=== sceKernelGetUIDDLinkClassForKernel ===
+
=== scePUIDOpenByNameWithOptForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC105604E
+
| 3.60-3.61 || 0x22F79E82
 +
|-
 +
| 3.63 || 0x201E970B
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source>
+
<source lang="C">SceUID scePUIDOpenByNameWithOptForKernel(ScePID pid, const char *name, void *pOpt);</source>
  
=== SceSysmemForKernel_7BD56D6D ===
+
=== scePUIDGetPUIDVectorByGUIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || not present
+
| 0.931.010-2.06 || not present
 
|-
 
|-
| 3.60 || 0x7BD56D6D
+
| 2.100.081-3.610.011 || 0xBF04FC83
 
|-
 
|-
| 3.65 || 0xCEBC4963
+
| 3.630.011-3.740.011 || 0xCE16AD91
 
|}
 
|}
  
Official name might be sceKernelSetAddressSpaceName.
+
<source lang="C">int scePUIDGetPUIDVectorByGUIDForKernel(SceUID pid, SceUID guid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
  
Used by [[SceProcessmgr]].
+
=== scePUIDGetUIDVectorByClassForKernel ===
 
 
<source lang="C">int SceSysmemForKernel_7BD56D6D(SceUID guid, const char *name);</source>
 
 
 
=== SceSysmemForKernel_9C7B62AB ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x9C7B62AB
+
| 0.990.000-3.610.011 || 0xB16D5136
 +
|-
 +
| 3.630.000-3.740.011 || 0x08C05493
 
|}
 
|}
  
<source lang="C">
+
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]].
// name max length is 31 characters
+
 
int SceSysmemForKernel_9C7B62AB(const char *name, SceUInt32 flag);
+
<source lang="C">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
</source>
 
  
=== SceSysmemForKernel_153A08A0 ===
+
=== scePUIDReferObjectWithClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x153A08A0
+
| 3.60-3.61 || 0x9C53F457
 +
|-
 +
| 3.63 || 0x9C23DFF7
 
|}
 
|}
  
Add 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.
+
This is a guessed name.
  
<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source>
+
<source lang="C">int scePUIDReferObjectWithClassForKernel(SceUID pid, SceUID puid, SceClass *pClass, void **ppObject);</source>
  
=== SceSysmemForKernel_942D15FC ===
+
=== scePUIDOpenByGUIDWithOptForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x942D15FC
+
| 3.60-3.61 || 0x53A2E272
 +
|-
 +
| 3.63 || 0x1FF2749A
 
|}
 
|}
  
Used to get GUID by name.
+
This is a guessed name.
  
<source lang="C">int SceSysmemForKernel_942D15FC(const char *name, SceSize namelen, int unk_guid_global_value);</source>
+
<source lang="C">SceUID scePUIDOpenByGUIDWithOptForKernel(SceUID pid, SceUID guid, void *pOpt);</source>
  
=== SceSysmemForKernel_C8672A3D ===
+
=== scePUIDGetGUIDVectorForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC8672A3D
+
| 3.60-3.61 || 0x3203AE64
 +
|-
 +
| 3.63 || 0x66489B4B
 
|}
 
|}
  
<source lang="C">int SceSysmemForKernel_C8672A3D(int unk);</source>
+
This is a guessed name.
  
=== sceKernelInitProcessMemoryForKernel ===
+
<source lang="C">int scePUIDGetGUIDVectorForKernel(SceUID pid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
 +
 
 +
=== sceKernelGetPhyPartKernelForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE7938BFB
+
| 0.931-3.61 || 0x4D38F861
 +
|-
 +
| 3.63-3.65 || 0x0164D817
 
|}
 
|}
  
This is guessed name.
+
return gpPhyPartKernel;
  
Used by [[SceProcessmgr]]
+
<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source>
  
<source lang="C">int sceKernelInitProcessMemoryForKernel(void);</source>
+
=== sceKernelGetPhyPartToolForKernel ===
 
 
== SceSysmemForDriver ==
 
 
 
=== sceUIDGetDefaultClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xFE28F5EB
+
| 0.990-3.61 || 0xF8E95A5A
 
|-
 
|-
| 3.60 || not present
+
| 3.63-3.65 || 0x0B1B4ACA
 
|}
 
|}
  
<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source>
+
<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source>
  
=== sceUIDtoClassForDriver ===
+
=== sceKernelGetPhyPartGameForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x65B9B393
+
| 3.60-3.61 || 0xB60568F9
 
|-
 
|-
| 3.60 || not present
+
| 3.63-3.65 || 0x62800A6B
 
|}
 
|}
  
Calls sceGUIDtoClassForKernel.
+
<source lang="C">void *sceKernelGetPhyPartGameForKernel(void);</source>
  
<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source>
+
=== sceKernelSetPhyPartGameForKernel ===
 
 
=== scePUIDGetClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xE9728A12
+
| 3.60-3.61 || 0x77876A8D
 +
|-
 +
| 3.63-3.65 || 0x3753C584
 
|}
 
|}
  
Temp name was sceKernelGetClassForPidForUidForDriver.
+
<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source>
 
 
<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID uid, SceClass **ppClass);</source>
 
  
=== sceGUIDGetClassForDriver ===
+
=== sceKernelSetPhyPartCdramForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC74B0152
+
| 3.60-3.61 || 0x07FEBBCA
 +
|-
 +
| 3.63 || 0xDCEF10B2
 
|}
 
|}
  
Temp name was sceKernelGetClassForUidForDriver.
+
This is a guessed name.
  
<source lang="c">int sceGUIDGetClassForDriver(SceUID uid, SceClass **ppClass);</source>
+
<source lang="C">void sceKernelSetPhyPartCdramForKernel(void *pPhyPart);</source>
  
=== sceUIDClassInitForDriver ===
+
=== sceKernelPhyMemLowAllocForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xE6D75E99
+
| 0.931-3.61 || 0x5E169FEF
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xEA98CCE1
 
|}
 
|}
  
<source lang="C">int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);</source>
+
Allocate a range of physically contiguous "pages" from a PhyMemLow object.
 +
 
 +
<source lang="C">
 +
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 +
// size and alignment must be aligned to the target PHYMEMLOW granularity
 +
// On success, *pOut contains the base physical address of a range with the provided size
 +
SceInt32 sceKernelPhyMemLowAllocForKernel(SceUInt32 type, SceSize size, SceSize alignment, SceUIntPAddr* pOut);
 +
</source>
  
=== scePUIDOpenByNameWithExactClassForDriver ===
+
=== sceKernelPhyMemLowPA2VAForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xB800123C
+
| 0.931-3.61 || 0x0FD6B756
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x2CFD8C9A
 
|}
 
|}
  
This is a guessed name. Previous name was <code>add_heap</code>.
+
<source lang="C">
 
+
// type must be 0x10002
Equivalent to [[SceSysmem#scePUIDOpenByNameWithClassForDriver|scePUIDOpenByNameWithClass]], but the object's class must match exactly the provided <code>pClass</code>.
+
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
 +
</source>
  
<source lang="C">SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID process, const char *name, const SceClass *pClass);</source>
+
=== sceKernelGetPhyMemLowInfoForKernel ===
 
 
=== sceKernelIsSubclassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x6484D03E
+
| 0.931-0.990 || 0x06A4DA6C
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">SceBool sceKernelIsSubclassForDriver(SceClass *parentClass, SceClass *class);</source>
+
<source lang="C">
 +
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 +
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);
 +
</source>
  
=== sceGUIDNameForDriver ===
+
=== sceKernelPhyMemLowFreeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xB2BB6216
+
| 0.931-3.61 || 0x18B99FDD
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x844DF3DA
 
|}
 
|}
  
<source lang="C">char *sceGUIDNameForDriver(SceUID id);</source>
+
Free a range of physical "pages" from a PhyMemLow object.
  
=== sceKernelGetMemBlockAllocSizeForDriver ===
+
<source lang="C">
 +
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 +
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);
 +
</source>
 +
 
 +
=== sceKernelSetPhyMemLowHookForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x63E5754B
+
| 3.60-3.61 || 0x2658EE0A
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x2C7B8D65
 
|}
 
|}
  
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID id, SceSize *size);</source>
+
This is a guessed name.
 +
 
 +
Only implemented in sysdbg build.
  
=== sceUIDGetClassInfoAllForDriver ===
+
<source lang="C">int sceKernelSetPhyMemLowHookForKernel(void *pHook);</source>
 +
 
 +
=== sceKernelAllocMemBlockByCommandForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x3EF32C6C
+
| 3.60-3.61 || 0xCA91B9D5
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x455B0A4C
 
|}
 
|}
  
<source lang="C">int sceUIDGetClassInfoAllForDriver(SceClassInfo_0990 *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);</source>
+
<source lang="C">
 +
typedef struct SceKernelMemBlockAllocCommand { // size is 0x94 on FW 3.65
 +
  SceSize size; // Size of this structure
 +
  SceUInt32 code;
 +
  char* name;
 +
  char unk_8[0x74];
 +
  void* typeInfo;
 +
  char unk_0x84[0x10];
 +
} SceKernelMemBlockAllocCommand;
 +
 
 +
int sceKernelAllocMemBlockByCommandForKernel(SceKernelMemBlockAllocCommand *pCommand);
 +
</source>
  
=== sceUIDCloseForDriver ===
+
=== sceKernelAllocSimpleMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x32C5F628
+
| 0.990-3.61 || 0xF81F4672
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x814CDCC5
 
|}
 
|}
  
if (a2 & 0x40000000) == 0 calls sceGUIDCloseForDriver else scePUIDCloseForDriver.
+
<source lang="C">
 +
typedef struct SceKernelSimpleMemBlock {
 +
char unk_0[0x14];
 +
void *base;
 +
char unk_18[0x14];
 +
void *PhyPage;
 +
SceSize size;
 +
} SceKernelSimpleMemBlock;
  
<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source>
+
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);
 +
</source>
  
=== SceSysmemForDriver_F09A7D09 ===
+
=== sceKernelFreeSimpleMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xF09A7D09
+
| 0.990-3.61 || 0xA1FFA2C9
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xA4DB88E1
 
|}
 
|}
  
Calls sceGUIDCloseForDriver.
+
<source lang="C">int sceKernelFreeSimpleMemBlockForKernel(void *a1);</source>
  
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source>
+
=== sceKernelGetSimpleMemBlockBaseForKernel ===
 
 
=== switch_ttb_for_pid ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69 || 0x6F2ACDAE
+
| 0.990-3.61 || 0x0A8D14EC
 
|-
 
|-
| 1.80 || Removed
+
| 3.63 || 0x39D5A3B7
 
|}
 
|}
  
Changes the TTBR to point to the tables for a given PID.
+
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>
 
 
<source lang="c">int switch_ttb_for_pid(SceUID pid);</source>
 
  
=== sceKernelAllocHeapMemoryForDriver ===
+
=== sceKernelSimpleMemBlockGetFIFOForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x7B4CB60A
+
| 3.60-3.61 || 0x43DFCE89
 +
|-
 +
| 3.63 || 0xBD625136
 
|}
 
|}
  
Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.
+
This is a guessed name.
 
 
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.
 
  
<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source>
+
<source lang="C">int sceKernelSimpleMemBlockGetFIFOForKernel(void *pResult);</source>
  
=== sceKernelAllocHeapMemoryFromGlobalHeapForDriver ===
+
=== sceKernelGetMemBlockInfoAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7750CEA7
+
| 3.60-3.61 || 0xFEF54604
 +
|-
 +
| 3.63 || 0x1D19C864
 
|}
 
|}
  
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uid = -1 (global heap <code>uid</code>).
+
<source lang="C">int sceKernelGetMemBlockInfoAllForKernel(void *pPart, int a2, int a3, int a4, int a5, SceUInt32 level, void *pInfoBuffer, int a8, SceUInt32 *a9);</source>
  
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapForDriver(SceSize size);</source>
+
=== sceKernelGetMemBlockInfoSimpleForKernel ===
 
 
=== sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0B4ED16A
+
| 0.990-3.61 || 0x2364A170
 +
|-
 +
| 3.63 || 0xBA441FD0
 
|}
 
|}
  
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uid = -1 (global heap <code>uid</code>).
+
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source>
  
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
+
=== sceKernelGetMemBlockTypeForKernel ===
  
=== sceKernelAllocHeapMemoryWithOptForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB415B5A8
+
| 3.60-3.61 || 0x289BE3EC
 +
|-
 +
| 3.63 || 0xD44FE44B
 
|}
 
|}
  
Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.
+
<source lang="c">
 +
/***
 +
* Gets the memory block type of a memory block
 +
*
 +
* @param[in] uid - SceUID of the memory block
 +
* @param[out] type - Type of the memory block identified by uid
 +
*
 +
* @return 0 on success, < 0 on error.
 +
*/
 +
int sceKernelGetMemBlockTypeForKernel(SceUID uid, unsigned int *type);</source>
  
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
+
=== sceKernelRemapMemBlockForKernel ===
 
 
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
 
 
=== sceKernelAllocHeapMemoryWithOptionForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x49D4DD9B
+
| 0.931-1.05 || 0x8D332AE1
 +
|-
 +
| 1.50-3.60 || not present. Moved to ForDriver
 
|}
 
|}
  
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.
+
Temp name was sceKernelRemapBlockForKernel.
 
 
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
 
  
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
+
See [[SceSysmem#sceKernelRemapMemBlockForDriver|sceKernelRemapMemBlockForDriver]].
  
=== sceKernelAllocMemBlockWithInfoForDriver ===
+
=== sceKernelSetMemBlockDebugCallbackForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xD44F464D
+
| 3.60-3.61 || 0x01DE3AB7
 +
|-
 +
| 3.63 || 0xF57A97A0
 
|}
 
|}
  
Temp name was sceKernelAllocMemBlockExtForDriver.
+
This is a guessed name.
 +
 
 +
Only implemented in sysdbg build.
  
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source>
+
<source lang="C">int sceKernelSetMemBlockDebugCallbackForKernel(void *pCallbacks);</source>
  
=== sceKernelAllocMemBlockForDriver ===
+
=== sceKernelMemBlockAssocPhyPageForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.65 || 0xC94850C9
+
| 3.60-3.61 || 0xA88F6D88
 +
|-
 +
| 3.63 || 0x441E6BE9
 
|}
 
|}
  
The interface is the same as the usermode version of this function, however more types can be specified and more options are in the pOpt argument.
+
This is a guessed name.
 
 
To allocate a kernel RW block of memory, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW</code>.
 
 
 
To allocate a block of memory with a specific physical address, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW</code> or <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW</code>, <code>pOpt->attr = 2</code>, and <code>pOpt->paddr = physical address</code>.
 
 
 
To allocate a block of memory that is kernel executable, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.
 
 
 
To allocate a block of memory that is physically contiguous, specify <code>type = 0x30808006</code>, <code>pOpt->attr = 0x200004</code> and an alignment to <code>pOpt->alignment</code>.
 
 
 
To allocate a block of memory inside the CDRAM, specify <code>type = 0x40404006</code>.
 
  
<source lang="c">SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source>
+
<source lang="C">int sceKernelMemBlockAssocPhyPageForKernel(SceUID guid, const SceUIntPtr *a2);</source>
  
=== sceKernelAllocMemBlockForDebuggerForDriver ===
+
=== sceKernelAllocPartitionStackMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-1.50 || 0x59F3159C
+
| 3.60-3.61 || 0x64133268
 +
|-
 +
| 3.63 || 0x40870E74
 
|}
 
|}
  
Same as sceKernelAllocMemBlockForDriver but authorize null pOpt.
+
Temp name was sceKernelAllocStackBlockForKernel.
  
<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source>
+
<source lang="C">SceUID sceKernelAllocPartitionStackMemBlockForKernel(const char *name, SceSize size, int a3);</source>
  
=== sceKernelCreateClassForDriver ===
+
=== sceKernelMemBlockGetCodeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x61317102
+
| 3.60-3.61 || 0x61C2AA52
 +
|-
 +
| 3.63 || 0x48D2E408
 
|}
 
|}
  
<source lang="c">int sceKernelCreateClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);</source>
+
This is a guessed name.
  
=== sceKernelCreateHeapForDriver ===
+
<source lang="C">SceUint32 sceKernelMemBlockGetCodeForKernel(SceUint32 type);</source>
 +
 
 +
=== sceKernelAllocPartitionMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9328E0E8
+
| 0.931-3.60 || 0x5FFE4B79
 +
|-
 +
| 3.65 || 0x6DB46017
 
|}
 
|}
  
The heap pool is thread safe.
+
Temp name was sceKernelAllocSystemCallTableForKernel.
  
 
<source lang="C">
 
<source lang="C">
// pOpt can be NULL
+
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);
 
 
</source>
 
</source>
  
=== sceUIDKernelCreateForDriver ===
+
=== sceKernelPartitionGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x7FC849B1
+
| 3.60-3.61 || 0x7BE4D3D1
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xFB101B86
 
|}
 
|}
  
Calls sceGUIDKernelCreateForKernel.
+
<source lang="C">int sceKernelPartitionGetInfoForKernel(SceUID part_id, void *pInfo);</source>
  
Create a UID with default attribute (0x30000).
+
=== sceKernelGetPhyPageResetForKernel ===
 
 
<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
 
 
 
=== sceUIDKernelCreate2ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990-3.61 || 0xEB350679
 
|-
 
|-
| 3.60 || 0x56A13E90
+
| 3.63 || 0x8FD11E02
 
|}
 
|}
  
Temp name was sceKernelCreateUidObj2ForDriver.
+
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>
  
Create a UID with default attribute (0x30000).
+
=== SceSysmemForKernel_BD33EDDF ===
 
 
<source lang="c">SceUID sceUIDKernelCreate2ForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
 
 
 
=== sceGUIDCreateForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x89A44858
+
| 0.931 || 0xBD33EDDF
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelCreateUidObjForUidForDriver.
+
Gets thread's name. Returns 0 on success.
  
Create a GUID with default attribute (0x30000) for the specified UID.
+
<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source>
  
<source lang="c">SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID guid, SceKernelObject **ppEntry);</source>
+
=== sceKernelAllocForKernel ===
 
 
=== scePUIDOpenByGUIDForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xBF209859
+
| 0.990-3.60 || 0xC0A4D2F3
 +
|-
 +
| 3.65 || 0x85571907
 
|}
 
|}
  
Temp name was sceKernelCreateUserUidForDriver.
+
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>
  
<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID uid);</source>
+
=== sceKernelAllocWithOptForKernel ===
 
 
=== scePUIDOpenByGUIDWithFlagsForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCED1547B
+
| 3.60-3.61 || 0xA2CD1697
 +
|-
 +
| 3.63 || 0xCF3C3F7A
 
|}
 
|}
  
Temp name was sceKernelCreateUserUidForClassForDriver.
+
<source lang="C">
 +
 
 +
typedef struct SceAllocOpt {
 +
    SceSize size;  // 0x14
 +
    SceSize data04; // maybe len align?
 +
    SceSize align;
 +
    int data0C;
 +
    int data10;
 +
} SceAllocOpt;
 +
 
 +
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);
  
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source>
+
</source>
  
=== scePUIDOpenByNameForDriver ===
+
=== sceKernelFreeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x513B9DDD
+
| 0.990-3.60 || 0xABAB0FAB
 +
|-
 +
| 3.65 || 0x4233C16D
 
|}
 
|}
  
Temp name was sceKernelCreateUserUidForNameForDriver.
+
<source lang="C">int sceKernelFreeForKernel(void *ptr);</source>
  
<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source>
+
=== sceKernelSetAllocFreeHookForKernel ===
 
 
=== scePUIDOpenByNameWithClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x8DA0BCA5
+
| 3.60-3.61 || 0xBC2E2B2B
 +
|-
 +
| 3.63 || 0x42834422
 
|}
 
|}
  
Equivalent to [[SceSysmem#scePUIDOpenByNameForDriver|scePUIDOpenByNameForDriver]], but object's class is checked to be a subclass of provided <code>pClass</code> before opening.
+
Only implemented in sysdbg build.
  
<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(ScePID process, const char *name, SceClass *pClass);</source>
+
<source lang="C">int sceKernelSetAllocFreeHookForKernel(void *pHook);</source>
  
=== sceKernelDeleteHeapForDriver ===
+
=== SceSysmemForKernel_C38D61FC ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0xD6437637
+
| 0.990 || 0xC38D61FC
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source>
+
Calls [[#SceSysmemForDriver_89A44858]].
  
=== sceGUIDCloseForDriver ===
+
=== SceSysmemForKernel_7C797940 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x047D32F2
+
| 0.931-0.990 || 0x7C797940
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelDeleteUidForDriver.
+
Calls [[#SceSysmemForKernel_620E00E7]] or [[#sceGUIDReferObjectForDriver]].
 +
 
 +
=== sceKernelVSlotMapProcMemoryForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60-3.61 || 0xFAD03241
 +
|-
 +
| 3.63 || 0x14D3807B
 +
|}
  
<source lang="C">int sceGUIDCloseForDriver(SceUID uid);</source>
+
<source lang="C">int sceKernelVSlotMapProcMemoryForKernel(SceUID pid, void *addr, SceSize size, SceUInt32 flag, SceKernelVSlot *pVslot, int *pBaseAddrOrOffset);</source>
  
=== scePUIDCloseForDriver ===
+
=== sceKernelVSlotUnmapProcMemoryForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x84A4AF5E
+
| 3.60-3.61 || 0x789CD5BF
 +
|-
 +
| 3.63 || 0x4EEF69C7
 
|}
 
|}
  
Temp name was sceKernelDeleteUserUidForDriver.
+
<source lang="C">int sceKernelVSlotUnmapProcMemoryForKernel(SceKernelVSlot *pVslot);</source>
 
 
<source lang="c">int scePUIDCloseForDriver(SceUInt32 flag_or_addr_or_pid, SceUID uid);</source>
 
  
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===
+
=== SceSysmemForKernel_ECF9435A ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF3BBE2E1
+
| 3.60-3.61 || 0xECF9435A
 +
|-
 +
| 3.63 || 0xFCB5745A
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.
+
Writes <code>nWords</code> times the 4-byte <code>ch</code> starting at usermode address <code>u_dst</code>. Write is performed with the <code>STRT</code> instruction and <code>DACR=0x15450FC3</code> (same as [[SceSysmem#sceKernelCopyToUserTextDomainForKernel||sceKernelCopyToUserTextDomain]] - required because NID tables are in RX segments).
 +
 
 +
Used by [[SceKernelModulemgr]] to overwrite NID tables once a module's imports are bound with a random value from Bigmac RNG. This overwrite was called [[Kernel#NID_Poisoning|"NID Poisoning"]] by Team Molecule.
  
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source>
+
<source lang="C">int SceSysmemForKernel_ECF9435A(void *u_dst, SceUInt32 ch, SceUInt32 nWords);</source>
  
=== sceKernelFindMemBlockByAddrForDriver ===
+
=== SceSysmemForKernel_ECC68E7B ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x8A1742F6
+
| 3.60-3.61 || 0xECC68E7B
 +
|-
 +
| 3.63 || 0x05822B82
 
|}
 
|}
  
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source>
+
<source lang="C">int SceSysmemForKernel_ECC68E7B(SceUInt32 phymem_type, SceUInt32 *result);</source>
  
=== sceKernelFindProcMemBlockByAddrForDriver ===
+
=== SceSysmemForKernel_E68A9F1B ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x857F1D5A
+
| 3.60-3.61 || 0xE68A9F1B
 +
|-
 +
| 3.63 || 0x1DE4953F
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockByAddrForPidForDriver.
+
<source lang="C">int SceSysmemForKernel_E68A9F1B(int a1, SceClass **ppClass);</source>
  
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source>
+
=== sceKernelCheckOpenVMDomainForKernel ===
 
 
=== sceKernelIsAccessibleRangeForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9C78064C
+
| 2.000.081-3.610.011 || 0xD514BB56
 +
|-
 +
| 3.630.000-3.740.011 || 0x4E6D8BC3
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockForDriver.
+
Returns 2 if Virtual Machine is open, 0 else. Returns 0x80027101 on error.
 
 
Also exported as [[#sceKernelIsAccessibleRangeForDebugger]].
 
 
 
?Returns 0 on success (if is accessible range)?
 
  
<source lang="c">int sceKernelIsAccessibleRangeForDriver(SceUInt32 mode, const void *pVA, SceSize size);</source>
+
<source lang="C">SceUInt32 sceKernelCheckOpenVMDomainForKernel(void);</source>
  
=== sceKernelIsAccessibleRangeProcForDriver ===
+
=== sceeKernelSetNameHeapHookForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9F6E45E3
+
| 3.60-3.61 || 0x1E11F41D
 +
|-
 +
| 3.63 || 0x6DBDA03B
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockForPidForDriver.
+
This is a guessed name.
  
Also exported as [[#sceKernelIsAccessibleRangeProcForDebugger]].
+
Not implemented in sysdbg build either. Probably only implemented during real development.
  
?Returns 0 on success (if is accessible range)?
+
Only return 0.
  
<source lang="C">int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source>
+
<source lang="C">int sceeKernelSetNameHeapHookForKernel(void *pHook);</source>
  
=== sceKernelFirstDifferentBlock32UserForDriver ===
+
=== SceSysmemForKernel_22708F14 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBDA6E42B
+
| 3.60-3.61 || 0x22708F14
 +
|-
 +
| 3.63 || 0x456ECB54
 
|}
 
|}
  
<source lang="c">int sceKernelFirstDifferentBlock32UserForDriver(unsigned int *ptr, int value, int byte_size);</source>
+
<source lang="C">SceUInt32 SceSysmemForKernel_22708F14(void *a1, int a2);</source>
  
=== sceKernelFirstDifferentBlock32UserForPidForDriver ===
+
=== SceSysmemForKernel_22A26637 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x8334454F
+
| 3.60-3.61 || 0x22A26637