SceSysmem: Difference between revisions

From Vita Development Wiki
Jump to navigation Jump to search
(Small fixes. Thanks CreepNT.)
(197 intermediate revisions by 4 users not shown)
Line 110: Line 110:
See [[SceSysmem Types]].
See [[SceSysmem Types]].


== SceSysmemForKernel ==
== SysEvent ==
 
Dispatcher


=== SceSysmemForKernel_A7D44B50 ===
{| class="wikitable sortable mw-collapsible mw-collapsed"
{| class="wikitable"
|-
! Module !! Type !! Event !! Description
|-
|-
! Version !! NID
| [[ScePower]] || 0 || 0x100 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_START</code>. before sceKernelCpuSuspendIntr.
|-
|-
| 0.931.010-1.692.000 || 0xA7D44B50
| [[ScePower]] || 0 || 0x101 || unknown
|-
|-
| 1.800.071-3.740.011 || not present
| [[ScePower]] || 0 || 0x102 || unknown. later sceKernelCpuResumeIntr.
|}
 
A guessed name is sceKernelSetSysmemFuncForKernel.
 
Used by [[SceKernelSSProxy]]'s module_start to register a function that just calls [[SMC]] 0x10E (BusErrorClear).
 
The registered function is used internally by [[#sceKernelPhysicalMemReadForKernel]] and [[#sceKernelPhysicalMemWriteForKernel]].
 
<source lang="C">int SceSysmemForKernel_A7D44B50(void* pBusErrorClearFunc);</source>
 
=== sceKernelSysmemModuleStartAfterProcessmgrForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[ScePower]] || 0 || 0x20F -> 0x200 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE2</code>. after sceKernelCpuResumeIntr.
|-
|-
| 3.60-3.61 || 0xE7938BFB
| [[ScePower]] || 0 || 0x400 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_START</code>.
|-
|-
| 3.63 || 0x4E74DA48
| [[ScePower]] || 0 || 0x401 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_MAIN</code>. (this is a guessed name. but should be official name)
|}
 
Temp name was sceKernelInitProcessMemoryForKernel.
 
Used by [[SceProcessmgr]].
 
<source lang="C">int sceKernelSysmemModuleStartAfterProcessmgrForKernel(void);</source>
 
=== sceKernelSysmemCleanerForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[ScePower]] || 0 || 0x402 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_END</code>. (this is a guessed name)
|-
|-
| 3.60-3.61 || 0x43E81C4B
| [[ScePower]] || 1 || 0x1000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_FREEZE_TIME</code>.
|-
|-
| 3.63 || 0x50980298
| [[ScePower]] || 1 || 0x400F -> 0x4000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE0</code>.
|}
 
?Implemented in internal system software.? Not implemented in external system software.
 
=== sceKernelStrnlenFromUserForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[ScePower]] || 1 || 0x10000 -> 0x1000F || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE0</code>.
|-
|-
| 0.931 || 0x9BC3DEAC
| [[ScePower]] || 1 || 0x40000 || <code>SCE_KERNEL_SYSEVENT_RESUME_MELT_TIME</code>. before sceKernelCpuResumeIntr.
|-
|-
| 3.60 || not present
| [[ScePower]] || 1 || 0x100000 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_START</code>. after sceKernelCpuResumeIntr.
|}
 
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source>
 
=== sceKernelPhysicalMemWriteForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[ScePower]] || 1 || 0x100001 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_MAIN</code>.
|-
|-
| 0.931.010-1.060.031 || 0x4B86A751
| [[ScePower]] || 1 || 0x100002 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_END</code>. (this is a guessed name)
|-
|-
| 1.50-3.740.011 || not present
| [[ScePower]] || 1 || 0x400000 || <code>SCE_KERNEL_SYSEVENT_RESUME_COMPLETED
|}
|}


Writes to physical address <code>pdest</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.
Handler


<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source>
{| class="wikitable sortable mw-collapsible mw-collapsed"
 
|-
=== sceKernelPhysicalMemReadForKernel ===
! Module !! Type !! Event !! Description
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceAppMgr]] || 0 || 0x20F || _sceAppMgrSystemSuspend
|-
|-
| 0.931.010-1.060.031 || 0xF96E3AE2
| [[SceAppMgr]] || 1 || 0x400000 || _sceAppMgrSystemResume
|-
|-
| 1.50-3.740.011 || not present
| [[SceAudio]] || 0 || 0x1000 || Something
|}
 
Temp name was memcpy_from_paddr.
 
Dest must be a virtual address and src must be a physical address. Returns copied size on success.
 
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source>
 
=== sceKernelCopyFromUser32DomainForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceAudio]] || 0 || 0x400F || Something
|-
|-
| 0.931 || 0xD530399A
| [[SceAudio]] || 0 || 0x102 || Something
|-
|-
| 3.60 || not present
| [[SceAudio]] || 1 || 0x1000F || Something
|}
|-
 
| [[SceAudioin]] (SceAudioIn) || 0 || 0x102 || Something
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source>
 
=== sceKernelCopyToUserProcTextDomainForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceAudioin]] (SceAudioIn) || 1 || 0x1000F || Something
|-
|-
| 0.931-3.60 || 0x30931572
| [[SceAVConfig]] || 0 || 0x200 || Something
|-
|-
| 3.65 || 0x2995558D
| [[SceAVConfig]] || 1 || 0x400000 || Something
|}
 
Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.
 
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.
 
This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.
 
<source lang="c">SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);</source>
 
=== sceKernelCopyToUserProcTextDomainForDBGPForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceAVConfig]] || 1 || 0x1000F || Something
|-
|-
| 3.60-3.61 || 0xE65EA709
| [[SceAVConfig]] || 1 || 0x100001 || Something
|-
|-
| 3.63 || 0x4345C61F
| [[SceBt]] || 0 || 0x401 || Something
|}
 
=== sceKernelCopyToUserTextDomainForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceBt]] || 0 || 0x402 || Something
|-
|-
| 3.60 || 0x67BAD5B4
| [[SceBt]] || 1 || 0x100001 || Something
|-
|-
| 3.65 || 0x5EF1DAAF
| [[SceBt]] || 1 || 0x100002 || Something
|}
 
This is a guessed name. Temp names were sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.
 
Similar to [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]], but performed in the current address space.
 
In FW 3.60, [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]] calls this function to perform the copy after changing address space.
 
<source lang="c">SceInt32 sceKernelCopyToUserTextDomainForKernel(void *dst, const void *src, SceSize len);</source>
 
=== sceKernelCopyToUserDomainForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceCamera]] || 0 || 0x401 || Something
|-
|-
| 0.931 || Not present
| [[SceCamera]] || 0 || 0x402 || Something
|-
|-
| 3.60-3.61 || 0xA6F95838
| [[SceCamera]] || 0 || 0x400 || Something
|-
|-
| 3.63 || 0x499A9FFF
| [[SceCamera]] || 1 || 0x100000 || Something
|}
 
This is a guessed name. Temp names were sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.
 
Similar to [[SceSysmem#sceKernelCopyToUserTextDomainForKernel|sceKernelCopyToUserTextDomain]], but doesn't perform any DCache clean.
 
Uses the same DACR, 0x15450FC3, for the copy.
 
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source>
 
=== sceKernelRegisterClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceCamera]] || 1 || 0x100002 || Something
|-
|-
| 0.990 || 0x11761B77
| [[SceClockgen]] || 1 || 0x10000 || Something
|-
|-
| 3.60 || not present
| [[SceClockgen]] || 1 || 0x100000 || Something
|}
 
=== sceKernelFindClassByNameForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceCodec]] || 0 || 0x200 || Something
|-
|-
| 3.60 || 0x62989905
| [[SceCodec]] || 1 || 0x10000 || Something
|-
|-
| 3.65 || 0x7D87F706
| [[SceCodecEngineWrapper]] || 0 || 0x401 || Something
|}
 
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **class);</source>
 
=== sceUIDRegisterForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceCodecEngineWrapper]] || 0 || 0x200 || Something
|-
|-
| 0.931-0.990 || 0x59162CD7
| [[SceCodecEngineWrapper]] || 0 || 0x402 || Something
|-
|-
| 3.60 || not present
| [[SceCodecEngineWrapper]] || 0 || 0x400E || Something
|}
 
Calls [[#sceGUIDRegisterForKernel]].
 
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
 
=== sceUIDObjectSetClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceCodecEngineWrapper]] || 1 || 0x1000E || Something
|-
|-
| 0.931-0.990 || 0x226DE851
| [[SceCodecEngineWrapper]] || 1 || 0x100000 || Something
|-
|-
| 3.60 || not present
| [[SceCompat]] || 1 || 0x100000 || Something
|}
 
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>
 
=== sceKernelGetUIDHeapClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceCtrl]] || 0 || 0x402 || Something
|-
|-
| 3.60-3.61 || 0x4CCA935D
| [[SceCtrl]] || 0 || 0x400C || Something
|-
|-
| 3.63 || 0x7C878E94
| [[SceCtrl]] || 0 || 0x400 || Something
|}
 
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source>
 
=== sceKernelGetUIDMemBlockClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceCtrl]] || 1 || 0x1000C || Something
|-
|-
| 3.60-3.61 || 0xAF729575
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x102 || Something
|-
|-
| 3.63 || 0x86681B64
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x4003 || Something
|}
 
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</source>
 
=== sceKernelGetUIDDLinkClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceDbgSdio]] (SceDbgSdio1) || 1 || 0x10003 || Something
|-
|-
| 0.990-3.610.011 || 0xC105604E
| [[SceDeci4pDbgp]] || 0 || 0x102 || Something
|-
|-
| 3.630.011-3.740.011 || 0xE4193EB6
| [[SceDeci4pDbgp]] || 0 || 0x4000 || Something
|}
 
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source>
 
=== sceUIDGetUIDVectorByClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceDeci4pDbgp]] || 1 || 0x10000 || Something
|-
|-
| 0.931.010-1.060.031 || 0xA2F03233
| [[SceDeci4pDbgp]] || 1 || 0x400000 || Something
|-
|-
| 1.500.151-3.740.011 || not present
| [[SceDeci4pDfMgr]] || 0 || 0x200 || Something
|}
 
Calls [[#sceGUIDGetUIDVectorByClassForKernel]].
 
=== sceUIDGetProcUIDVectorByClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceDeci4pDfMgr]] || 0 || 0x100 || Something
|-
|-
| 0.990.000-1.060.031 || 0x51C08396
| [[SceDeci4pDfMgr]] || 0 || 0x401 || Something
|-
|-
| 1.500.151-3.740.011 || not present
| [[SceDeci4pDfMgr]] || 0 || 0x402 || Something
|}
 
=== scePUIDGetUIDVectorByClassForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceDeci4pDfMgr]] || 1 || 0x100002 || Something
|-
|-
| 0.990.000-3.610.011 || 0xB16D5136
| [[SceDeci4pDfMgr]] || 1 || 0x400000 || Something
|-
|-
| 3.630.000-3.740.011 || 0x08C05493
| [[SceDeci4pDfMgr]] || 1 || 0x100000 || Something
|}
 
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]].
 
<source lang="C">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
 
=== sceKernelGetKernelAddressSpaceForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceDeci4pDrfp]] || 0 || any || Something
|-
|-
| 1.500.151-3.610.011 || 0xC38B4D52
| [[SceDeci4pDtracep]] || 0 || 0x200 || Something
|-
|-
| 3.630.011-3.740.011 || 0x2E5CC243
| [[SceDeci4pDtracep]] || 0 || 0x1000 || Something
|}
|-
 
| [[SceDeci4pDtracep]] || 1 || 0x40000 || Something
<source lang="C">void* sceKernelGetKernelAddressSpaceForKernel(void);</source>
|-
 
| [[SceDeci4pDtracep]] || 1 || 0x100002 || Something
=== sceKernelCreateAddressSpaceForKernel ===
|-
{| class="wikitable"
| [[SceDeci4pSDfCtl]] || 0 || 0x102 || Something
|-
| [[SceDisplay]] || 0 || 0x400 || Something
|-
|-
! Version !! NID
| [[SceDisplay]] || 0 || 0x200 || Something
|-
|-
| 0.990-3.60 || 0x4A3737F0
| [[SceDisplay]] || 0 || 0x402 || Something
|-
|-
| 3.65 || 0x8EE89D2C
| [[SceDisplay]] || 0 || 0x400A || Something
|}
 
<source lang="C">
// type: 0x10000001 (user AS)
// name: maybe titleid
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelAddressSpace *pAS);
</source>
 
=== sceKernelDeleteAddressSpaceForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceDisplay]] || 1 || 0x40000 || Something
|-
|-
| 0.931-3.60 || 0xF2D7FE3A
| [[SceDisplay]] || 1 || 0x100000 || Something
|-
|-
| 3.65 || 0x4A2E421D
| [[SceDisplay]] || 1 || 0x1000A || Something
|}
 
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>
 
=== sceKernelAddressSpaceSetNameForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceError]] || 0 || 0x200 || Something
|-
|-
| 0.990-1.50 || not present
| [[SceError]] || 1 || 0x100001 || Something
|-
|-
| 3.60 || 0x7BD56D6D
| [[SceGps]] (SceGpsd) || 0 || 0x102 || Something
|-
|-
| 3.65 || 0xCEBC4963
| [[SceGps]] (SceGpsd) || 1 || 0x400000 || Something
|}
 
Used by [[SceProcessmgr]].
 
<source lang="C">int sceKernelAddressSpaceSetNameForKernel(SceUID guid, const char *name);</source>
 
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceGpuEs4]] (SceGpu) || 0 || 0x402 || Something
|-
|-
| 0.931-3.60 || 0x67955EE9
| [[SceGpuEs4]] (SceGpu) || 0 || 0x4005 || Something
|-
|-
| 3.65 || 0x7DF07D60
| [[SceGpuEs4]] (SceGpu) || 0 || 0x400 || Something
|}
 
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, int a2, SceKernelPhyMemPart *pPhyMemPart);</source>
 
=== sceKernelAddressSpaceCtrSetObjectHeapForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceGpuEs4]] (SceGpu) || 1 || 0x10005 || Something
|-
|-
| 3.60-3.61 || 0xFC74A355
| [[SceHdmi]] || 0 || 0x400 || Something
|-
|-
| 3.63 || 0xFA348CB1
| [[SceHdmi]] || 0 || 0x402 || Something
|}
 
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceHdmi]] || 1 || 0x100000 || Something
|-
|-
| 0.931-3.60 || 0x89CE1F31
| [[SceHid]] || 0 || 0x402 || Something
|-
|-
| 3.65 || 0x36159CF5
| [[SceHid]] || 0 || 0x4000 || Something
|}
 
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source>
 
=== sceKernelAddressSpaceUnmapForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceHid]] || 0 || 0x200 || Something
|-
|-
| 0.931-3.61 || 0xCE72839E
| [[SceHid]] || 1 || 0x100000 || Something
|-
|-
| 3.63 || 0x73C38695
| [[SceHpremote]] (SceHprm) || 1 || 0x1000C || Something
|}
 
<source lang="C">
# For FW 0.931:
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int maybe_ttbr0, void* addr, SceSize size);
# For FW 3.60:
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int maybe_ttbr0, SceUInt32 some_offset, void* addr, SceSize size);
</source>
 
Example: 0.990 [[SceSysStateMgr]]:
<source lang="C">
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);
</source>
 
Example: 3.60 [[SceSysStateMgr]]:
<source lang="C">
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);
</source>
 
=== sceKernelAddressSpaceSetProcessForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceIdStorage]] || ? || ? || Something
|-
|-
| 0.990-3.61 || 0x2476B90F
| [[SceIofilemgr]] || 0 || 0x401 || vfs_sync_all_mount_point
|-
|-
| 3.63 || 0x5E772E19
| [[SceIofilemgr]] || 0 || 0x402 || Something
|}
 
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID address_space, SceUID pid);</source>
 
=== sceKernelAddressSpaceChangeMMUContextForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceIofilemgr]] || 0 || 0x400 || Something
|-
|-
| 0.931-3.61 || 0x653B0849
| [[SceIofilemgr]] || 1 || 0x10000 || Something
|-
|-
| 3.63 || 0x20D01AFA
| [[SceIofilemgr]] || 1 || 0x400000 || Something
|}
 
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.
 
<source lang="C">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source>
 
=== sceKernelAddressSpaceGetMMUContextForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceLowio]] (ScePervasive) || 1 || 0x10000 || Something
|-
|-
| 0.990 || not present
| [[SceLowio]] (SceGpio) || 1 || 0x10002 || Something
|-
|-
| 3.10-3.61 || 0x9894B9E1
| [[SceLowio]] (ScePwm) || 0 || 0x4002 || Something
|-
|-
| 3.63 || 0xA7C91D62
| [[SceLowio]] (ScePwm) || 1 || 0x10002 || Something
|}
 
This is a guessed name.
 
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID address_space, SceKernelMMUContext **ppCtx);</source>
 
=== SceSysmemForKernel_FBEF93AA ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceLowio]] (SceI2c) || 0 || 0x402 || Something
|-
|-
| 0.931 || not present
| [[SceLowio]] (SceI2c) || 0 || 0x4002 || Something
|-
|-
| 0.990-3.01 || 0xFBEF93AA
| [[SceLowio]] (SceI2c) || 1 || 0x10002 || Something
|-
|-
| 3.10-3.74 || not present
| [[SceLowio]] (SceDsi) || 0 || 0x4004 || Something
|}
 
Maybe gets MMU context. Maybe was replaced by [[#sceKernelAddressSpaceGetMMUContextForKernel]].
 
<source lang="C">int SceSysmemForKernel_FBEF93AA(SceUID address_space, void* pOut);</source>
 
=== sceKernelAddressSpaceGetTimerVbaseForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceLowio]] (SceIftu) || 0 || 0x4005 || Something
|-
|-
| 0.990 || not present
| [[SceLowio]] (SceIftu) || 1 || 0x10005 || Something
|-
|-
| 0.996.090-3.610.011 || 0x7D92B2D3
| [[SceLowio]] (SceCsi) || 0 || 0x4004 || Something
|-
|-
| 3.630.011-3.740.011 || 0xFA1A73DD
| [[SceLowio]] (SceCsi) || 1 || 0x10004 || Something
|}
 
<source lang="C">int sceKernelAddressSpaceGetTimerVbaseForKernel(SceUID address_space, void **ppBase);</source>
 
=== SceSysmemForKernel_4492421F ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceMotionDev]] (SceMotion) || 0 || 0x401 || Something
|-
|-
| 0.990.000-3.610.011 || 0x4492421F
| [[SceMotionDev]] (SceMotion) || 0 || 0x402 || Something
|-
| [[SceMotionDev]] (SceMotion) || 0 || 0x400 || Something
|-
| [[SceMotionDev]] (SceMotion) || 1 || 0x100000 || Something
|-
| [[SceMotionDev]] (SceMotion) || 1 || 0x100002 || Something
|-
|-
| 3.630.011-3.740.011 || 0xC3EF4055
| [[SceMsif]] || 0 || 0x400C || Something
|}
 
Gets address space information.
 
<source lang="C">int SceSysmemForKernel_4492421F(SceUID address_space, SceKernelAddressSpaceInfo *pInfo);</source>
 
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceMsif]] || 1 || 0x1000C || Something
|-
|-
| 0.931-0.990 || 0x671A3444
| [[SceNetPs]] || 0 || 0x200 || Something
|-
|-
| 3.60 || not present
| [[SceNetPs]] || 1 || 0x400000 || Something
|}
 
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>.
 
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source>
 
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceOled]] || 0 || 0x402 || Something
|-
|-
| 0.931 || 0xCB6E1C80
| [[SceOled]] || 0 || 0x4003 || Something
|-
|-
| 3.60 || not present
| [[SceOled]] || 1 || 0x10003 || Something
|}
 
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID address_space, const void *addr, void *pInfo);</source>
 
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[ScePfsMgr]] || 0 || 0x402 || Something
|-
|-
| 0.931-0.990 || 0x1A898F2E
| [[ScePower]] (ScePower) || 0 || 0x402 || Something
|-
|-
| 3.60 || not present
| [[ScePower]] (ScePower) || 0 || 0x4009 || Something
|}
 
<source lang="C">
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x4008];
} SceKernelAddressSpaceMMUL1AllInfo;
 
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID address_space, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source>
 
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[ScePower]] (ScePower) || 0 || 0x400 || Something
|-
|-
| 0.931 || 0x1E1AA29B
| [[ScePower]] (ScePower) || 1 || 0x10009 || Something
|-
|-
| 3.60 || not present
| [[ScePower]] (ScePower) || 1 || 0x100000 || Something
|}
 
<source lang="C">
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x400];
} SceKernelAddressSpaceMMUL2AllInfo;
 
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID address_space, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source>
 
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[ScePower]] (SceLed) || 0 || 0x102 || Something
|-
|-
| 0.990-3.61 || 0xCC7BB240
| [[ScePower]] (SceLed) || 0 || 0x400A || Something
|-
|-
| 3.63 || 0x0B5A3E93
| [[ScePower]] (SceLed) || 1 || 0x100000 || Something
|}
 
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>
 
=== sceKernelAddressSpaceVAtoPAForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
| [[SceRtc]] || 0 || 0x200 || Something
|-
|-
| 0.990-3.61 || 0xF2179820
| [[SceRtc]] || 0 || 0x1000 || Something
|-
|-
| 3.63 || 0x1BAF8C0B
| [[SceRtc]] || 1 || 0x1000A || Something
|}
|-
| [[SceRtc]] || 1 || 0x100000 || Something
|-
| [[SceSblSmSchedProxy]] || 1 || 0x10004 || Something
|-
| [[SceSblSsMgr]] || 0 || 0x200 || Something
|-
| [[SceSblSsMgr]] || 1 || 0x100000 || Something
|-
| [[SceSblUpdateMgr]] || 0 || any || Something
|-
| [[SceSdif]] || 0 || 0x400C || Something
|-
| [[SceSdif]] || 1 || 0x10009 || resume eMMC with sdif reset
|-
| [[SceSdif]] || 1 || 0x1000C || resume eMMC
|-
| [[SceSdstor]] || 0 || 0x200 || Umount 0x900/0xA00/0x100. invalidate gc sdpart str.
|-
| [[SceSdstor]] || 0 || 0x400D || disable intr/power off for gc/rm
|-
| [[SceSdstor]] || 1 || 0x100000 || Something
|-
| [[SceSdstor]] || 1 || 0x400000 || Something
|-
| [[SceSyscon]] || 0 || 0x4006 || Something
|-
| [[SceSyscon]] || 0 || 0x402 || Something
|-
| [[SceSyscon]] || 0 || 0x400F || Something
|-
| [[SceSyscon]] || 1 || 0x10006 || Something
|-
| [[SceSyscon]] || 1 || 0x1000F || Something
|-
| [[SceTouch]] || 0 || 0x401 || Something
|-
| [[SceTouch]] || 0 || 0x400 || Something
|-
| [[SceTouch]] || 0 || 0x402 || Something
|-
| [[SceTouch]] || 0 || 0x400C || Something
|-
| [[SceTouch]] || 1 || 0x1000C || Something
|-
| [[SceTouch]] || 1 || 0x100000 || Something
|-
| [[SceUsbEtherRtl]] || 0 || 0x401 || Something
|-
| [[SceUsbEtherRtl]] || 0 || 0x402 || Something
|-
| [[SceUsbEtherRtl]] || 0 || 0x400 || Something
|-
| [[SceUsbEtherSmsc]] || 0 || 0x401 || Something
|-
| [[SceUsbEtherSmsc]] || 0 || 0x402 || Something
|-
| [[SceUsbEtherSmsc]] || 0 || 0x400 || Something
|-
| [[SceUsbServ]] || 0 || 0x200 || Something
|-
| [[SceUsbServ]] || 0 || 0x400E || Something
|-
| [[SceUsbServ]] || 1 || 0x100000 || Something
|-
| [[SceUsbServ]] || 1 || 0x100002 || Something
|-
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x401 || Something
|-
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x400 || Something
|-
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100000 || Something
|-
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100002 || Something
|}


<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, uint32_t mode, void *pVA, void **pPA);</source>
== SceSysmemForKernel ==


=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
=== SceSysmemForKernel_A7D44B50 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0xF7250E6C
| 0.931.010-1.692.000 || 0xA7D44B50
|-
|-
| 3.63 || 0xA541E0CF
| 1.800.071-3.740.011 || not present
|}
|}


<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID address_space, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
A guessed name is sceKernelSetSysmemFuncForKernel.
 
Used by [[SceKernelSSProxy]]'s module_start to register a function that just calls [[SMC]] 0x10E (BusErrorClear).
 
The registered function is used internally by [[#sceKernelPhysicalMemReadForKernel]] and [[#sceKernelPhysicalMemWriteForKernel]].
 
<source lang="C">int SceSysmemForKernel_A7D44B50(void* pBusErrorClearFunc);</source>


=== sceKernelGetUIDAddressSpaceClassForKernel ===
=== sceKernelSysmemModuleStartAfterProcessmgrForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xAF180A3F
| 3.600.011-3.610.011 || 0xE7938BFB
|-
|-
| 3.63 || 0x99D3BF76
| 3.630.011-3.740.011 || 0x4E74DA48
|}
|}


This is a guessed name.
Temp name was sceKernelInitProcessMemoryForKernel.
 
Used by [[SceProcessmgr]].
 
<source lang="C">int sceKernelSysmemModuleStartAfterProcessmgrForKernel(void);</source>


=== sceKernelAddressSpaceGetPhyMemPartByIndexForKernel ===
=== sceKernelSysmemCleanerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x3F74E45C
| 3.60-3.61 || 0x43E81C4B
|-
|-
| 3.63 || 0x47C55DCC
| 3.63 || 0x50980298
|}
|}


<source lang="C">int sceKernelAddressSpaceGetPhyMemPartByIndexForKernel(SceUInt32 index, void **result);</source>
Only implemented in sysdbg build.
 
<source lang="C">int sceKernelSysmemCleanerForKernel(void);</source>


=== sceKernelCreatePhyMemPartForKernel ===
=== sceKernelStrnlenFromUserForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x2E36E0C4
| 0.931 || 0x9BC3DEAC
|-
|-
| 3.63 || 0xA2DFA383
| 3.60 || not present
|}
|}


Calls [[#sceKernelCreatePhyMemPartByPbaseForKernel]] with pbase = 0.
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source>


<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart *pPhyMemPart);</source>
=== sceKernelPhysicalMemWriteForKernel ===
 
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x63D83911
| 0.931.010-1.060.031 || 0x4B86A751
|-
|-
| 3.63 || 0x5CC56F87
| 1.50-3.740.011 || not present
|}
|}


<source lang="C">
Writes to physical address <code>pdest</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.
/*
type


ORed values:
<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source>
0x00002 : Shell
0x00004 : Game
0x00005 : PhyCont
0x00060 : CDialog
0x10000 : Lpddr2Main
0x30000 : Cdram


seen values:
=== sceKernelPhysicalMemReadForKernel ===
0x10002 : ShellLpddr2Main (shared)
0x10004 : GameLpddr2Main
0x10005 : PhyContLpddr2Main
0x10064 : GameCDialogLpddr2Main
 
0x30002 : ShellCdram
0x30004 : GameCdram
*/
 
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);
</source>
 
=== sceKernelDeletePhyMemPartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x2AEA9E09
| 0.931.010-1.060.031 || 0xF96E3AE2
|-
|-
| 3.63 || 0x3F72B2E7
| 1.50-3.740.011 || not present
|}
|}


<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
Temp name was memcpy_from_paddr.
 
Dest must be a virtual address and src must be a physical address. Returns copied size on success.
 
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source>


=== sceKernelGetPhyMemPartAllForKernel ===
=== sceKernelCopyFromUser32DomainForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x2F6F9C2C
| 0.931 || 0xD530399A
|-
|-
| 3.63 || 0x021053DD
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelGetPhyMemPartAllForKernel(int param_1, int param_2, void *pCountInBuffer);</source>
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source>


=== sceKernelGetPhyMemPartInfoForKernel ===
=== sceKernelCopyToUserProcTextDomainForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x67849418
| 0.931-3.60 || 0x30931572
|-
|-
| 3.60 || not present
| 3.65 || 0x2995558D
|}
|}


<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source>
Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.
 
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.
 
This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.
 
<source lang="c">SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);</source>


=== sceKernelGetPhyMemPartInfoByIDForKernel ===
=== sceKernelCopyToUserProcTextDomainForDBGPForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0xF4FA0575
| 3.60-3.61 || 0xE65EA709
|-
|-
| 3.63 || 0x029F5989
| 3.63 || 0x4345C61F
|}
|}


<source lang="C">
<source lang="C">int sceKernelCopyToUserProcTextDomainForDBGPForKernel(SceUID pid, void *dst, const void *src, SceSize length);</source>
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);
=== sceKernelCopyToUserTextDomainForKernel ===
</source>
 
=== sceKernelGetPhyMemPartInfoCoreForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 3.60 || 0x67BAD5B4
|-
|-
| 0.990-3.61 || 0x3650963F
| 3.65 || 0x5EF1DAAF
|-
| 3.63-3.65 || 0xB9B69700
|}
|}


<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source>
This is a guessed name. Temp name was sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.
 
Similar to [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]], but performed in the current address space.
 
In FW 3.60, [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]] calls this function to perform the copy after changing address space.
 
<source lang="c">SceInt32 sceKernelCopyToUserTextDomainForKernel(void *dst, const void *src, SceSize len);</source>


=== sceKernelGetPhyMemPartInfoForDebuggerForKernel ===
=== sceKernelCopyToUserDomainForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.50 || not present
| 0.931.010 || Not present
|-
|-
| 3.60-3.61 || 0x54E85275
| 3.60-3.61 || 0xA6F95838
|-
|-
| 3.63 || 0x73E03A38
| 3.63 || 0x499A9FFF
|}
|}


info size is 0xB0-bytes.
This is a guessed name. Temp name was sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.
 
Similar to [[SceSysmem#sceKernelCopyToUserTextDomainForKernel|sceKernelCopyToUserTextDomain]], but doesn't perform any DCache clean.
 
Uses the same DACR, 0x15450FC3, for the copy.


<source lang="C">int sceKernelGetPhyMemPartInfoForDebuggerForKernel(SceKernelPhyMemPart *pPhyMemPart, void *pInfo);</source>
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source>


=== sceKernelGrowPhyMemPartForKernel ===
=== sceKernelRegisterClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x6B3F4102
| 0.990 || 0x11761B77
|-
|-
| 3.63 || 0x5B434019
| 3.60 || not present
|}
|}


Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.
=== sceKernelFindClassByNameForKernel ===
 
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source>
 
=== sceKernelGrowPhyMemPartByPbaseForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 3.60 || 0x62989905
|-
|-
| 3.60-3.61 || 0x775AA5E3
| 3.65 || 0x7D87F706
|-
| 3.63 || 0x36FDA794
|}
|}


Temp name was sceKernelGrowPhyMemPartWithFlagsForKernel.
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **ppClass);</source>


Grows physical memory partition with pbase.
=== sceKernelGetUIDHeapClassForKernel ===
 
<source lang="C">int sceKernelGrowPhyMemPartByPbaseForKernel(SceKernelPhyMemPart *pPMP, SceUIntPtr pbase, SceSize psize);</source>
 
=== sceKernelGetGrownPhyMemPartSizeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 3.60-3.61 || 0x4CCA935D
|-
|-
| 3.60-3.61 || 0x4D809B47
| 3.63 || 0x7C878E94
|-
| 3.63 || 0xBC36755F
|}
|}


This is a guessed name.
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source>


Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.
=== sceKernelGetUIDMemBlockClassForKernel ===
 
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source>
 
=== SceSysmemForKernel_153A08A0 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x153A08A0
| 3.60-3.61 || 0xAF729575
|-
|-
| 3.63 || 0x6D563733
| 3.63 || 0x86681B64
|}
|}


Adds 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</source>


<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source>
=== sceKernelGetUIDDLinkClassForKernel ===
 
=== sceKernelPhyMemPartAllocPhyPageForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xD449547B
| 0.990-3.610.011 || 0xC105604E
|-
|-
| 3.63 || 0xB488C82E
| 3.630.011-3.740.011 || 0xE4193EB6
|}
|}


This is a guessed name.
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source>


=== sceKernelResetPhyMemPartForKernel ===
=== sceKernelGetUIDAddressSpaceClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEEB85560
| 3.60-3.61 || 0xAF180A3F
|-
|-
| 3.65 || 0x9B7E673F
| 3.63 || 0x99D3BF76
|}
|}


Used by [[SceProcessmgr#sceKernelResetGameBudgetForKernel]].
This is a guessed name.


Called with same argument as [[#sceKernelSetPhyPartGameForKernel]].
<source lang="C">SceClass *sceKernelGetUIDAddressSpaceClassForKernel(void);</source>


<source lang="C">int sceKernelResetPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
=== sceKernelGetUIDPartitionClassForKernel ===
 
=== sceKernelShowPhyMemPartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x5C257482
| 3.60-3.61 || 0x2791F109
|-
|-
| 3.63-3.65 || 0x8F0B5536
| 3.63 || 0x5C0FC6BE
|}
|}


Prints information about a Physical Memory Partition.
This is a guessed name.


This function is only implemented in internal system software.
<source lang="C">SceClass *sceKernelGetUIDPartitionClassForKernel(void);</source>
In external system software, it is replaced with a stub that does nothing.
 
<source lang="C">
SceInt32 sceKernelShowPhyMemPartForKernel(SceKernelPhyMemPart* pPMP);
</source>


=== sceKernelAllocKernelHeapForKernel ===
=== sceUIDDLinkClassInitForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x432EADA6
| 3.60-3.61 || 0x21285F40
|-
|-
| 3.60 || not present
| 3.63 || 0x7CDB7655
|}
|}


<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
Temp name was sceKernelCreateClassForKernel, sceUIDClassInitClassForKernel.
 
Calls [[SceSysmem#sceUIDClassInitClassForDriver|sceUIDClassInitClassForDriver]].
 
<source lang="C">int sceUIDDLinkClassInitForKernel(SceClass *pClass, const char *name, SceClass *subclass, SceSize itemsize, void *cstr, void *dstr);</source>


=== sceKernelGetHeapInfoForKernel ===
=== sceUIDClassGetClassInfoAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x91733EF4
| 0.990 || not present
|-
| 3.60-3.61 || 0xC0BF149E
|-
|-
| 3.63 || 0x17DB1A0A
| 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">
<source lang="C">
// 0.931-0.990:
typedef struct SceClassInfo {
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);
    SceSize size;
    SceClass *pClass;
    SceClass *pSubClass;
    const char *name;
} SceClassInfo;


// 3.60:
int sceUIDClassGetClassInfoAllForKernel(SceClassInfo *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceUInt32 level, SceKernelHeapInfo *pInfo);
</source>
</source>


=== sceKernelGetHeapInfoAllChunkForKernel ===
=== sceKernelCreateAddressSpaceForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xAC4C0EB1
| 0.990-3.60 || 0x4A3737F0
|-
|-
| 3.60 || not present
| 3.65 || 0x8EE89D2C
|}
|}


<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);</source>
<source lang="C">
// type: 0x10000001 (user AS)
// name: maybe titleid
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelCreateAddressSpaceOpt *pOpt);
</source>


=== sceKernelGetHeapInfoByPtrForKernel ===
=== sceKernelDeleteAddressSpaceForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931-3.60 || 0xF2D7FE3A
|-
|-
| 3.60-3.61 || 0x68451777
| 3.65 || 0x4A2E421D
|-
| 3.63 || 0x80A75187
|}
|}


Temp name was sceKernelGetHeapInfoByPointerForKernel.
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>


<source lang="C">int sceKernelGetHeapInfoByPtrForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>
=== sceKernelAddressSpaceSetNameForKernel ===
 
=== sceKernelGetFixedHeapInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x4FA4A624
| 0.990-1.50 || not present
|-
|-
| 3.63 || 0x890D9160
| 3.60 || 0x7BD56D6D
|-
| 3.65 || 0xCEBC4963
|}
|}


<source lang="C">int sceKernelGetFixedHeapInfoForKernel(SceUID heapid, SceKernelFixedHeapInfo *pInfo);</source>
Used by [[SceProcessmgr]].
 
<source lang="C">int sceKernelAddressSpaceSetNameForKernel(SceUID guid, const char *name);</source>


=== sceKernelGetFixedHeapInfoByPointerForKernel ===
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x219E90FD
| 0.931-3.60 || 0x67955EE9
|-
|-
| 3.63 || 0xA24D2C8D
| 3.65 || 0x7DF07D60
|}
|}


<source lang="C">int sceKernelGetFixedHeapInfoByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, SceKernelFixedHeapInfo *pInfo);</source>
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, SceUInt32 index, SceKernelPhyMemPart *pPhyMemPart);</source>


=== sceKernelFixedHeapSetHookForKernel ===
=== sceKernelAddressSpaceCtrSetObjectHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x8C8E2DD1
| 3.60-3.61 || 0xFC74A355
|-
|-
| 3.63 || 0xD4511A52
| 3.63 || 0xFA348CB1
|}
|}


<source lang="C">int sceKernelFixedHeapSetHookForKernel(SceUID heapid, void *hookdata);</source>
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
 
=== sceKernelNameHeapInsertForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x08AB3DAE
| 0.931-3.60 || 0x89CE1F31
|-
|-
| 3.63 || 0xB628B46B
| 3.65 || 0x36159CF5
|}
|}


<source lang="C">int sceKernelNameHeapInsertForKernel(const char *name, int flags, char **result);</source>
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source>


=== sceKernelNameHeapGetInfoForKernel ===
=== sceKernelAddressSpaceUnmapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.931-3.61 || 0xCE72839E
|-
|-
| 3.60-3.61 || 0xE443253B
| 3.63 || 0x73C38695
|-
| 3.63 || 0x01194C2E
|}
|}


=== sceKernelCreateObjectHeapForKernel ===
<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>
 
Example: 0.990 [[SceSysStateMgr]]:
<source lang="C">
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);
</source>
 
Example: 3.60 [[SceSysStateMgr]]:
<source lang="C">
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);
</source>
 
=== sceKernelAddressSpaceSetProcessForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x36830F46
| 0.990-3.61 || 0x2476B90F
|-
|-
| 3.63 || 0x9D8F3BE8
| 3.63 || 0x5E772E19
|}
|}


<source lang="C">int sceKernelCreateObjectHeapForKernel(SceUID pid, SceBool a2, SceFixedHeapHook *pHeapHook, SceKernelObjectHeap **ppObjectHeap);</source>
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID address_space, SceUID pid);</source>


=== sceKernelObjectHeapAllocForKernel ===
=== sceKernelAddressSpaceChangeMMUContextForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x7FDF483A
| 0.931-3.61 || 0x653B0849
|-
|-
| 3.63 || 0xEBFC8E10
| 3.63 || 0x20D01AFA
|}
|}


This is a guessed name.
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.


<source lang="C">void *sceKernelObjectHeapAllocForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size);</source>
<source lang="C">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source>


=== sceKernelObjectHeapSetResourceLimitForKernel ===
=== sceKernelAddressSpaceGetMMUContextForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x98E6905B
| 0.990 || not present
|-
| 3.10-3.61 || 0x9894B9E1
|-
|-
| 3.63 || 0xDFA1EB57
| 3.63 || 0xA7C91D62
|}
|}


=== sceKernelObjectHeapSetResourceLimitAllForKernel ===
This is a guessed name.
 
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID address_space, SceKernelMMUContext **ppCtx);</source>
 
=== SceSysmemForKernel_FBEF93AA ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x5409397F
| 0.931 || not present
|-
| 0.990-3.01 || 0xFBEF93AA
|-
|-
| 3.63 || 0x067F2550
| 3.10-3.74 || not present
|}
|}


<source lang="C">int sceKernelObjectHeapSetResourceLimitAllForKernel(int a1, int a2, int a3);</source>
Maybe gets MMU context. Maybe was replaced by [[#sceKernelAddressSpaceGetMMUContextForKernel]].


=== sceUIDCreateEntryHeapForKernel ===
<source lang="C">int SceSysmemForKernel_FBEF93AA(SceUID address_space, void* pOut);</source>
 
=== sceKernelAddressSpaceGetTimerVbaseForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x19CAEF35
| 0.990 || not present
|-
| 0.996.090-3.610.011 || 0x7D92B2D3
|-
|-
| 3.65 || 0x89BEF058
| 3.630.011-3.740.011 || 0xFA1A73DD
|}
|}


<source lang="C">int sceUIDCreateEntryHeapForKernel(SceUID pid, SceUID heap_guid);</source>
<source lang="C">int sceKernelAddressSpaceGetTimerVbaseForKernel(SceUID address_space, void **ppBase);</source>


=== sceUIDDeleteEntryHeapForKernel ===
=== sceKernelGetAddressSpaceInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xF0C3FCFC
| 0.990.000-3.610.011 || 0x4492421F
|-
|-
| 3.65 || 0xF6D09BD9
| 3.630.011-3.740.011 || 0xC3EF4055
|}
|}


<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID uid);</source>
This is a guessed name..


=== sceUIDEntryHeapCloseAllPUIDForKernel ===
<source lang="C">int sceKernelGetAddressSpaceInfoForKernel(SceUID address_space, SceKernelAddressSpaceInfo *pInfo);</source>
 
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xFAF96C1F
| 0.931-0.990 || 0x671A3444
|-
|-
| 3.65 || 0x133024A5
| 3.60 || not present
|}
|}


<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID uid);</source>
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>.


=== sceKernelUIDEntryHeapGetInfoForKernel ===
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source>
 
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.931 || 0xCB6E1C80
|-
|-
| 3.60-3.61 || 0x686AA15C
| 3.60 || not present
|-
| 3.63 || 0xCCD47B97
|}
|}


Official name may also be sceUIDEntryHeapGetInfoForKernel (seen in 4.00).
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID address_space, const void *addr, void *pInfo);</source>


<source lang="C">
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===
typedef struct SceUIDEntryHeapInfo {
{| class="wikitable"
    SceSize size; //<! Size of this structure (0x18)
|-
    SceSize objectSize;
! Version !! NID
    SceSize totalHeapSize;
|-
    SceSize totalItemCount;
| 0.931-0.990 || 0x1A898F2E
    SceSize unk10;
|-
    SceSize unk14;
| 3.60 || not present
} SceUIDEntryHeapInfo;
|}
 
<source lang="C">
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x4008];
} SceKernelAddressSpaceMMUL1AllInfo;


SceInt32 sceKernelUIDEntryHeapGetInfoForKernel(SceUID entryHeapId, SceUIDEntryHeapInfo* pInfo);
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID address_space, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source>
</source>


=== sceUIDEntryHeapSetHookForKernel ===
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xCD985AEB
| 0.931 || 0x1E1AA29B
|-
|-
| 3.63 || 0x666C878F
| 3.60 || not present
|}
|}


?Implemented in internal system software.? Not implemented in external system software.
<source lang="C">
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x400];
} SceKernelAddressSpaceMMUL2AllInfo;


<source lang="C">int sceUIDEntryHeapSetHookForKernel(SceUID guid, void *pHook);</source>
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID address_space, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source>


=== sceKernelPrintHeapSegmentListForKernel ===
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x2EE50533
| 0.990-3.61 || 0xCC7BB240
|-
|-
| 3.63 || 0x82059651
| 3.63 || 0x0B5A3E93
|}
|}


?Implemented in internal system software.? Not implemented in external system software.
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>


=== sceGUIDRegisterForKernel ===
=== sceKernelAddressSpaceVAtoPAForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0xAF42AAD5
| 0.990-3.61 || 0xF2179820
|-
|-
| 3.63 || 0x6DB44A42
| 3.63 || 0x1BAF8C0B
|}
|}


<source lang="C">SceUID sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, SceUInt32 mode, void *pVA, void **pPA);</source>


=== sceGUIDUnregisterForKernel ===
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xE79BBCF2
| 0.990-3.61 || 0xF7250E6C
|-
|-
| 3.60 || not present
| 3.63 || 0xA541E0CF
|}
|}


<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID address_space, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>


=== sceGUIDOpenByGUIDForKernel ===
=== sceKernelAddressSpaceGetPhyMemPartByIndexForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0xCF53EEE4
| 3.60-3.61 || 0x3F74E45C
|-
|-
| 3.63 || 0x89D33DF0
| 3.63 || 0x47C55DCC
|}
|}


=== sceGUIDNameForKernel ===
<source lang="C">int sceKernelAddressSpaceGetPhyMemPartByIndexForKernel(SceUInt32 index, void **result);</source>
 
=== sceKernelAddressSpaceGetPartitionByIndexForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-1.060.031 || 0x250EE289
| 3.60-3.61 || 0x210DB518
|-
|-
| 1.50-3.740.011 || not present
| 3.63 || 0x1F84FE44
|}
|}


<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>
This is a guessed name.


=== sceGUIDtoClassForKernel ===
<source lang="C">SceUIDPartitionObject *sceKernelAddressSpaceGetPartitionByIndexForKernel(void *pAS, int pindex);</source>
 
=== sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x66636970
| 3.60-3.61 || 0x46A5CB84
|-
|-
| 3.63 || 0x368F1C36
| 3.63 || 0xC3F9607E
|}
|}


<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID uid);</source>
<source lang="C">int sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel(SceUID asid, int a2, int a3, int a4);</source>


=== sceGUIDGetObjectWithClassForKernel ===
=== sceKernelCheckAddressSpaceForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x7ABFA9A7
| 3.60-3.61 || 0x8B07BB52
|-
|-
| 3.63 || 0x0E43E113
| 3.63 || 0x16A54BFE
|}
|}


Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.
This is a guessed name.


<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>
<source lang="C">int sceKernelCheckAddressSpaceForKernel(void);</source>


=== sceGUIDGetUIDVectorByClassForKernel ===
=== sceKernelGetKernelAddressSpaceForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.600.011 || 0xEC7D36EF
| 1.500.151-3.610.011 || 0xC38B4D52
|-
|-
| 3.630.011-3.740.011 || 0x52137FA3
| 3.630.011-3.740.011 || 0x2E5CC243
|}
|}


Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.
<source lang="C">void* sceKernelGetKernelAddressSpaceForKernel(void);</source>


<source lang="C">
=== sceKernelCreatePhyMemPartForKernel ===
/*
* 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.010-1.060.031 || not present
| 0.931-3.61 || 0x2E36E0C4
|-
|-
| 1.500.151-3.610.011 || 0x59F577E8
| 3.63 || 0xA2DFA383
|-
| 3.630.011-3.740.011 || 0xE9957329
|}
|}


Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.
Calls [[#sceKernelCreatePhyMemPartByPbaseForKernel]] with pbase = 0.


<source lang="C">
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart **pPhyMemPart);</source>
/*
* 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>


=== sceGUIDGetEntryForKernel ===
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x45F2A59C
| 0.931-3.61 || 0x63D83911
|-
|-
| 3.63 || 0xFF464A49
| 3.63 || 0x5CC56F87
|}
|}


<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceGUIDEntry **ppEntry);</source>
<source lang="C">
/*
type


=== sceGUIDGetEntryInfoAllForKernel ===
ORed values:
{| class="wikitable"
0x00002 : Shell
|-
0x00004 : Game
! Version !! NID
0x00005 : PhyCont
|-
0x00060 : CDialog
| 0.990.000-3.610.011 || 0x2A79C51C
0x10000 : Lpddr2Main
|-
0x30000 : Cdram
| 3.630.011-3.740.011 || 0x3BF0DE65
|}


<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUInt32 vis_level, SceUID guid, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source>
seen values:
0x10002 : ShellLpddr2Main (shared)
0x10004 : GameLpddr2Main
0x10005 : PhyContLpddr2Main
0x10064 : GameCDialogLpddr2Main
 
0x30002 : ShellCdram
0x30004 : GameCdram
*/


=== sceGUIDGetEntryInfoClassForKernel ===
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);
</source>
 
=== sceKernelDeletePhyMemPartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.610.011 || 0xE90CFD62
| 0.931-3.61 || 0x2AEA9E09
|-
|-
| 3.630.011-3.740.011 || 0x71E934DB
| 3.63 || 0x3F72B2E7
|}
|}


<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID uid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, void *pInfoClass);</source>
<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>


=== scePUIDGetEntryInfoAllForKernel ===
=== sceKernelGetPhyMemPartAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 0.931-3.61 || 0x2F6F9C2C
|-
|-
| 1.800.071-3.610.011 || 0x2770A7D7
| 3.63 || 0x021053DD
|-
| 3.630.011-3.740.011 || 0x3C3005EE
|}
|}


<source lang="C">int scePUIDGetEntryInfoAllForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source>
<source lang="C">int sceKernelGetPhyMemPartAllForKernel(SceUInt32 vis_level, SceUID *pVector, SceSize vectorSize, SceUInt32 *ret_num);</source>


=== sceKernelGetPhyPartKernelForKernel ===
=== sceKernelGetPhyMemPartInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x4D38F861
| 0.931-0.990 || 0x67849418
|-
|-
| 3.63-3.65 || 0x0164D817
| 3.60 || not present
|}
|}


return gpPhyPartKernel;
<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source>


<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source>
=== sceKernelGetPhyMemPartInfoByIDForKernel ===
 
=== sceKernelGetPhyPartToolForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0xF8E95A5A
| 0.931-3.61 || 0xF4FA0575
|-
|-
| 3.63-3.65 || 0x0B1B4ACA
| 3.63 || 0x029F5989
|}
|}


<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source>
<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;
 
int sceKernelGetPhyMemPartInfoByIDForKernel(SceUID guid, SceKernelPhyMemPartInfo *pInfo);
</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-3.65 || 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-3.65 || 0x3753C584
| 3.63 || 0x73E03A38
|}
|}


<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source>
info size is 0xB0-bytes.


=== sceKernelPhyMemLowAllocForKernel ===
<source lang="C">int sceKernelGetPhyMemPartInfoForDebuggerForKernel(SceKernelPhyMemPart *pPhyMemPart, void *pInfo);</source>
 
=== sceKernelGrowPhyMemPartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x5E169FEF
| 0.990-3.61 || 0x6B3F4102
|-
|-
| 3.63 || 0xEA98CCE1
| 3.63 || 0x5B434019
|}
|}


Allocate a range of physically contiguous "pages" from a PhyMemLow object.
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.


<source lang="C">
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, 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 ===
=== sceKernelGrowPhyMemPartByPbaseForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x0FD6B756
| 0.990 || not present
|-
| 3.60-3.61 || 0x775AA5E3
|-
|-
| 3.63 || 0x2CFD8C9A
| 3.63 || 0x36FDA794
|}
|}


<source lang="C">
Temp name was sceKernelGrowPhyMemPartWithFlagsForKernel.
// type must be 0x10002
 
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
Grows physical memory partition with pbase.
</source>
 
<source lang="C">int sceKernelGrowPhyMemPartByPbaseForKernel(SceKernelPhyMemPart *pPMP, SceUIntPtr pbase, SceSize psize);</source>


=== sceKernelGetPhyMemLowInfoForKernel ===
=== sceKernelGetGrownPhyMemPartSizeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x06A4DA6C
| 0.990 || not present
|-
| 3.60-3.61 || 0x4D809B47
|-
|-
| 3.60 || not present
| 3.63 || 0xBC36755F
|}
|}


<source lang="C">
This is a guessed name.
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);
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>


=== sceKernelPhyMemLowFreeForKernel ===
=== SceSysmemForKernel_153A08A0 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0x18B99FDD
| 0.990-3.61 || 0x153A08A0
|-
|-
| 3.63 || 0x844DF3DA
| 3.63 || 0x6D563733
|}
|}


Free a range of physical "pages" from a PhyMemLow object.
Adds 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.


<source lang="C">
<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source>
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);
</source>


=== sceKernelAllocMemBlockByCommandForKernel ===
=== sceKernelAllocPhyPageForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xCA91B9D5
| 0.990-3.61 || 0xD449547B
|-
|-
| 3.63 || 0x455B0A4C
| 3.63-3.74 || 0xB488C82E
|}
|}


<source lang="C">
Temp name was sceKernelPhyMemPartAllocPhyPageForKernel.
typedef struct SceKernelMemBlockAllocCommand { // size is 0x94 on FW 3.65
 
  SceSize size; // Size of this structure
<source lang="C">int sceKernelAllocPhyPageForKernel(void *pPhyMemPart, SceSize size, void **ppPhyPage);</source>
  SceUInt32 code;
 
  char* name;
=== sceKernelResetPhyMemPartForKernel ===
  char unk_8[0x74];
{| class="wikitable"
  void* typeInfo;
|-
  char unk_0x84[0x10];
! Version !! NID
} SceKernelMemBlockAllocCommand;
|-
| 3.60 || 0xEEB85560
|-
| 3.65 || 0x9B7E673F
|}
 
Used by [[SceProcessmgr#sceKernelResetGameBudgetForKernel]].
 
Called with same argument as [[#sceKernelSetPhyPartGameForKernel]].


int sceKernelAllocMemBlockByCommandForKernel(SceKernelMemBlockAllocCommand *pCommand);
<source lang="C">int sceKernelResetPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
</source>


=== sceKernelAllocSimpleMemBlockForKernel ===
=== sceKernelShowPhyMemPartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0xF81F4672
| 3.60-3.61 || 0x5C257482
|-
|-
| 3.63 || 0x814CDCC5
| 3.63-3.65 || 0x8F0B5536
|}
|}


<source lang="C">
Prints information about a Physical Memory Partition.
typedef struct SceKernelSimpleMemBlock {
 
char unk_0[0x14];
Only implemented in sysdbg build.
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">SceInt32 sceKernelShowPhyMemPartForKernel(SceKernelPhyMemPart *pPMP);</source>
</source>


=== sceKernelGetSimpleMemBlockBaseForKernel ===
=== sceKernelFreePhyPageForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x0A8D14EC
| 0.990-3.61 || 0x00BC5B4A
|-
|-
| 3.63 || 0x39D5A3B7
| 3.63 || 0x193A9D2F
|}
|}


<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>
<source lang="C">int sceKernelFreePhyPageForKernel(void *pPhyMemPart, void *pPage);</source>


=== sceKernelGetMemBlockInfoAllForKernel ===
=== sceKernelSetPhyMemPartHookForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xFEF54604
| 3.60-3.61 || 0x17F1AA22
|-
|-
| 3.63 || 0x1D19C864
| 3.63 || 0x31FA81B5
|}
|}


<source lang="C">int sceKernelGetMemBlockInfoAllForKernel(void *pPart, int level, void *pInfoBuffer);</source>
This is a guessed name.
 
Only implemented in sysdbg build.


=== sceKernelGetMemBlockInfoSimpleForKernel ===
<source lang="C">int sceKernelSetPhyMemPartHookForKernel(void *pHook);</source>
 
=== sceKernelSetPhyMemPartLogCallbackForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x2364A170
| 3.60-3.61 || 0x72E7BFAC
|-
|-
| 3.63 || 0xBA441FD0
| 3.63 || 0x93D0A183
|}
|}


<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source>
This is a guessed name.
 
Only implemented in sysdbg build.


=== sceKernelGetMemBlockTypeForKernel ===
<source lang="C">int sceKernelSetPhyMemPartLogCallbackForKernel(void *pCallbacks);</source>


=== sceKernelAllocKernelHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x289BE3EC
| 0.931-0.990 || 0x432EADA6
|-
|-
| 3.63 || 0xD44FE44B
| 3.60 || not present
|}
|}


<source lang="c">
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
/***
 
* Gets the memory block type of a memory block
=== sceKernelGetHeapInfoForKernel ===
*
* @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>
 
=== sceKernelFreeSimpleMemBlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0xA1FFA2C9
| 0.931-3.61 || 0x91733EF4
|-
|-
| 3.63 || 0xA4DB88E1
| 3.63 || 0x17DB1A0A
|}
|}


=== sceKernelAllocPartitionMemBlockForKernel ===
<source lang="C">
// 0.931-0.990:
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);
 
// 3.60:
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceUInt32 level, SceKernelHeapInfo *pInfo);
</source>
 
=== sceKernelGetHeapInfoAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x5FFE4B79
| 0.990-3.61 || 0x48D87E17
|-
|-
| 3.65 || 0x6DB46017
| 3.63 || 0x1380E144
|}
|}


Temp name was sceKernelAllocSystemCallTableForKernel.
This is a guessed namee.


<source lang="C">
<source lang="C">int sceKernelGetHeapInfoAllForKernel(SceUInt32 vis_level, void *pInfo, SceSize infoSize, SceUInt32 *pnInfo);</source>
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);
</source>


=== sceKernelPartitionGetInfoForKernel ===
=== sceKernelGetHeapInfoAllChunkForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x7BE4D3D1
| 0.931-0.990 || 0xAC4C0EB1
|-
|-
| 3.63 || 0xFB101B86
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelPartitionGetInfoForKernel(SceUID part_id, void *pInfo);</source>
<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);</source>


=== sceKernelGetPhyPageResetForKernel ===
=== sceKernelGetHeapInfoByPtrForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0xEB350679
| 0.931-0.990 || not present
|-
| 3.60-3.61 || 0x68451777
|-
|-
| 3.63 || 0x8FD11E02
| 3.63 || 0x80A75187
|}
|}


<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>
Temp name was sceKernelGetHeapInfoByPointerForKernel.
 
<source lang="C">int sceKernelGetHeapInfoByPtrForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>


=== sceKernelFreePhyPageForKernel ===
=== sceKernelReallocHeapMemoryForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x00BC5B4A
| 3.60-3.61 || 0xFDC0EA11
|-
|-
| 3.63 || 0x193A9D2F
| 3.63 || 0x8EE8B917
|}
|}


<source lang="C">int sceKernelFreePhyPageForKernel(void *pPhyMemPart, void *pPage);</source>
This is a guessed name.
 
<source lang="C">void *sceKernelReallocHeapMemoryForKernel(SceUID heapid, void *ptr, SceSize size);</source>


=== sceGUIDKernelCreateForKernel ===
=== sceKernelHeapEnableModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xE6FAD50A
| 3.60-3.61 || 0xF1433852
|-
|-
| 3.60 || not present
| 3.63 || 0x0B36F7F9
|}
|}


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 sceKernelHeapEnableModeForKernel(SceUID heapid, SceUInt32 mode);</source>


=== sceGUIDKernelCreateWithAttrForKernel ===
=== sceKernelHeapDiableModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x53E1FFDE
| 3.60-3.61 || 0x71869119
|-
|-
| 3.63 || 0x6D26B066
| 3.63 || 0x6E82D5A0
|}
|}


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">int sceKernelHeapDiableModeForKernel(SceUID heapid, SceUInt32 mode);</source>


=== sceGUIDKernelCreateWithOptForKernel ===
=== sceKernelHeapMemoryGetAllocateSizeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-0.995 || not present
| 3.60-3.61 || 0x60735311
|-
|-
| 0.996-3.60 || 0xDF0288D7
| 3.63 || 0xD124075A
|-
| 3.65 || 0xFB6390CE
|}
|}


This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.
This is a guessed name.


<source lang="c">
<source lang="C">SceSize sceKernelHeapMemoryGetAllocateSizeForKernel(void *ptr);</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);
=== sceKernelPrintHeapSegmentListForKernel ===
</source>
 
=== SceSysmemForKernel_BD33EDDF ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xBD33EDDF
| 3.60-3.61 || 0x2EE50533
|-
|-
| 3.60 || not present
| 3.63 || 0x82059651
|}
|}


Gets thread's name. Returns 0 on success.
Only implemented in sysdbg build.


<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source>
<source lang="C">int sceKernelPrintHeapSegmentListForKernel(SceUID heap_guid);</source>


=== scePUIDGetAttrForKernel ===
=== sceKernelGetKernelFixedHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x86E83C0D
| 0.990.000-3.610.011 || 0x68CB9266
|-
|-
| 3.63 || 0x96BD47D1
| 3.630.000-3.740.011 || 0x3717C322
|}
|}


<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID puid, SceUInt32 *pAttr);</source>
Temp name was sceKernelGetFixedHeapBySizeForKernel.
 
<source lang="C">SceUIDFixedHeapObject *sceKernelGetKernelFixedHeapForKernel(SceSize size);</source>


=== scePUIDReleaseObjectForKernel ===
=== sceKernelGetFixedHeapInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x3FCA782B
| 0.990.000-3.610.011 || 0x4FA4A624
|-
|-
| 3.63 || 0xCE561224
| 3.630.000-3.740.011 || 0x890D9160
|}
|}


<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID puid);</source>
<source lang="C">int sceKernelGetFixedHeapInfoForKernel(SceUID heapid, SceKernelFixedHeapInfo *pInfo);</source>


=== scePUIDGetInfoForKernel ===
=== sceKernelGetFixedHeapInfoByPointerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.990.000-3.610.011 || 0x219E90FD
|-
|-
| 3.60-3.61 || 0x12ED88AE
| 3.630.000-3.740.011 || 0xA24D2C8D
|-
| 3.63 || 0x857701D4
|}
|}


<source lang="C">
<source lang="C">int sceKernelGetFixedHeapInfoByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, SceKernelFixedHeapInfo *pInfo);</source>
// pInfo size is 0x14 bytes
int scePUIDGetInfoForKernel(SceUID pid, SceUID puid, void *pInfo);
</source>


=== sceGUIDGetVisibilityLevelForKernel ===
=== sceKernelFixedHeapSetHookForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xC69666C3
| 0.931.010-1.06 || not present
|-
| 1.500.151-3.610.011 || 0x8C8E2DD1
|-
|-
| 3.63 || 0x4E923101
| 3.630.000-3.740.011 || 0xD4511A52
|}
|}


=== sceGUIDSetVisibilityLevelForKernel ===
<source lang="C">int sceKernelFixedHeapSetHookForKernel(SceUID heapid, void *hookdata);</source>
 
=== sceKernelFixedHeapAllocObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xCB8D03C0
| 0.990.000-3.610.011 || 0xC8672A3D
|-
|-
| 3.63 || 0xE8CC2166
| 3.630.000-3.740.011 || 0xABA5313C
|}
|}


Sets visibilityLevel into guid's GUIDEntry.
This is a guessed name.


<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source>
<source lang="C">void *sceKernelFixedHeapAllocObjectForKernel(SceUIDFixedHeapObject *pFixedHeap);</source>


=== sceGUIDFindByObjectForKernel ===
=== sceKernelFixedHeapFreeObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x95ABFDC3
| 0.990.000-3.610.011 || 0x571660AA
|-
|-
| 3.63 || 0xEC90AA11
| 3.630.000-3.740.011 || 0x93344755
|}
|}


<source lang="C">
This is a guessed name.
// return value: to reverse, should be either SceUID guid or void* pObj
 
int sceGUIDFindByObjectForKernel(uint32_t uid_or_ptr);
<source lang="C">int sceKernelFixedHeapFreeObjectForKernel(SceUIDFixedHeapObject *pFixedHeap, void *pObject);</source>
</source>


=== sceGUIDFindByNameForKernel ===
=== sceKernelFixedHeapSetHookByPointerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xCEBA8031
| 0.931.010-2.12 || not present
|-
| 2.500.071-3.610.011 || 0x3EC2345B
|-
|-
| 3.63 || 0xBDE00106
| 3.630.000-3.740.011 || 0x811C452B
|}
|}


<source lang="C">
This is a guessed name.
// return value: to reverse, should be either SceUID guid or void* pObj
 
int sceGUIDFindByNameForKernel(const char* name);
<source lang="C">int sceKernelFixedHeapSetHookByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, void *a2);</source>
</source>


=== SceSysmemForKernel_942D15FC ===
=== sceKernelNameHeapInsertForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x942D15FC
| 0.990-3.61 || 0x08AB3DAE
|-
|-
| 3.63 || 0xEB48682E
| 3.63 || 0xB628B46B
|}
|}


Computes MurmurHash.
<source lang="C">int sceKernelNameHeapInsertForKernel(const char *name, int flags, char **result);</source>
 
Used to get GUID by name.
 
<source lang="C">SceUInt32 SceSysmemForKernel_942D15FC(const char *key, SceSize len, SceUInt32 seed);</source>


=== sceGUIDFindByNameAllForKernel ===
=== sceKernelNameHeapDeleteForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x4B5C85AC
| 0.990-3.61 || 0x9C7B62AB
|-
|-
| 3.63 || 0xF49C0BE8
| 3.63 || 0x634D0D0C
|}
|}


<source lang="C">
name max length is 31 characters.
// return value: to reverse, should be either SceUID guid or void* pObj
 
int sceGUIDFindByNameAllForKernel(const char* name);
<source lang="C">int sceKernelNameHeapDeleteForKernel(const char *name, SceUInt32 flag);</source>
</source>


=== sceGUIDGetPIDForKernel ===
=== sceKernelNameHeapLinkForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xCF5A2311
| 3.60-3.61 || 0xEC1293D2
|-
|-
| 3.63 || 0xBD42A0FC
| 3.63 || 0x40965FD1
|}
|}


Returns Process ID for guid.
<source lang="C">int sceKernelNameHeapLinkForKernel(const char *name, int flags, void **result);</source>


<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source>
=== sceKernelNameHeapFindForKernel ===
 
=== sceGUIDSetPIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x812E7A53
| 3.60-3.61 || 0xB543A23C
|-
|-
| 3.63 || 0x46DF8C8A
| 3.63 || 0x9F1A9AA6
|}
|}


Sets Process ID for guid.
<source lang="C">int sceKernelNameHeapFindForKernel(const char *name, int flags, void **result);</source>


<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source>
=== sceKernelNameHeapGetKeyForKernel ===
 
=== sceGUIDSetCNOAForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x8D6AF468
| 3.60-3.61 || 0x942D15FC
|-
|-
| 3.63 || 0x5EDDEEB5
| 3.63 || 0xEB48682E
|}
|}


Setting Class Name Object Attr.
This is a guessed name. Computes MurmurHash. Used to get UID by name.


<source lang="C">SceUID sceGUIDSetCNOAForKernel(SceClass *pClass, const char *name, void *pObject, SceUInt32 attr);</source>
<source lang="C">SceUInt32 sceKernelNameHeapGetKeyForKernel(const char *key, SceSize len, SceUInt32 seed);</source>


=== sceGUIDSetForKernel ===
=== sceKernelNameHeapGetInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.61 || 0xD7B323EB
| 0.931.010-0.990 || not present
|-
| 0.996.090-3.610.011 || 0xE443253B
|-
|-
| 3.63 || 0xBF275C5A
| 3.630.000-3.740.011 || 0x01194C2E
|}
|}


Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.
<source lang="C">int sceKernelNameHeapGetInfoForKernel(void *pInfo);</source>


<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
=== sceKernelCreateObjectHeapForKernel ===
 
=== sceUIDReferObjectWithLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xF79B52B2
| 3.60-3.61 || 0x36830F46
|-
|-
| 3.60 || not present
| 3.63 || 0x9D8F3BE8
|}
|}


<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source>
<source lang="C">int sceKernelCreateObjectHeapForKernel(SceUID pid, SceBool a2, SceFixedHeapHook *pHeapHook, SceKernelObjectHeap **ppObjectHeap);</source>


=== scePUIDtoGUIDWithDebugForKernel ===
=== sceKernelCreateObjectHeapWithHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xB3E2AA7A
| 3.60-3.61 || 0x7FD757FE
|-
|-
| 3.63 || 0x188C8742
| 3.63 || 0x660DC18A
|}
|}


This is a guessed name.
This is a guessed name.


<source lang="C">SceUID scePUIDtoGUIDWithDebugForKernel(SceUID pid, SceUID puid);</source>
<source lang="C">int sceKernelCreateObjectHeapWithHeapForKernel(SceKernelObjectHeap *pObjectHeap, SceUID pid, SceUID heapid);</source>


=== sceKernelAllocForKernel ===
=== sceKernelDeleteObjectHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xC0A4D2F3
| 3.60-3.61 || 0x080BA2F3
|-
|-
| 3.65 || 0x85571907
| 3.63 || 0x2F526AB8
|}
|}


<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>
This is a guessed name.
 
<source lang="C">int sceKernelDeleteObjectHeapForKernel(SceKernelObjectHeap *pObjectHeap);</source>


=== sceKernelAllocWithOptForKernel ===
=== sceKernelObjectHeapAllocForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xA2CD1697
| 3.60-3.61 || 0x7FDF483A
|-
|-
| 3.63 || 0xCF3C3F7A
| 3.63 || 0xEBFC8E10
|}
|}


<source lang="C">
This is a guessed name.


typedef struct SceAllocOpt {
<source lang="C">void *sceKernelObjectHeapAllocForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size);</source>
    SceSize size;  // 0x14
    SceSize data04; // maybe len align?
    SceSize align;
    int data0C;
    int data10;
} SceAllocOpt;
 
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);
 
</source>


=== sceKernelFreeForKernel ===
=== sceKernelObjectHeapFreeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xABAB0FAB
| 3.60-3.61 || 0x131CEF52
|-
|-
| 3.65 || 0x4233C16D
| 3.63 || 0x17D3D4BD
|}
|}
<source lang="C">
void sceKernelFreeForKernel(void *ptr);
</source>


=== SceSysmemForKernel_C38D61FC ===
This is a guessed name.
 
<source lang="C">int sceKernelObjectHeapFreeForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size, void *pObject);</source>
 
=== sceKernelObjectHeapSetResourceLimitForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xC38D61FC
| 3.60-3.61 || 0x98E6905B
|-
|-
| 3.60 || not present
| 3.63 || 0xDFA1EB57
|}
|}


Calls [[#SceSysmemForDriver_89A44858]].
<source lang="C">int sceKernelObjectHeapSetResourceLimitForKernel(int a1, int a2, int a3, int a4, int a5);</source>


=== sceUIDGetObjectForKernel ===
=== sceKernelObjectHeapSetResourceLimitAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xC4893914
| 3.60-3.61 || 0x5409397F
|-
|-
| 3.60 || not present
| 3.63 || 0x067F2550
|}
|}


Calls [[#sceGUIDGetObjectForDriver]].
<source lang="C">int sceKernelObjectHeapSetResourceLimitAllForKernel(SceKernelObjectHeap *pObjectHeap, int a2, int a3);</source>
 
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source>


=== scePUIDReferObjectForKernel ===
=== sceKernelObjectHeapSetSizeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x620E00E7
| 3.60-3.61 || 0x6427560F
|-
|-
| 3.63 || 0x2C15615F
| 3.63 || 0xB591E49F
|}
|}


<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source>
This is a guessed name.
 
<source lang="C">int sceKernelObjectHeapSetSizeForKernel(SceUInt32 index, SceUInt32 size);</source>


=== SceSysmemForKernel_7C797940 ===
=== sceKernelGetObjectHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x7C797940
| 3.60-3.61 || 0x3B75CBED
|-
|-
| 3.60 || not present
| 3.63 || 0x857408DA
|}
|}


Calls [[#SceSysmemForKernel_620E00E7]] or [[#sceGUIDReferObjectForDriver]].
This is a guessed name.
 
<source lang="C">SceKernelObjectHeap *sceKernelGetObjectHeapForKernel(void);</source>


=== sceUIDtoObjectForKernel ===
=== sceKernelGetSharedObjectHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xED221825
| 3.60-3.61 || 0xBF0294E4
|-
|-
| 3.65 || 0xFA6C098C
| 3.63 || 0x791D6205
|}
|}


Calls [[SceSysmem#sceGUIDGetObjectForDriver]].
This is a guessed name.


<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>
<source lang="C">SceKernelObjectHeap *sceKernelGetSharedObjectHeapForKernel(void);</source>


=== sceKernelVSlotMapProcMemoryForKernel ===
=== SceSysmemForKernel_B8D769C6 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xFAD03241
| 3.60-3.61 || 0xB8D769C6
|-
|-
| 3.63 || 0x14D3807B
| 3.63 || 0xDBEACE2C
|}
|}


<source lang="C">int sceKernelVSlotMapProcMemoryForKernel(SceUID pid, void* addr, SceSize size, SceUInt32 flag, SceKernelVSlot *pVslot, int *pBaseAddrOrOffset);</source>
<source lang="C">int SceSysmemForKernel_B8D769C6(SceKernelObjectHeap *pObjectHeap, void *info);</source>


=== sceKernelVSlotUnmapProcMemoryForKernel ===
=== sceUIDCreateEntryHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x789CD5BF
| 0.990-3.60 || 0x19CAEF35
|-
|-
| 3.63 || 0x4EEF69C7
| 3.65 || 0x89BEF058
|}
|}


<source lang="C">int sceKernelVSlotUnmapProcMemoryForKernel(SceKernelVSlot* pVslot);</source>
<source lang="C">int sceUIDCreateEntryHeapForKernel(SceUID pid, SceUID heap_guid);</source>


=== SceSysmemForKernel_48D87E17 ===
=== sceUIDDeleteEntryHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x48D87E17
| 0.990-3.60 || 0xF0C3FCFC
|-
|-
| 3.63 || 0x1380E144
| 3.65 || 0xF6D09BD9
|}
|}


=== SceSysmemForKernel_9C7B62AB ===
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID guid);</source>
 
=== sceUIDRegisterForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.61 || 0x9C7B62AB
| 0.931-0.990 || 0x59162CD7
|-
|-
| 3.63 || 0x634D0D0C
| 3.60 || not present
|}
|}


<source lang="C">
Calls [[#sceGUIDRegisterForKernel]].
// name max length is 31 characters
 
int SceSysmemForKernel_9C7B62AB(const char *name, SceUInt32 flag);
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
</source>


=== sceKernelFixedHeapAllocObjectForKernel ===
=== sceUIDObjectSetClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xC8672A3D
| 0.931-0.990 || 0x226DE851
|-
|-
| 3.63 || 0xABA5313C
| 3.60 || not present
|}
|}


This is a guessed name.
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>


<source lang="C">void *sceKernelFixedHeapAllocObjectForKernel(SceUIDFixedHeapObject *pFixedHeap);</source>
=== sceUIDGetUIDVectorByClassForKernel ===
 
=== sceKernelSetMemBlockDebugCallbackForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x01DE3AB7
| 0.931.010-1.060.031 || 0xA2F03233
|-
|-
| 3.63 || 0xF57A97A0
| 1.500.151-3.740.011 || not present
|}
|}


This is a guessed name.
Calls [[#sceGUIDGetUIDVectorByClassForKernel]].


Only implemented in sysdbg build.
=== sceUIDGetProcUIDVectorByClassForKernel ===
 
<source lang="C">int sceKernelSetMemBlockDebugCallbackForKernel(void *pCallbacks);</source>
 
=== sceKernelSetPhyPartCdramForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x07FEBBCA
| 0.990.000-1.060.031 || 0x51C08396
|-
|-
| 3.63 || 0xDCEF10B2
| 1.500.151-3.740.011 || not present
|}
|}


This is a guessed name.
=== sceUIDReferObjectWithLevelForKernel ===
 
{| class="wikitable"
<source lang="C">void sceKernelSetPhyPartCdramForKernel(void *pPhyPart);</source>
|-
! Version !! NID
|-
| 0.990 || 0xF79B52B2
|-
| 3.60 || not present
|}
 
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source>


=== sceKernelDeleteObjectHeapForKernel ===
=== sceUIDGetObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x080BA2F3
| 0.931-0.990 || 0xC4893914
|-
|-
| 3.63 || 0x2F526AB8
| 3.60 || not present
|}
|}


This is a guessed name.
Calls [[#sceGUIDGetObjectForDriver]].


<source lang="C">int sceKernelDeleteObjectHeapForKernel(SceKernelObjectHeap *pObjectHeap);</source>
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source>


=== sceUIDEntryGetNameForKernel ===
=== sceUIDtoObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x114E6476
| 0.990-3.60 || 0xED221825
|-
|-
| 3.63 || 0x5FD15C6E
| 3.65 || 0xFA6C098C
|}
|}


This is a guessed name.
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].


<source lang="C">char *sceUIDEntryGetNameForKernel(SceUIDEntry *pEntry);</source>
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>


=== SceSysmemForKernel_FDC0EA11 ===
=== sceUIDClassIsSubclassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xFDC0EA11
| 0.990-1.691 || not present (in ForDriver)
|-
| 3.60-3.61 || 0x48750A5A
|-
|-
| 3.63 || 0x8EE8B917
| 3.63 || 0x7F7D5C4A
|}
|}


=== SceSysmemForKernel_F1433852 ===
This is a guessed name. Temp name was sceUIDClassIsWithinSubclassChainForKernel.
 
<source lang="C">SceBool sceUIDClassIsSubclassForKernel(SceClass *pClass, SceClass *pTargetClass);</source>
 
=== sceUIDEntryHeapCloseAllPUIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xF1433852
| 0.931-3.60 || 0xFAF96C1F
|-
|-
| 3.63 || 0x0B36F7F9
| 3.65 || 0x133024A5
|}
|}


=== SceSysmemForKernel_ECF9435A ===
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID guid);</source>
 
=== sceKernelUIDEntryHeapGetInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xECF9435A
| 0.990 || not present
|-
| 3.60-3.61 || 0x686AA15C
|-
|-
| 3.63 || 0xFCB5745A
| 3.63 || 0xCCD47B97
|}
|}


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).
Official name may also be sceUIDEntryHeapGetInfoForKernel (seen in 4.00).


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">
typedef struct SceUIDEntryHeapInfo {
    SceSize size; //<! Size of this structure (0x18)
    SceSize objectSize;
    SceSize totalHeapSize;
    SceSize totalItemCount;
    SceSize unk10;
    SceSize unk14;
} SceUIDEntryHeapInfo;


<source lang="C">int SceSysmemForKernel_ECF9435A(void *u_dst, SceUInt32 ch, SceUInt32 nWords);</source>
SceInt32 sceKernelUIDEntryHeapGetInfoForKernel(SceUID entryHeapId, SceUIDEntryHeapInfo *pInfo);
</source>


=== SceSysmemForKernel_ECC68E7B ===
=== sceUIDEntryHeapSetHookForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xECC68E7B
| 3.60-3.61 || 0xCD985AEB
|-
|-
| 3.63 || 0x05822B82
| 3.63 || 0x666C878F
|}
|}


=== SceSysmemForKernel_EC1293D2 ===
?Implemented in internal system software.? Not implemented in external system software.
{| class="wikitable"
 
|-
<source lang="C">int sceUIDEntryHeapSetHookForKernel(SceUID guid, void *pHook);</source>
 
=== sceUIDEntryGetNameForKernel ===
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xEC1293D2
| 3.60-3.61 || 0x114E6476
|-
|-
| 3.63 || 0x40965FD1
| 3.63 || 0x5FD15C6E
|}
|}


=== SceSysmemForKernel_E68A9F1B ===
This is a guessed name.
 
<source lang="C">char *sceUIDEntryGetNameForKernel(SceUIDEntry *pEntry);</source>
 
=== sceUIDEntryGetLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xE68A9F1B
| 3.60-3.61 || 0xC2F7D8A4
|-
|-
| 3.63 || 0x1DE4953F
| 3.63 || 0x797C858B
|}
|}


=== sceKernelCheckOpenVMDomainForKernel ===
This is a guessed name.
 
<source lang="C">SceUInt16 sceUIDEntryGetLevelForKernel(SceUIDEntry *pEntry);</source>
 
=== sceUIDEntryGetAttrForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.000.081-3.610.011 || 0xD514BB56
| 3.60-3.61 || 0x8FB73A29
|-
|-
| 3.630.000-3.740.011 || 0x4E6D8BC3
| 3.63 || 0x17F12DCE
|}
|}


Returns 2 if Virtual Machine is open, 0 else. Returns 0x80027101 on error.
This is a guessed name.


<source lang="C">SceUInt32 sceKernelCheckOpenVMDomainForKernel(void);</source>
<source lang="C">SceUInt32 sceUIDEntryGetAttrForKernel(SceUIDEntry *pEntry);</source>


=== sceKernelAllocObjectHeapBySizeForKernel ===
=== sceUIDEntryGetLinkCountForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x131CEF52
| 3.60-3.61 || 0x876A7F44
|-
|-
| 3.63 || 0x17D3D4BD
| 3.63 || 0xF3DB2D71
|}
|}


This is a guessed name.
This is a guessed name.


<source lang="C">void *sceKernelAllocObjectHeapBySizeForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size);</source>
<source lang="C">SceUInt8 sceUIDEntryGetLinkCountForKernel(SceUIDEntry *pEntry);</source>


=== sceKernelSetPhyMemPartDebugCallbackForKernel ===
=== sceUIDEntryGetUIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x17F1AA22
| 3.60-3.61 || 0x6BB6AF94
|-
|-
| 3.63 || 0x31FA81B5
| 3.63 || 0x03A2CAF0
|}
|}


This is a guessed name.
This is a guessed name.


Only implemented in sysdbg build.
<source lang="C">SceUID sceUIDEntryGetUIDForKernel(SceUIDEntry *pEntry);</source>


<source lang="C">int sceKernelSetPhyMemPartDebugCallbackForKernel(void *pCallbacks);</source>
=== sceGUIDRegisterForKernel ===
 
=== SceSysmemForKernel_1E11F41D ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x1E11F41D
| 0.990-3.61 || 0xAF42AAD5
|-
|-
| 3.63 || 0x6DBDA03B
| 3.63 || 0x6DB44A42
|}
|}


Return 0.
<source lang="C">SceUID sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>


=== sceKernelAddressSpaceGetPartitionByIndexForKernel ===
=== sceGUIDUnregisterForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x210DB518
| 0.931-0.990 || 0xE79BBCF2
|-
|-
| 3.63 || 0x1F84FE44
| 3.60 || not present
|}
|}


This is a guessed name.
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>


<source lang="C">SceUIDPartitionObject *sceKernelAddressSpaceGetPartitionByIndexForKernel(void *pAS, int pindex);</source>
=== sceGUIDOpenByGUIDForKernel ===
 
=== sceKernelCreateClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x21285F40
| 0.990-3.61 || 0xCF53EEE4
|-
|-
| 3.63 || 0x7CDB7655
| 3.63 || 0x89D33DF0
|}
|}


<source lang="C">int sceKernelCreateClassForKernel(SceClass *pClass, const char *name, SceClass *subclass, SceSize itemsize, void *cstr, void *dstr);</source>
<source lang="C">SceUID sceGUIDOpenByGUIDForKernel(SceUID guid);</source>


=== SceSysmemForKernel_22708F14 ===
=== sceGUIDNameForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x22708F14
| 0.990.000-1.060.031 || 0x250EE289
|-
|-
| 3.63 || 0x456ECB54
| 1.50-3.740.011 || not present
|}
|}


<source lang="C">SceUInt32 SceSysmemForKernel_22708F14(void *a1, int a2);</source>
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>


=== SceSysmemForKernel_22A26637 ===
=== sceGUIDtoClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x22A26637
| 0.990-3.61 || 0x66636970
|-
|-
| 3.63 || 0xAD19285A
| 3.63 || 0x368F1C36
|}
|}


<source lang="C">int SceSysmemForKernel_22A26637(void *a1, int a2, int a3, int a4, int a5, int a6, void *a7);</source>
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID guid);</source>


=== scePUIDOpenByNameWithOptForKernel ===
=== sceGUIDGetObjectWithClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x22F79E82
| 0.990-3.61 || 0x7ABFA9A7
|-
|-
| 3.63 || 0x201E970B
| 3.63 || 0x0E43E113
|}
|}


<source lang="C">SceUID scePUIDOpenByNameWithOptForKernel(ScePID pid, const char *name, void *pOpt);</source>
Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.
 
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>


=== SceSysmemForKernel_2658EE0A ===
=== sceGUIDGetUIDVectorByClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x2658EE0A
| 0.931.010-3.600.011 || 0xEC7D36EF
|-
|-
| 3.63 || 0x2C7B8D65
| 3.630.011-3.740.011 || 0x52137FA3
|}
|}


Return 0.
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.


=== SceSysmemForKernel_C6F04370 ===
<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
|-
|-
| 3.60-3.61 || 0xC6F04370
| 0.931.010-1.060.031 || not present
|-
| 1.500.151-3.610.011 || 0x59F577E8
|-
|-
| 3.63 || 0x02DAD732
| 3.630.011-3.740.011 || 0xE9957329
|}
|}


=== SceSysmemForKernel_C2F7D8A4 ===
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.
 
<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>
 
=== sceGUIDGetEntryForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xC2F7D8A4
| 3.60-3.61 || 0x45F2A59C
|-
|-
| 3.63 || 0x797C858B
| 3.63 || 0xFF464A49
|}
|}


=== SceSysmemForKernel_C0BF149E ===
<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceUIDEntry **ppEntry);</source>
 
=== sceGUIDGetEntryInfoAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xC0BF149E
| 0.990.000-3.610.011 || 0x2A79C51C
|-
|-
| 3.63 || 0x100B4029
| 3.630.011-3.740.011 || 0x3BF0DE65
|}
|}


=== scePUIDGetPUIDVectorByGUIDForKernel ===
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUInt32 vis_level, SceUID guid, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source>
 
=== sceGUIDGetEntryInfoClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.06 || not present
| 0.990.000-3.610.011 || 0xE90CFD62
|-
|-
| 2.100.081-3.610.011 || 0xBF04FC83
| 3.630.011-3.740.011 || 0x71E934DB
|-
| 3.630.011-3.740.011 || 0xCE16AD91
|}
|}


<source lang="C">int scePUIDGetPUIDVectorByGUIDForKernel(SceUID pid, SceUID guid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID guid, SceClass *pClass, SceUInt32 vis_level, void *pInfoVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>


=== SceSysmemForKernel_BF0294E4 ===
=== sceGUIDKernelCreateForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xBF0294E4
| 0.990 || 0xE6FAD50A
|-
|-
| 3.63 || 0x791D6205
| 3.60 || not present
|}
|}


=== SceSysmemForKernel_BC2E2B2B ===
Create a GUID with default attribute (0x30000).
{| class="wikitable"
 
<source lang="C">int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
 
=== sceGUIDKernelCreateWithAttrForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xBC2E2B2B
| 0.990-3.61 || 0x53E1FFDE
|-
|-
| 3.63 || 0x42834422
| 3.63 || 0x6D26B066
|}
|}


Return 0.
Create a GUID with the specified attribute.


=== SceSysmemForKernel_B8D769C6 ===
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);</source>
 
=== sceGUIDKernelCreateWithOptForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xB8D769C6
| 0.990-0.995 || not present
|-
| 0.996-3.60 || 0xDF0288D7
|-
|-
| 3.63 || 0xDBEACE2C
| 3.65 || 0xFB6390CE
|}
|}


<source lang="C">int SceSysmemForKernel_B8D769C6(SceKernelObjectHeap *pObjectHeap, void *info);</source>
This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.
 
<source lang="c">
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>


=== SceSysmemForKernel_B543A23C ===
=== sceGUIDGetVisibilityLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xB543A23C
| 3.60-3.61 || 0xC69666C3
|-
|-
| 3.63 || 0x9F1A9AA6
| 3.63 || 0x4E923101
|}
|}


=== SceSysmemForKernel_B339A865 ===
<source lang="C">SceUInt32 sceGUIDGetVisibilityLevelForKernel(SceUID guid);</source>
 
=== sceGUIDSetVisibilityLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xB339A865
| 3.60-3.61 || 0xCB8D03C0
|-
|-
| 3.63 || 0x320E907F
| 3.63 || 0xE8CC2166
|}
|}


Returns 0.
Sets visibilityLevel into guid's GUIDEntry.
 
<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source>


=== SceSysmemForKernel_AD5A83E3 ===
=== sceGUIDFindByObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xAD5A83E3
| 0.990-3.61 || 0x95ABFDC3
|-
|-
| 3.63 || 0xBF70207B
| 3.63 || 0xEC90AA11
|}
|}


=== SceSysmemForKernel_A88F6D88 ===
<source lang="C">SceUID sceGUIDFindByObjectForKernel(void *pObject);</source>
 
=== sceGUIDFindByNameForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xA88F6D88
| 3.60-3.61 || 0xCEBA8031
|-
|-
| 3.63 || 0x441E6BE9
| 3.63 || 0xBDE00106
|}
|}


=== SceSysmemForKernel_A504BA60 ===
<source lang="C">SceUID sceGUIDFindByNameForKernel(const char *name);</source>
 
=== sceGUIDFindByNameAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0xA504BA60
| 3.60-3.61 || 0x4B5C85AC
|-
|-
| 3.63 || 0xCAB15F74
| 3.63 || 0xF49C0BE8
|}
|}


=== scePUIDReferObjectWithClassForKernel ===
<source lang="C">
// return value: to reverse, should be either SceUID guid or void* pObj
SceUID sceGUIDFindByNameAllForKernel(const char *name);
</source>
 
=== sceGUIDGetPIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x9C53F457
| 3.60-3.61 || 0xCF5A2311
|-
|-
| 3.63 || 0x9C23DFF7
| 3.63 || 0xBD42A0FC
|}
|}


This is a guessed name.
Returns Process ID for guid.


<source lang="C">int scePUIDReferObjectWithClassForKernel(SceUID pid, SceUID puid, SceClass *pClass, void **ppObject);</source>
<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source>


=== SceSysmemForKernel_8FB73A29 ===
=== sceGUIDSetPIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x8FB73A29
| 3.60-3.61 || 0x812E7A53
|-
|-
| 3.63 || 0x17F12DCE
| 3.63 || 0x46DF8C8A
|}
|}


=== SceSysmemForKernel_8B07BB52 ===
Sets Process ID for guid.
 
<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source>
 
=== sceGUIDSetCNOAForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x8B07BB52
| 3.60-3.61 || 0x8D6AF468
|-
|-
| 3.63 || 0x16A54BFE
| 3.63 || 0x5EDDEEB5
|}
|}


=== SceSysmemForKernel_876A7F44 ===
Setting Class Name Object Attr.
 
<source lang="C">int sceGUIDSetCNOAForKernel(SceUID guid, SceClass *pClass, const char *name, void *pObject, SceUInt32 attr);</source>
 
=== sceGUIDSetForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x876A7F44
| 0.931-3.61 || 0xD7B323EB
|-
|-
| 3.63 || 0xF3DB2D71
| 3.63 || 0xBF275C5A
|}
|}


=== SceSysmemForKernel_7FD757FE ===
Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.
 
<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
 
=== scePUIDGetEntryInfoAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x7FD757FE
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.610.011 || 0x2770A7D7
|-
|-
| 3.63 || 0x660DC18A
| 3.630.011-3.740.011 || 0x3C3005EE
|}
|}


<source lang="C">int SceSysmemForKernel_7FD757FE(SceKernelObjectHeap *pObjectHeap, SceUID pid, SceUID heapid);</source>
<source lang="C">int scePUIDGetEntryInfoAllForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source>


=== SceSysmemForKernel_7DC46969 ===
=== scePUIDGetAttrForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x7DC46969
| 3.60-3.61 || 0x86E83C0D
|-
|-
| 3.63 || 0x8450BFF7
| 3.63 || 0x96BD47D1
|}
|}


Returns 1.
<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID puid, SceUInt32 *pAttr);</source>


=== SceSysmemForKernel_72E7BFAC ===
=== scePUIDReleaseObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x72E7BFAC
| 0.990-3.61 || 0x3FCA782B
|-
|-
| 3.63 || 0x93D0A183
| 3.63 || 0xCE561224
|}
|}


=== SceSysmemForKernel_71869119 ===
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID puid);</source>
 
=== scePUIDGetInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x71869119
| 0.990 || not present
|-
| 3.60-3.61 || 0x12ED88AE
|-
|-
| 3.63 || 0x6E82D5A0
| 3.63 || 0x857701D4
|}
|}


=== SceSysmemForKernel_6BB6AF94 ===
<source lang="C">
// pInfo size is 0x14 bytes
int scePUIDGetInfoForKernel(SceUID pid, SceUID puid, void *pInfo);
</source>
 
=== scePUIDtoGUIDWithDebugForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x6BB6AF94
| 3.60-3.61 || 0xB3E2AA7A
|-
|-
| 3.63 || 0x03A2CAF0
| 3.63 || 0x188C8742
|}
|}


=== SceSysmemForKernel_68CB9266 ===
This is a guessed name.
 
<source lang="C">SceUID scePUIDtoGUIDWithDebugForKernel(SceUID pid, SceUID puid);</source>
 
=== scePUIDReferObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x68CB9266
| 0.990-3.61 || 0x620E00E7
|-
|-
| 3.63 || 0x3717C322
| 3.63 || 0x2C15615F
|}
|}


Could be named sceKernelGetKernelFixedHeapForKernel.
<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source>


=== SceSysmemForKernel_6427560F ===
=== scePUIDOpenByNameWithOptForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x6427560F
| 3.60-3.61 || 0x22F79E82
|-
|-
| 3.63 || 0xB591E49F
| 3.63 || 0x201E970B
|}
|}


=== SceSysmemForKernel_64133268 ===
<source lang="C">SceUID scePUIDOpenByNameWithOptForKernel(ScePID pid, const char *name, void *pOpt);</source>
 
=== scePUIDGetPUIDVectorByGUIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x64133268
| 0.931.010-2.06 || not present
|-
| 2.100.081-3.610.011 || 0xBF04FC83
|-
|-
| 3.63 || 0x40870E74
| 3.630.011-3.740.011 || 0xCE16AD91
|}
|}


=== SceSysmemForKernel_61C2AA52 ===
<source lang="C">int scePUIDGetPUIDVectorByGUIDForKernel(SceUID pid, SceUID guid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
 
=== scePUIDGetUIDVectorByClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x61C2AA52
| 0.990.000-3.610.011 || 0xB16D5136
|-
|-
| 3.63 || 0x48D2E408
| 3.630.000-3.740.011 || 0x08C05493
|}
|}


=== SceSysmemForKernel_60735311 ===
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]].
{| class="wikitable"
 
|-
<source lang="C">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source>
! Version !! NID
|-
| 3.60-3.61 || 0x60735311
|-
| 3.63 || 0xD124075A
|}


=== sceKernelFixedHeapFreeObjectForKernel ===
=== scePUIDReferObjectWithClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x571660AA
| 3.60-3.61 || 0x9C53F457
|-
|-
| 3.63 || 0x93344755
| 3.63 || 0x9C23DFF7
|}
|}


This is a guessed name.
This is a guessed name.


<source lang="C">int sceKernelFixedHeapFreeObjectForKernel(SceUIDFixedHeapObject *pFixedHeap, void *pObject);</source>
<source lang="C">int scePUIDReferObjectWithClassForKernel(SceUID pid, SceUID puid, SceClass *pClass, void **ppObject);</source>


=== scePUIDOpenByGUIDWithOptForKernel ===
=== scePUIDOpenByGUIDWithOptForKernel ===
Line 2,693: Line 2,612:
<source lang="C">SceUID scePUIDOpenByGUIDWithOptForKernel(SceUID pid, SceUID guid, void *pOpt);</source>
<source lang="C">SceUID scePUIDOpenByGUIDWithOptForKernel(SceUID pid, SceUID guid, void *pOpt);</source>


=== SceSysmemForKernel_48750A5A ===
=== scePUIDGetGUIDVectorForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x48750A5A
| 3.60-3.61 || 0x3203AE64
|-
|-
| 3.63 || 0x7F7D5C4A
| 3.63 || 0x66489B4B
|}
|}


=== SceSysmemForKernel_46A5CB84 ===
This is a guessed name.
 
<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-3.61 || 0x46A5CB84
| 0.931-3.61 || 0x4D38F861
|-
|-
| 3.63 || 0xC3F9607E
| 3.63-3.65 || 0x0164D817
|}
|}


=== SceSysmemForKernel_43DFCE89 ===
return gpPhyPartKernel;
 
<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source>
 
=== sceKernelGetPhyPartToolForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x43DFCE89
| 0.990-3.61 || 0xF8E95A5A
|-
|-
| 3.63 || 0xBD625136
| 3.63-3.65 || 0x0B1B4ACA
|}
|}


=== sceKernelFixedHeapSetHookByPointerForKernel ===
<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source>
 
=== sceKernelGetPhyPartGameForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x3EC2345B
| 3.60-3.61 || 0xB60568F9
|-
|-
| 3.63 || 0x811C452B
| 3.63-3.65 || 0x62800A6B
|}
|}


This is a guessed name.
<source lang="C">void *sceKernelGetPhyPartGameForKernel(void);</source>


<source lang="C">int sceKernelFixedHeapSetHookByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, void *a2);</source>
=== sceKernelSetPhyPartGameForKernel ===
 
=== SceSysmemForKernel_3B75CBED ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x3B75CBED
| 3.60-3.61 || 0x77876A8D
|-
|-
| 3.63 || 0x857408DA
| 3.63-3.65 || 0x3753C584
|}
|}


=== SceSysmemForKernel_3203AE64 ===
<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source>
 
=== sceKernelSetPhyPartCdramForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x3203AE64
| 3.60-3.61 || 0x07FEBBCA
|-
|-
| 3.63 || 0x66489B4B
| 3.63 || 0xDCEF10B2
|}
|}


=== SceSysmemForKernel_2791F109 ===
This is a guessed name.
 
<source lang="C">void sceKernelSetPhyPartCdramForKernel(void *pPhyPart);</source>
 
=== sceKernelPhyMemLowAllocForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.61 || 0x2791F109
| 0.931-3.61 || 0x5E169FEF
|-
|-
| 3.63 || 0x5C0FC6BE
| 3.63 || 0xEA98CCE1
|}
|}


== SceSysmemForDriver ==
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>


=== sceKernelProcessGetContextForDriver ===
=== sceKernelPhyMemLowPA2VAForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.80-3.74 || 0x2ECF7944
| 0.931-3.61 || 0x0FD6B756
|-
| 3.63 || 0x2CFD8C9A
|}
|}


This is a guessed name.
<source lang="C">
// type must be 0x10002
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
</source>


<source lang="c">int sceKernelProcessGetMMUContextForDriver(SceUID pid, SceKernelMMUContext **ppCtx);</source>
=== sceKernelGetPhyMemLowInfoForKernel ===
 
=== sceKernelProcessSwitchContextForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.74 || 0x2D711589
| 0.931-0.990 || 0x06A4DA6C
|-
| 3.60 || not present
|}
|}


This is a guessed name.
<source lang="C">
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);
</source>


<source lang="c">int sceKernelProcessSwitchMMUContextForDriver(SceKernelMMUContext *new_context, SceKernelMMUContext *prev_context);</source>
=== sceKernelPhyMemLowFreeForKernel ===
 
=== scePUIDOpenByGUIDForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xBF209859
| 0.931-3.61 || 0x18B99FDD
|-
| 3.63 || 0x844DF3DA
|}
|}


Temp name was sceKernelCreateUserUidForDriver.
Free a range of physical "pages" from a PhyMemLow object.


<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID guid);</source>
<source lang="C">
 
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
=== scePUIDOpenByGUIDWithFlagsForDriver ===
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);
</source>
 
=== sceKernelSetPhyMemLowHookForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCED1547B
| 3.60-3.61 || 0x2658EE0A
|-
| 3.63 || 0x2C7B8D65
|}
|}


Temp name was sceKernelCreateUserUidForClassForDriver.
This is a guessed name.
 
Only implemented in sysdbg build.


<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source>
<source lang="C">int sceKernelSetPhyMemLowHookForKernel(void *pHook);</source>


=== scePUIDOpenByNameForDriver ===
=== sceKernelAllocMemBlockByCommandForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x513B9DDD
| 3.60-3.61 || 0xCA91B9D5
|-
| 3.63 || 0x455B0A4C
|}
|}


Temp name was sceKernelCreateUserUidForNameForDriver.
<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;


<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source>
int sceKernelAllocMemBlockByCommandForKernel(SceKernelMemBlockAllocCommand *pCommand);
</source>


=== scePUIDOpenByNameWithClassForDriver ===
=== sceKernelAllocSimpleMemBlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x8DA0BCA5
| 0.990-3.61 || 0xF81F4672
|-
| 3.63 || 0x814CDCC5
|}
|}


Equivalent to [[SceSysmem#scePUIDOpenByNameForDriver|scePUIDOpenByNameForDriver]], but object's class is checked to be a subclass of provided <code>pClass</code> before opening.
<source lang="C">
typedef struct SceKernelSimpleMemBlock {
char unk_0[0x14];
void *base;
char unk_18[0x14];
void *PhyPage;
SceSize size;
} SceKernelSimpleMemBlock;


<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(ScePID pid, const char *name, SceClass *pClass);</source>
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);
</source>


=== scePUIDOpenByNameWithExactClassForDriver ===
=== sceKernelFreeSimpleMemBlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.010.031 || 0xB800123C
| 0.990-3.61 || 0xA1FFA2C9
|-
|-
| 3.10-3.740.011 || not present
| 3.63 || 0xA4DB88E1
|}
|}


This is a guessed name. Temp name was <code>add_heap</code>.
<source lang="C">int sceKernelFreeSimpleMemBlockForKernel(void *a1);</source>


Equivalent to [[SceSysmem#scePUIDOpenByNameWithClassForDriver|scePUIDOpenByNameWithClass]], but the object's class must match exactly the provided <code>pClass</code>.
=== sceKernelGetSimpleMemBlockBaseForKernel ===
 
<source lang="C">SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID pid, const char *name, const SceClass *pClass);</source>
 
=== scePUIDCloseForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x84A4AF5E
| 0.990-3.61 || 0x0A8D14EC
|-
| 3.63 || 0x39D5A3B7
|}
|}


Temp name was sceKernelDeleteUserUidForDriver.
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>


<source lang="c">int scePUIDCloseForDriver(SceUID pid, SceUID puid);</source>
=== sceKernelSimpleMemBlockGetFIFOForKernel ===
 
=== scePUIDSetNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x12624884
| 3.60-3.61 || 0x43DFCE89
|-
| 3.63 || 0xBD625136
|}
|}


Temp name was sceKernelSetNameForPidForUidForDriver.
This is a guessed name.


<source lang="c">int scePUIDSetNameForDriver(SceUID pid, SceUID puid, const char *name);</source>
<source lang="C">int sceKernelSimpleMemBlockGetFIFOForKernel(void *pResult);</source>


=== scePUIDGetObjectForDriver ===
=== sceKernelGetMemBlockInfoAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xFE6D7FAE
| 3.60-3.61 || 0xFEF54604
|-
| 3.63 || 0x1D19C864
|}
|}


Temp name was sceKernelGetObjectForPidForUidForDriver.
<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">int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);</source>
=== sceKernelGetMemBlockInfoSimpleForKernel ===
 
=== scePUIDtoGUIDForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x45D22597
| 0.990-3.61 || 0x2364A170
|-
| 3.63 || 0xBA441FD0
|}
|}


Temp name was sceKernelKernelUidForUserUidForDriver.
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source>


Returns the Global UID of a process based on its Process UID.
=== sceKernelGetMemBlockTypeForKernel ===


<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID puid);</source>
=== scePUIDtoGUIDWithClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 3.60-3.61 || 0x289BE3EC
|-
|-
| 3.60 || 0x184172B1
| 3.63 || 0xD44FE44B
|}
|}


Temp name was sceKernelKernelUidForUserUidForClassForDriver.
<source lang="c">
 
/***
<source lang="c">SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID puid, SceClass *pClass);</source>
* 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>


=== scePUIDGetEntryHeapNameForDriver ===
=== sceKernelRemapMemBlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x09896EB7
| 0.931-1.05 || 0x8D332AE1
|-
| 1.50-3.60 || not present. Moved to ForDriver
|}
|}


Real name might be scePUIDGetEntryHeapNameForDriver. Temp name was sceKernelGetNameForPidByUidForDriver.
Temp name was sceKernelRemapBlockForKernel.


<source lang="C">int scePUIDGetEntryHeapNameForDriver(SceUID pid, SceUID puid, char **pName);</source>
See [[SceSysmem#sceKernelRemapMemBlockForDriver|sceKernelRemapMemBlockForDriver]].


=== scePUIDGetClassForDriver ===
=== sceKernelSetMemBlockDebugCallbackForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xE9728A12
| 3.60-3.61 || 0x01DE3AB7
|-
| 3.63 || 0xF57A97A0
|}
|}


Temp name was sceKernelGetClassForPidForUidForDriver.
This is a guessed name.
 
Only implemented in sysdbg build.


<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID puid, SceClass **ppClass);</source>
<source lang="C">int sceKernelSetMemBlockDebugCallbackForKernel(void *pCallbacks);</source>


=== sceUIDKernelCreateForDriver ===
=== sceKernelMemBlockAssocPhyPageForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-1.060.031 || 0x7FC849B1
| 3.60-3.61 || 0xA88F6D88
|-
|-
| 1.50-3.740.011 || not present
| 3.63 || 0x441E6BE9
|}
|}


Calls [[#sceGUIDKernelCreateForKernel]].
This is a guessed name.


Create a UID with default attribute (0x30000).
<source lang="C">int sceKernelMemBlockAssocPhyPageForKernel(SceUID guid, const SceUIntPtr *a2);</source>


<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
=== sceKernelAllocPartitionStackMemBlockForKernel ===
 
=== sceGUIDKernelCreateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 3.60-3.61 || 0x64133268
|-
|-
| 1.000.071-3.740.011 || 0x56A13E90
| 3.63 || 0x40870E74
|}
|}


Temp name was sceUIDKernelCreate2ForDriver, sceKernelCreateUidObj2ForDriver.
Temp name was sceKernelAllocStackBlockForKernel.


Create a UID with default attribute (0x30000).
<source lang="C">SceUID sceKernelAllocPartitionStackMemBlockForKernel(const char *name, SceSize size, int a3);</source>


<source lang="c">SceUID sceGUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
=== sceKernelMemBlockGetCodeForKernel ===
 
=== sceUIDOpenByNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x796881D6
| 3.60-3.61 || 0x61C2AA52
|-
|-
| 3.60 || not present
| 3.63 || 0x48D2E408
|}
|}


Calls [[#sceGUIDOpenByNameForDriver]].
This is a guessed name.


<source lang="c">SceUID sceUIDOpenByNameForDriver(const char *name);</source>
<source lang="C">SceUint32 sceKernelMemBlockGetCodeForKernel(SceUint32 type);</source>


=== sceUIDCloseForDriver ===
=== sceKernelAllocPartitionMemBlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x32C5F628
| 0.931-3.60 || 0x5FFE4B79
|-
|-
| 3.60 || not present
| 3.65 || 0x6DB46017
|}
|}


if (flag_or_addr_or_pid & 0x40000000) == 0 calls [[#sceGUIDCloseForDriver]] else [[#scePUIDCloseForDriver]].
Temp name was sceKernelAllocSystemCallTableForKernel.


<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source>
<source lang="C">
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);
</source>


=== SceSysmemForDriver_F09A7D09 ===
=== sceKernelPartitionGetInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xF09A7D09
| 3.60-3.61 || 0x7BE4D3D1
|-
|-
| 3.60-3.74 || not present
| 3.63 || 0xFB101B86
|}
|}


Calls [[#sceGUIDCloseForDriver]].
<source lang="C">int sceKernelPartitionGetInfoForKernel(SceUID part_id, void *pInfo);</source>


<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source>
=== sceKernelGetPhyPageResetForKernel ===
 
=== sceUIDGetDefaultClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xFE28F5EB
| 0.990-3.61 || 0xEB350679
|-
|-
| 3.60 || not present
| 3.63 || 0x8FD11E02
|}
|}


<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source>
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>


=== sceUIDtoObjectForDriver ===
=== SceSysmemForKernel_BD33EDDF ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xAB7AC3D1
| 0.931 || 0xBD33EDDF
|-
| 3.60 || not present
|}
|}


This is a guessed name.
Gets thread's name. Returns 0 on success.


Calls [[#sceUIDtoObjectForKernel]].
<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source>


<source lang="C">SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);</source>
=== sceKernelAllocForKernel ===
 
=== sceUIDtoClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x65B9B393
| 0.990-3.60 || 0xC0A4D2F3
|-
|-
| 3.60 || not present
| 3.65 || 0x85571907
|}
|}


Calls [[#sceGUIDtoClassForKernel]].
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>


<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source>
=== sceKernelAllocWithOptForKernel ===
 
=== sceUIDClassInitForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xE6D75E99
| 3.60-3.61 || 0xA2CD1697
|-
|-
| 3.60 || not present
| 3.63 || 0xCF3C3F7A
|}
|}


<source lang="C">int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);</source>
<source lang="C">


=== sceUIDGetClassInfoAllForDriver ===
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>
 
=== sceKernelFreeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x3EF32C6C
| 0.990-3.60 || 0xABAB0FAB
|-
|-
| 3.60 || not present
| 3.65 || 0x4233C16D
|}
|}


<source lang="C">int sceUIDGetClassInfoAllForDriver(SceClassInfo_0990 *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);</source>
<source lang="C">int sceKernelFreeForKernel(void *ptr);</source>


=== sceGUIDCreateForDriver ===
=== sceKernelSetAllocFreeHookForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x89A44858
| 3.60-3.61 || 0xBC2E2B2B
|-
| 3.63 || 0x42834422
|}
|}


Temp name was sceKernelCreateUidObjForUidForDriver.
Only implemented in sysdbg build.


Create a GUID with default attribute (0x30000) for the specified UID.
<source lang="C">int sceKernelSetAllocFreeHookForKernel(void *pHook);</source>


<source lang="c">SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID guid, SceKernelObject **ppEntry);</source>
=== SceSysmemForKernel_C38D61FC ===
 
=== sceGUIDOpenByNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xD76E7452
| 0.990 || 0xC38D61FC
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelOpenUidForNameForDriver.
Calls [[#SceSysmemForDriver_89A44858]].


<source lang="c">SceUID sceGUIDOpenByNameForDriver(const char *name);</source>
=== SceSysmemForKernel_7C797940 ===
 
=== sceGUIDCloseForDriver ===
{| 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]].


<source lang="C">int sceGUIDCloseForDriver(SceUID uid);</source>
=== sceKernelVSlotMapProcMemoryForKernel ===
 
=== sceGUIDGetClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xC74B0152
| 3.60-3.61 || 0xFAD03241
|-
| 3.63 || 0x14D3807B
|}
|}


Temp name was sceKernelGetClassForUidForDriver.
<source lang="C">int sceKernelVSlotMapProcMemoryForKernel(SceUID pid, void *addr, SceSize size, SceUInt32 flag, SceKernelVSlot *pVslot, int *pBaseAddrOrOffset);</source>


<source lang="c">int sceGUIDGetClassForDriver(SceUID uid, SceClass **ppClass);</source>
=== sceKernelVSlotUnmapProcMemoryForKernel ===
 
=== sceGUIDSetNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.50-3.60 || 0x4CFA4100
| 3.60-3.61 || 0x789CD5BF
|-
| 3.63 || 0x4EEF69C7
|}
|}


Temp name was sceKernelSetObjectForUidForDriver. Wrongfully named scePUIDSetNameForDriver.
<source lang="C">int sceKernelVSlotUnmapProcMemoryForKernel(SceKernelVSlot *pVslot);</source>


Calls the same routine as [[SceSysmem#sceGUIDSetForKernel|sceGUIDSetForKernel]], but passes NULL for pClass and pObject.
=== SceSysmemForKernel_ECF9435A ===
 
<source lang="c">SceInt32 sceGUIDSetNameForDriver(SceUID guid, const char *name);</source>
 
=== sceGUIDNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xB2BB6216
| 3.60-3.61 || 0xECF9435A
|-
|-
| 3.60 || not present
| 3.63 || 0xFCB5745A
|}
|}


<source lang="C">char* sceGUIDNameForDriver(SceUID id);</source>
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).


=== sceGUIDGetNameForDriver ===
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.
{| class="wikitable"
 
<source lang="C">int SceSysmemForKernel_ECF9435A(void *u_dst, SceUInt32 ch, SceUInt32 nWords);</source>
 
=== SceSysmemForKernel_ECC68E7B ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xA78755EB
| 3.60-3.61 || 0xECC68E7B
|-
| 3.63 || 0x05822B82
|}
|}


This is a guessed name, but near. Temp name was sceKernelGetNameForUidForDriver.
<source lang="C">int SceSysmemForKernel_ECC68E7B(SceUInt32 phymem_type, SceUInt32 *result);</source>


<source lang="C">int sceGUIDGetNameForDriver(SceUID guid, char **pName);</source>
=== SceSysmemForKernel_E68A9F1B ===
 
=== sceGUIDGetName2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE655852F
| 3.60-3.61 || 0xE68A9F1B
|-
| 3.63 || 0x1DE4953F
|}
|}


This is a guessed name, but near. Temp name was sceKernelGetNameForUid2ForDriver.
<source lang="C">int SceSysmemForKernel_E68A9F1B(int a1, SceClass **ppClass);</source>


<source lang="C">const char* sceGUIDGetName2ForDriver(SceUID guid);</source>
=== sceKernelCheckOpenVMDomainForKernel ===
 
=== sceGUIDGetObjectForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x0FC24464
| 2.000.081-3.610.011 || 0xD514BB56
|-
| 3.630.000-3.740.011 || 0x4E6D8BC3
|}
|}


Temp name was sceKernelGUIDGetObjectForDriver.
Returns 2 if Virtual Machine is open, 0 else. Returns 0x80027101 on error.


<source lang="c">int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
<source lang="C">SceUInt32 sceKernelCheckOpenVMDomainForKernel(void);</source>


=== sceGUIDReferObjectForDriver ===
=== sceeKernelSetNameHeapHookForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0F5C84B7
| 3.60-3.61 || 0x1E11F41D
|-
| 3.63 || 0x6DBDA03B
|}
|}


Temp name was sceKernelGetObjectForUidForDriver.
This is a guessed name.
 
Not implemented in sysdbg build either. Probably only implemented during real development.
 
Only return 0.


<source lang="c">int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
<source lang="C">int sceeKernelSetNameHeapHookForKernel(void *pHook);</source>


=== sceGUIDReferObjectWithLevelForDriver ===
=== SceSysmemForKernel_22708F14 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 3.60-3.61 || 0x22708F14
|-
|-
| 3.60 || 0xF6DB54BA
| 3.63 || 0x456ECB54
|}
|}


Temp name was sceKernelGetObjectForUidForAttrForDriver.
<source lang="C">SceUInt32 SceSysmemForKernel_22708F14(void *a1, int a2);</source>


<source lang="c">int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);</source>
=== SceSysmemForKernel_22A26637 ===
 
=== sceGUIDReferObjectWithClassLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x77066FD1
| 3.60-3.61 || 0x22A26637
|-
| 3.63 || 0xAD19285A
|}
|}


<source lang="c">int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);</source>
<source lang="C">int SceSysmemForKernel_22A26637(void *a1, int a2, int a3, int a4, int a5, int a6, void *a7);</source>


=== sceGUIDReferObjectWithClassForDriver ===
=== SceSysmemForKernel_C6F04370 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x00ED6C14
| 3.60-3.61 || 0xC6F04370
|-
| 3.63 || 0x02DAD732
|}
|}


Temp name was sceKernelGetObjForUidForDriver.
init budget data in sysmem.


<source lang="c">int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
<source lang="C">int SceSysmemForKernel_C6F04370(void);</source>


=== sceGUIDReferObjectWithSubclassForDriver ===
=== SceSysmemForKernel_B339A865 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x72A98D17
| 3.60-3.61 || 0xB339A865
|-
| 3.63 || 0x320E907F
|}
|}


Temp name was sceKernelGetObjectForUidForClassTreeForDriver.
Returns 0.


<source lang="c">int sceGUIDReferObjectWithSubclassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
<source lang="C">int SceSysmemForKernel_B339A865(void);</source>


=== sceGUIDReleaseObjectForDriver ===
=== SceSysmemForKernel_AD5A83E3 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x149885C4
| 3.60-3.61 || 0xAD5A83E3
|-
| 3.63 || 0xBF70207B
|}
|}


Temp name was sceKernelUidReleaseForDriver.
<source lang="C">int SceSysmemForKernel_AD5A83E3(SceUID guid, SceUInt32 vis_level, SceUInt32 a3, int *a4);</source>


<source lang="c">int sceGUIDReleaseObjectForDriver(SceUID uid);</source>
=== SceSysmemForKernel_A504BA60 ===
 
=== sceKernelGetUIDClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x85336A1C
| 3.60-3.61 || 0xA504BA60
|-
| 3.63 || 0xCAB15F74
|}
|}


This is a guessed name.
=== SceSysmemForKernel_7DC46969 ===
 
<source lang="C">SceClass *sceKernelGetUIDClassForDriver(void);</source>
 
=== sceKernelIsSubclassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x6484D03E
| 3.60-3.61 || 0x7DC46969
|-
|-
| 3.60 || not present
| 3.63 || 0x8450BFF7
|}
|}


<source lang="C">SceBool sceKernelIsSubclassForDriver(SceClass *parentClass, SceClass *class);</source>
Returns 1.


=== SceSysmemForDriver_6F2ACDAE ===
<source lang="C">int SceSysmemForKernel_7DC46969(void);</source>
 
== SceSysmemForDriver ==
 
=== sceKernelProcessGetContextForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x6F2ACDAE
| 1.80-3.74 || 0x2ECF7944
|-
| 1.80-3.74 || not present
|}
|}


Temp name was switch_ttb_for_pid.
This is a guessed name.


Changes the TTBR to point to the tables for a given PID.
<source lang="c">int sceKernelProcessGetMMUContextForDriver(SceUID pid, SceKernelMMUContext **ppCtx);</source>


<source lang="c">int SceSysmemForDriver_6F2ACDAE(SceUID pid);</source>
=== sceKernelProcessSwitchContextForDriver ===
 
=== sceKernelAllocMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.65 || 0xC94850C9
| 0.990-3.74 || 0x2D711589
|}
|}


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>.
<source lang="c">int sceKernelProcessSwitchMMUContextForDriver(SceKernelMMUContext *new_context, SceKernelMMUContext *prev_context);</source>


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->pbase = physical address</code>.
=== scePUIDOpenByGUIDForDriver ===
 
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>
 
=== sceKernelAllocMemBlockForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.50 || 0x59F3159C
| 0.931-3.60 || 0xBF209859
|}
|}


Same as [[#sceKernelAllocMemBlockForDriver]] but authorizes null pOpt.
Temp name was sceKernelCreateUserUidForDriver.


<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source>
<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID guid);</source>


=== sceKernelAllocMemBlockWithInfoForDriver ===
=== scePUIDOpenByGUIDWithFlagsForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xD44F464D
| 0.990-3.60 || 0xCED1547B
|}
|}


Temp name was sceKernelAllocMemBlockExtForDriver.
Temp name was sceKernelCreateUserUidForClassForDriver.


<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source>
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source>


=== sceKernelFreeMemBlockForDriver ===
=== scePUIDOpenByNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.65 || 0x009E1C61
| 0.931-3.60 || 0x513B9DDD
|}
|}


<source lang="C">int sceKernelFreeMemBlockForDriver(SceUID uid);</source>
Temp name was sceKernelCreateUserUidForNameForDriver.
 
<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source>


=== sceKernelFindMemBlockByAddrForDriver ===
=== scePUIDOpenByNameWithClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x8A1742F6
| 0.931-3.60 || 0x8DA0BCA5
|}
|}


<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source>
Equivalent to [[SceSysmem#scePUIDOpenByNameForDriver|scePUIDOpenByNameForDriver]], but object's class is checked to be a subclass of provided <code>pClass</code> before opening.
 
<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(ScePID pid, const char *name, SceClass *pClass);</source>


=== sceKernelFindProcMemBlockByAddrForDriver ===
=== scePUIDOpenByNameWithExactClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x857F1D5A
| 0.990.000-3.010.031 || 0xB800123C
|-
| 3.10-3.740.011 || not present
|}
|}


Temp name was sceKernelFindMemBlockByAddrForPidForDriver.
This is a guessed name. Temp name was <code>add_heap</code>.
 
Equivalent to [[SceSysmem#scePUIDOpenByNameWithClassForDriver|scePUIDOpenByNameWithClass]], but the object's class must match exactly the provided <code>pClass</code>.


<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source>
<source lang="C">SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID pid, const char *name, const SceClass *pClass);</source>


=== sceKernelGetMemBlockAllocSizeForDriver ===
=== scePUIDCloseForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-2.120.011 || 0x63E5754B
| 0.990-3.60 || 0x84A4AF5E
|-
| 2.500.071-3.740.011 || not present
|}
|}


This function was replaced since System Software version 2.500.071 by [[#sceKernelGetMemBlockAllocMapSizeForDriver]].
Temp name was sceKernelDeleteUserUidForDriver.


<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID memid, SceSize *pAllocSize);</source>
<source lang="c">int scePUIDCloseForDriver(SceUID pid, SceUID puid);</source>


=== sceKernelGetMemBlockAllocMapSizeForDriver ===
=== scePUIDSetNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.120.011 || not present
| 0.990-3.60 || 0x12624884
|-
| 2.500.071-3.740.011 || 0x78337B62
|}
|}


Temp name was sceKernelMemBlockGetSomeSizeForDriver.
Temp name was sceKernelSetNameForPidForUidForDriver.


This function is a replacement since System Software version 2.500.071 of [[#sceKernelGetMemBlockAllocSizeForDriver]].
<source lang="c">int scePUIDSetNameForDriver(SceUID pid, SceUID puid, const char *name);</source>


<source lang="C">int sceKernelGetMemBlockAllocMapSizeForDriver(SceUID memid, SceSize *pAllocMapSize);</source>
=== scePUIDGetObjectForDriver ===
 
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xF3BBE2E1
| 0.990-3.60 || 0xFE6D7FAE
|}
|}


Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.
Temp name was sceKernelGetObjectForPidForUidForDriver.


<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source>
<source lang="c">int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);</source>


=== sceKernelGetMemBlockPARangeForDriver ===
=== scePUIDtoGUIDForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x98C15666
| 0.990.000-3.740.011 || 0x45D22597
|}
|}


Temp name was sceKernelGetMemBlockAddrPairForUidForDriver.
Temp name was sceKernelKernelUidForUserUidForDriver.


Returns the physical address and size (pRange) of the memory block if it is physically continuous.
Returns the Global UID of a process based on its Process UID.


<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source>
<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID puid);</source>


=== sceKernelGetMemBlockBaseForDriver ===
=== scePUIDtoGUIDWithClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.74 || 0xA841EDDA
| 0.990 || not present
|-
| 3.60 || 0x184172B1
|}
|}


<source lang="C">
Temp name was sceKernelKernelUidForUserUidForClassForDriver.
/**
 
* @brief Get mapped base address of memory block.
<source lang="c">SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID puid, SceClass *pClass);</source>
*
* Get base address of memory block.
* @param[in] uid block id
* @param[out] ppBase base address of memory block
* @retval SCE_OK success
* @retval <SCE_OK Error
*/
int sceKernelGetMemBlockBaseForDriver(SceUID uid, void **ppBase);
</source>


=== sceKernelGetMemBlockVBaseForDriver ===
=== scePUIDGetNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB81CF0A3
| 0.990-3.60 || 0x09896EB7
|}
|}


Temp name was sceKernelGetMemBlockKernelPageForDriver.
Temp name was sceKernelGetNameForPidByUidForDriver, scePUIDGetEntryHeapNameForDriver


<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source>
<source lang="C">int scePUIDGetNameForDriver(SceUID pid, SceUID puid, char **pName);</source>


=== sceKernelGetMemBlockMappedBaseForDriver ===
=== scePUIDGetClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0B1FD5C3
| 0.990-3.60 || 0xE9728A12
|}
|}


<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source>
Temp name was sceKernelGetClassForPidForUidForDriver.
 
<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID puid, SceClass **ppClass);</source>


=== sceKernelGetMemBlockPAVectorForDriver ===
=== sceUIDKernelCreateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x19A51AC7
| 0.990.000-1.060.031 || 0x7FC849B1
|-
| 1.50-3.740.011 || not present
|}
|}


Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.
Calls [[#sceGUIDKernelCreateForKernel]].
 
Create a UID with default attribute (0x30000).


<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source>
<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>


=== sceKernelGetMemBlockInfoForDriver ===
=== sceGUIDKernelCreateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xA73CFFEF
| 0.931-0.990 || not present
|-
| 1.000.071-3.740.011 || 0x56A13E90
|}
|}


Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.
Temp name was sceUIDKernelCreate2ForDriver, sceKernelCreateUidObj2ForDriver.
 
Create a UID with default attribute (0x30000).


<source lang="c">int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source>
<source lang="c">SceUID sceGUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>


=== sceKernelGetMemBlockInfoExForDriver ===
=== sceUIDOpenByNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x24A99FFF
| 0.931-0.990 || 0x796881D6
|-
| 3.60 || not present
|}
|}


This is a guessed name.
Calls [[#sceGUIDOpenByNameForDriver]].


<source lang="c">int sceKernelGetMemBlockInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *pInfo);</source>
<source lang="c">SceUID sceUIDOpenByNameForDriver(const char *name);</source>


=== sceKernelDecRefCountMemBlockForDriver ===
=== sceUIDCloseForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xF50BDC0C
| 0.990 || 0x32C5F628
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.
if (flag_or_addr_or_pid & 0x40000000) == 0 calls [[#sceGUIDCloseForDriver]] else [[#scePUIDCloseForDriver]].


<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source>
<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source>


=== sceKernelIncRefCountMemBlockForDriver ===
=== SceSysmemForDriver_F09A7D09 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xEAF3849B
| 0.990 || 0xF09A7D09
|-
| 3.60-3.74 || not present
|}
|}


Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.
Calls [[#sceGUIDCloseForDriver]].


<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source>
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source>


=== sceKernelMemBlockType2MemtypeForDriver ===
=== sceUIDGetDefaultClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x20C811FA
| 0.931-0.990 || 0xFE28F5EB
|-
| 3.60 || not present
|}
|}


<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source>
<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source>


=== sceKernelMemBlockTypeGetPrivilegesForDriver ===
=== sceUIDtoObjectForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x6A0792A3
| 0.990 || 0xAB7AC3D1
|}
|}


<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source>
This is a guessed name.
 
Calls [[#sceUIDtoObjectForKernel]].
 
<source lang="C">SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);</source>


=== sceKernelMemBlockTypeGetUnknownForDriver ===
=== sceUIDtoClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCB0F3A33
| 0.990 || 0x65B9B393
|-
| 3.60 || not present
|}
|}


<source lang="c">int sceKernelMemBlockTypeGetUnknownForDriver(SceKernelMemBlockType type);</source>
Calls [[#sceGUIDtoClassForKernel]].


=== sceKernelPartitionMapMemBlockForDriver ===
<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source>
 
=== sceUIDClassInitForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x58D21746
| 0.931-0.990 || 0xE6D75E99
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelMapBlockUserVisibleForDriver.
Renamed to [[SceSysmem#sceUIDClassInitClassForDriver|sceUIDClassInitClassForDriver]].


<source lang="c">int sceKernelPartitionMapMemBlockForDriver(SceUID uid);</source>
<source lang="C">int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);</source>


=== sceKernelRemapMemBlockForDriver ===
=== sceUIDClassInitClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.05 || 0x8D332AE1 (in ForKernel?)
| 0.931-0.990 || not present
|-
|-
| 1.50-3.60 || not present
| 3.60 || 0x61317102
|}
|}


This can be used to remap RW memory as RX. To do this, first allocate a memory block of type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW</code>. After you are done writing, call sceKernelRemapMemBlockForDriver with type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.
Temp name was sceKernelCreateClassForDriver.


<source lang="c">int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
<source lang="c">int sceUIDClassInitClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);</source>


=== sceKernelPartialRemapMemBlockForDriver ===
=== sceUIDGetClassInfoAllForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.06 || not present
| 0.990 || 0x3EF32C6C
|-
|-
| 1.500.151-3.740.011 || 0xDFE2C8CB
| 3.60 || not present. Moved to ForKernel
|}
|}


Temp name was sceKernelRemapBlockForDriver, sceKernelRemapMemBlockForDriver.
See [[SceSysmem#sceUIDClassGetClassInfoAllForKernel|sceUIDClassGetClassInfoAllForKernel]]


This can be used to remap RW memory as RX. To do this, first allocate a memory block of type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW</code>. After you are done writing, call sceKernelPartialRemapMemBlockForDriver with type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.
=== sceGUIDCreateForDriver ===
 
<source lang="c">int sceKernelPartialRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
 
=== sceKernelUnmapMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFFCD9B60
| 0.990-3.60 || 0x89A44858
|}
|}


<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</source>
Temp name was sceKernelCreateUidObjForUidForDriver.
 
Create a GUID with default attribute (0x30000) for the specified UID.
 
<source lang="c">SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID guid, SceKernelObject **ppEntry);</source>


=== sceKernelGetPhysicalMemoryTypeForDriver ===
=== sceGUIDOpenByNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x0AAA4FDD
| 0.931-3.60 || 0xD76E7452
|}
|}


Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver
Temp name was sceKernelOpenUidForNameForDriver.


<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source>
<source lang="c">SceUID sceGUIDOpenByNameForDriver(const char *name);</source>


=== sceKernelGetPhyMemInfoForDriver ===
=== sceGUIDCloseForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x89475192
| 0.990-3.60 || 0x047D32F2
|}
|}


<source lang="c">
Temp name was sceKernelDeleteUidForDriver.
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60
  SceSize size;  // Size of this structure
  void* pbase;  // Base physical address
  SceSize psize; // Physical size
} SceKernelPhyMemInfo;


// as of FW 0.931-0.990, pindex must be one of these values: 1 PhyPartKernel, 8 PageVenezia, 9 PageVIP
<source lang="C">int sceGUIDCloseForDriver(SceUID guid);</source>
#define SCE_KERNEL_PHYMEMPART_KERNEL_INDEX 1
#define SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX 6
#define SCE_KERNEL_PAGE_VENEZIA_INDEX 8
#define SCE_KERNEL_PAGE_VIP_INDEX 9


SceInt32 sceKernelGetPhyMemInfoForDriver(SceUInt32 pindex, SceKernelPhyMemInfo *pInfo);
=== sceGUIDGetClassForDriver ===
</source>
 
=== SceSysmemForDriver_13805CA8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x13805CA8
| 0.990-3.60 || 0xC74B0152
|}
|}


Does some MemBlock partial operations.
Temp name was sceKernelGetClassForUidForDriver.


<source lang="c">
<source lang="c">int sceGUIDGetClassForDriver(SceUID guid, SceClass **ppClass);</source>
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_ALLOCATED 1
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_FREE 2
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_MAPPED 3
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_ALLOCATED 8
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_MAPPED_RW 16
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_MAPPED_RO 32


int SceSysmemForDriver_13805CA8(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);
=== sceGUIDSetNameForDriver ===
</source>
 
=== SceSysmemForDriver_16713BE8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x16713BE8
| 1.50-3.60 || 0x4CFA4100
|}
|}


Does some MemBlock partial operations.
Temp name was sceKernelSetObjectForUidForDriver. Wrongfully named scePUIDSetNameForDriver.


Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
Calls the same routine as [[SceSysmem#sceGUIDSetForKernel|sceGUIDSetForKernel]], but passes NULL for pClass and pObject.


<source lang="c">int SceSysmemForDriver_16713BE8(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
<source lang="c">SceInt32 sceGUIDSetNameForDriver(SceUID guid, const char *name);</source>


=== SceSysmemForDriver_4C584B29 ===
=== sceGUIDNameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4C584B29
| 0.990 || 0xB2BB6216
|-
| 3.60 || 0xE655852F
|}
|}


Does some MemBlock partial operations.
Temp name was sceKernelGetNameForUid2ForDriver.


Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
<source lang="C">char* sceGUIDNameForDriver(SceUID guid);</source>


<source lang="c">int SceSysmemForDriver_4C584B29(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
=== sceGUIDGetNameForDriver ===
 
=== SceSysmemForDriver_6C76AD89 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x6C76AD89
| 3.60 || 0xA78755EB
|}
|}


Does some MemBlock partial operations.
Temp name was sceKernelGetNameForUidForDriver.


Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
<source lang="C">int sceGUIDGetNameForDriver(SceUID guid, char **pName);</source>


<source lang="c">int SceSysmemForDriver_6C76AD89(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
=== sceGUIDGetObjectForDriver ===
 
=== SceSysmemForDriver_8C43B052 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x8C43B052
| 0.990-3.60 || 0x0FC24464
|}
|}


Does some MemBlock partial operations.
Temp name was sceKernelGUIDGetObjectForDriver.


Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
<source lang="c">int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>


<source lang="c">int SceSysmemForDriver_8C43B052(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
=== sceGUIDReferObjectForDriver ===
 
=== sceKernelGetMemBlockProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x1EFC96EA
| 3.60 || 0x0F5C84B7
|}
|}


<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source>
Temp name was sceKernelGetObjectForUidForDriver.
 
<source lang="c">int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>


=== sceKernelMemBlockGetVirPageForDriver ===
=== sceGUIDReferObjectWithLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x64DBE472
| 0.990 || not present
|-
| 3.60 || 0xF6DB54BA
|}
|}


This is a guessed name.
Temp name was sceKernelGetObjectForUidForAttrForDriver.


Does some MemBlock related operations.
<source lang="c">int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);</source>


<source lang="c">int sceKernelMemBlockGetVirPageForDriver(SceUID uid, void *a2);</source>
=== sceGUIDReferObjectWithClassLevelForDriver ===
 
=== sceKernelMemBlockToPAVectorForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x987EE587
| 0.990-3.60 || 0x77066FD1
|}
|}


<source lang="c">int sceKernelMemBlockToPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source>
<source lang="c">int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);</source>


=== sceKernelCreateClassForDriver ===
=== sceGUIDReferObjectWithClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x61317102
| 0.990-3.60 || 0x00ED6C14
|}
|}


<source lang="c">int sceKernelCreateClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);</source>
Temp name was sceKernelGetObjForUidForDriver.


=== sceKernelCreateHeapForDriver ===
<source lang="c">int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
 
=== sceGUIDReferObjectWithSubclassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x9328E0E8
| 0.990-3.60 || 0x72A98D17
|}
|}


The heap pool is thread safe.
Temp name was sceKernelGetObjectForUidForClassTreeForDriver.


has list "SCE_KERNEL_HEAP_HAS_HEAPCB".
<source lang="c">int sceGUIDReferObjectWithSubclassForDriver(SceUID guid, SceClass *pClass, SceKernelObject **ppEntry);</source>


<source lang="C">
=== sceGUIDReleaseObjectForDriver ===
// pOpt can be NULL
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);
</source>
 
=== sceKernelDeleteHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0xD6437637
| 0.990-3.60 || 0x149885C4
|}
|}


<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source>
Temp name was sceKernelUidReleaseForDriver.
 
<source lang="c">int sceGUIDReleaseObjectForDriver(SceUID uid);</source>


=== sceKernelVerifyHeapForDriver ===
=== sceKernelGetUIDClassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xC50A9C0D
| 3.60 || 0x85336A1C
|}
|}


<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);</source>
This is a guessed name.
 
<source lang="C">SceClass *sceKernelGetUIDClassForDriver(void);</source>


=== sceKernelShrinkHeapForDriver ===
=== sceKernelIsSubclassForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x856FA2E3
| 0.990 || 0x6484D03E
|-
| 1.691 || 0x55F4826F
|-
| 3.60 || not present. Moved to ForKernel
|}
|}


<source lang="c">int sceKernelShrinkHeapForDriver(SceUID heapid);</source>
See [[SceSysmem#sceUIDClassIsSubclassForKernel|sceUIDClassIsSubclassForKernel]]


=== sceKernelAllocHeapMemoryForDriver ===
=== SceSysmemForDriver_6F2ACDAE ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x7B4CB60A
| 1.69 || 0x6F2ACDAE
|-
| 1.80-3.74 || not present
|}
|}


Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.
Temp name was switch_ttb_for_pid.


Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.
Changes the TTBR to point to the tables for a given PID.


<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source>
<source lang="c">int SceSysmemForDriver_6F2ACDAE(SceUID pid);</source>


=== sceKernelAllocHeapMemoryFromGlobalHeapForDriver ===
=== sceKernelAllocMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7750CEA7
| 0.931-3.65 || 0xC94850C9
|}
|}


Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uid = -1 (global heap <code>uid</code>).
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.


<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapForDriver(SceSize size);</source>
To allocate a kernel RW block of memory, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW</code>.


=== sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver ===
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->pbase = 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>
 
=== sceKernelAllocMemBlockForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x0B4ED16A
| 0.940-1.50 || 0x59F3159C
|}
|}


Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uid = -1 (global heap <code>uid</code>).
Same as [[#sceKernelAllocMemBlockForDriver]] but authorizes null pOpt.


<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source>


=== sceKernelAllocHeapMemoryWithOptForDriver ===
=== sceKernelAllocMemBlockWithInfoForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB415B5A8
| 0.990-3.60 || 0xD44F464D
|}
|}


Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.
Temp name was sceKernelAllocMemBlockExtForDriver.


Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source>


<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
=== sceKernelFreeMemBlockForDriver ===
 
=== sceKernelAllocHeapMemoryWithOptionForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x49D4DD9B
| 0.931-3.65 || 0x009E1C61
|}
|}


Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.
<source lang="C">int sceKernelFreeMemBlockForDriver(SceUID uid);</source>


Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
=== sceKernelFindMemBlockByAddrForDriver ===
 
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
=== sceKernelFreeHeapMemoryForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x3EBCE343
| 0.990-3.60 || 0x8A1742F6
|}
|}


Temp name was sceKernelMemPoolFreeForDriver.
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source>


<source lang="c">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source>
=== sceKernelFindProcMemBlockByAddrForDriver ===
 
=== sceKernelFreeHeapMemoryFromGlobalHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFB817A59
| 0.990-3.60 || 0x857F1D5A
|}
|}


<source lang="c">int sceKernelFreeHeapMemoryFromGlobalHeapForDriver(void *ptr);</source>
Temp name was sceKernelFindMemBlockByAddrForPidForDriver.


=== sceKernelCountFillValueFromUserForDriver ===
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source>
 
=== sceKernelGetMemBlockAllocSizeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBDA6E42B
| 0.990.000-2.120.011 || 0x63E5754B
|-
| 2.500.071-3.740.011 || not present
|}
|}


Temp name was sceKernelFirstDifferentBlock32UserForDriver.
This function was replaced since System Software version 2.500.071 by [[#sceKernelGetMemBlockAllocMapSizeForDriver]].


<source lang="c">int sceKernelCountFillValueFromUserForDriver(unsigned int *ptr, int value, int byte_size);</source>
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID memid, SceSize *pAllocSize);</source>


=== sceKernelCountFillValueFromUserProcForDriver ===
=== sceKernelGetMemBlockAllocMapSizeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x8334454F
| 0.931.010-2.120.011 || not present
|-
| 2.500.071-3.740.011 || 0x78337B62
|}
|}


Temp name was sceKernelFirstDifferentBlock32UserForPidForDriver.
Temp name was sceKernelMemBlockGetSomeSizeForDriver.
 
This function is a replacement since System Software version 2.500.071 of [[#sceKernelGetMemBlockAllocSizeForDriver]].


<source lang="c">int sceKernelCountFillValueFromUserProcForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);</source>
<source lang="C">int sceKernelGetMemBlockAllocMapSizeForDriver(SceUID memid, SceSize *pAllocMapSize);</source>


=== sceKernelCountFillValue64FromUserForDriver ===
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.120.011 || not present
| 0.990-3.60 || 0xF3BBE2E1
|-
| 2.500.071-3.740.011 || 0xBB3B02C2
|}
|}


Temp name was sceKernelFirstDifferentBlock64UserForDriver.
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.


<source lang="c">int sceKernelCountFillValue64FromUserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source>
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source>


=== sceKernelCountFillValue64FromUserProcForDriver ===
=== sceKernelGetMemBlockPARangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.120.011 || not present
| 0.990-3.60 || 0x98C15666
|-
| 2.500.071-3.740.011 || 0xE83855FD
|}
|}


Temp name was sceKernelFirstDifferentBlock64UserForPidForDriver.
Temp name was sceKernelGetMemBlockAddrPairForUidForDriver.
 
Returns the physical address and size (pRange) of the memory block if it is physically continuous.


<source lang="c">int sceKernelCountFillValue64FromUserProcForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source>
<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source>


=== sceKernelVAtoPAForDriver ===
=== sceKernelGetMemBlockBaseForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x8D160E65
| 0.990-3.74 || 0xA841EDDA
|}
|}


Temp name was sceKernelGetPaddrForDriver.
<source lang="C">
/**
* @brief Get mapped base address of memory block.
*
* Get base address of memory block.
* @param[in] uid block id
* @param[out] ppBase base address of memory block
* @retval SCE_OK success
* @retval <SCE_OK Error
*/
int sceKernelGetMemBlockBaseForDriver(SceUID uid, void **ppBase);
</source>


This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.
=== sceKernelGetMemBlockVBaseForDriver ===
 
Returns <0 on error, values >=0 indicate success.
 
<source lang="c">int sceKernelVAtoPAForDriver(void *pVA, void **pPA);</source>
 
=== sceKernelVAtoPABySWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x65419BD3
| 3.60 || 0xB81CF0A3
|}
|}


Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.
Temp name was sceKernelGetMemBlockKernelPageForDriver.


<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source>
<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source>


=== sceKernelProcVAtoPAForDriver ===
=== sceKernelGetMemBlockMappedBaseForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-2.120.011 || 0xC51934BD
| 3.60 || 0x0B1FD5C3
|-
| 2.500.071-3.740.011 || not present
|}
|}


<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source>
<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source>


=== sceKernelProcModeVAtoPAForDriver ===
=== sceKernelGetMemBlockPAVectorForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x61A67D32
| 0.990-3.60 || 0x19A51AC7
|}
|}


Temp name was sceKernelGetPaddrForPidForDriver.
Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.


<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, SceUInt32 mode, void *pVA, void **pPA);</source>
<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source>


=== sceKernelVARangeToPAVectorForDriver ===
=== sceKernelGetMemBlockInfoForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.740.011 || 0xE68BEEBD
| 0.990-3.60 || 0xA73CFFEF
|}
|}


Temp name was sceKernelGetPaddrListForDriver.
Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.


This function writes into <code>pVector->output_buffer</code> an array of <code>vRange</code> that encompasses the block of memory specified in the input. <code>pVector->ret_count</code> will contain the number of entries written. If <code>pVector->output_buffer</code> is null, it will just write the count.
<source lang="c">int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source>


<source lang="c">int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
=== sceKernelGetMemBlockInfoExForDriver ===
 
=== sceKernelVARangeToPAVectorBySWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.06 || not present
| 3.60 || 0x24A99FFF
|-
| 1.500.151-3.740.011 || 0x08A8A7E8
|}
|}


This is a guessed name. Temp name was sceKernelGetPaddrListForLargePageForDriver.
This is a guessed name.


<source lang="c">int sceKernelVARangeToPAVectorBySWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
<source lang="c">int sceKernelGetMemBlockInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *pInfo);</source>


=== sceKernelVARangeToPAVectorByHWForDriver ===
=== sceKernelDecRefCountMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.06 || not present
| 0.990-3.60 || 0xF50BDC0C
|-
| 1.500.151-3.740.011 || 0x16844CE6
|}
|}


Temp name was sceKernelGetPaddrListForSmallPageForDriver.
Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.


<source lang="c">int sceKernelVARangeToPAVectorByHWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source>


=== sceKernelVARangeToPARangeForDriver ===
=== sceKernelIncRefCountMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.740.011 || 0xAE36C775
| 0.990-3.60 || 0xEAF3849B
|}
|}


Temp name was sceKernelGetPaddrPairForDriver.
Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.


<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source>


=== sceKernelVARangeToPARangeBySWForDriver ===
=== sceKernelMemBlockType2MemtypeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.06 || not present
| 0.931-3.60 || 0x20C811FA
|-
| 1.500.151-3.740.011 || 0x32257A24
|}
|}


This is a guessed name. Temp name was sceKernelGetPaddrPairForLargePageForDriver.
<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source>


<source lang="c">int sceKernelVARangeToPARangeBySWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
=== sceKernelMemBlockTypeGetPrivilegesForDriver ===
 
=== sceKernelVARangeToPARangeByHWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.06 || not present
| 3.60 || 0x6A0792A3
|-
| 1.500.151-3.740.011 || 0xB3575090
|}
|}


This is a guessed name. Temp name was sceKernelGetPaddrPairForSmallPageForDriver.
<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source>


<source lang="c">int sceKernelVARangeToPARangeByHWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
=== sceKernelMemBlockType2SourceMemTypeForDriver ===
 
=== sceKernelIsAccessibleRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x9C78064C
| 0.990-3.60 || 0xCB0F3A33
|}
|}


Temp name was sceKernelFindMemBlockForDriver.
This is a guessed name. Temp name was sceKernelMemBlockTypeGetUnknownForDriver.


Also exported as [[#sceKernelIsAccessibleRangeForDebugger]].
<source lang="c">
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_IO    0x100000
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_LPDDR 0x200000
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_CDRAM 0x400000


?Returns 0 on success (if is accessible range)?
int sceKernelMemBlockType2SourceMemTypeForDriver (SceKernelMemBlockType type);
</source>


<source lang="c">int sceKernelIsAccessibleRangeForDriver(SceUInt32 permission_type, const void *pVA, SceSize len);</source>
=== sceKernelMapMemBlockForDriver ===
 
=== sceKernelIsAccessibleRangeProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x9F6E45E3
| 0.990-3.60 || 0x58D21746
|}
|}


Temp name was sceKernelFindMemBlockForPidForDriver.
Temp name was sceKernelMapBlockUserVisibleForDriver, sceKernelPartitionMapMemBlockForDriver.
 
Also exported as [[#sceKernelIsAccessibleRangeProcForDebugger]].
 
?Returns 0 on success (if is accessible range)?


<source lang="C">int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 permission_type, const void *pVA, SceSize len);</source>
<source lang="c">int sceKernelMapMemBlockForDriver(SceUID uid);</source>


=== sceKernelIsEqualAccessibleRangeProcBySWForDriver ===
=== sceKernelMapMemBlockWithFlagForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.800.071-3.740.011 || 0xF4AD89D8
| 3.60 || 0x04059C4B
|}
|}


Temp name was sceKernelProcIsPAWithinSameSection, sceKernelIsPaddrWithinSameSectionForUidForDriver.
This is a guessed name. Temp name was sceKernelMapBlockUserVisibleWithFlagForDriver.


<source lang="C">int sceKernelIsEqualAccessibleRangeProcBySWForDriver(SceUID pid, int permission_type, void *pVA, SceSize len);</source>
<source lang="c">
/**
* Map a memblock.
*
* @param[in] uid  - GUID of the memblock to map.
* @param[in] flag - Set to 1 to prevent DCache invalidation before mapping.
*
* @return 0 on success, < 0 on error.
*/
int sceKernelMapMemBlockWithFlagForDriver(SceUID uid, int flag);
</source>


=== sceKernelGetDebugPADramRangeForDriver ===
=== sceKernelRemapMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.800.071-3.740.011 || 0xC9928F5E
| 0.990-1.06 || not present
|-
| 1.500.151-3.740.011 || 0xDFE2C8CB
|}
|}


This is a guessed name. Temp name was sceKernelGetUnknownValidPhysAddressSpaceForDriver.
Temp name was sceKernelRemapBlockForDriver, sceKernelPartialRemapMemBlockForDriver.
 
This can be used to remap RW memory as RX. To do this, first allocate a memory block of type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW</code>. After you are done writing, call sceKernelRemapMemBlockForDriver with type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.


<source lang="C">int sceKernelGetDebugPADramRangeForDriver(SceUIntPtr *address, SceSize *length);</source>
<source lang="c">int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>


=== sceKernelIsVAWithinDebugPADramRangeForDriver ===
=== sceKernelUnmapMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.800.071-3.740.011 || 0xA7C0D1FC
| 3.60 || 0xFFCD9B60
|}
|}


This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver.
<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</source>


<source lang="C">int sceKernelIsVAWithinDebugPADramRangeForDriver(const void *pVA);</source>
=== sceKernelGetPhysicalMemoryTypeForDriver ===
 
=== sceKernelUserMapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x278BC201
| 0.990-3.60 || 0x0AAA4FDD
|}
|}


Temp name was sceKernelMapUserBlockDefaultTypeForDriver.
Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver


Assigns type 0.
<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source>


<source lang="C">SceUID sceKernelUserMapForDriver(const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source>
=== sceKernelGetPhyMemInfoForDriver ===
 
=== sceKernelProcUserMapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.36 || not present
| 0.931-3.60 || 0x89475192
|-
| 3.500.000-3.740.011 || 0x0091D74D
|}
|}


Temp name was sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly the real name.
<source lang="c">
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60
  SceSize size;  // Size of this structure
  void* pbase;  // Base physical address
  SceSize psize; // Physical size
} SceKernelPhyMemInfo;


Assigns type 0.
// as of FW 0.931-0.990, pindex must be one of these values: 1 PhyPartKernel, 8 PageVenezia, 9 PageVIP
#define SCE_KERNEL_PHYMEMPART_KERNEL_INDEX 1
#define SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX 6
#define SCE_KERNEL_PAGE_VENEZIA_INDEX 8
#define SCE_KERNEL_PAGE_VIP_INDEX 9


<source lang="C">SceUID sceKernelProcUserMapForDriver(SceUID pid, const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source>
SceInt32 sceKernelGetPhyMemInfoForDriver(SceUInt32 pindex, SceKernelPhyMemInfo *pInfo);
</source>


=== sceKernelUserMapWithFlagsForDriver ===
=== sceKernelPartialAllocMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.030-1.060.031 || not present
| 3.60 || 0x16713BE8
|-
| 1.500.151-3.740.011 || 0x7D4F8B5F
|}
|}


Temp name was sceKernelMapUserBlockForDriver.
This is a guessed name.
 
Permission is either "1" for read only, no execute or "2"/"3" for read write, no execute. Type is either 0, 1, or 17 and affects the block type. 0 is default. This will allocate kernel memory starting at kernel_page. To get the same memory as the user pointer, add the kernel_offset. kernel_size is how much is allocated.


<source lang="c">
<source lang="c">
// this signature is for FW 1.50-1.69
/**
int sceKernelUserMapWithFlagsForDriver(SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
* Allocates PhyPages for a partial range of a memblock.
 
*
// this signature is for FW 3.60 - it now allows to give a name
* @param[in] uid  - GUID of the memblock.
int sceKernelUserMapWithFlagsForDriver(char *name, SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
* @param[in] vbase - Start of the range.
* @param[in] vsize - Size of the range.
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[FREE|NONE]
*
* @return 0 on success, < 0 on error.
*/
int sceKernelPartialAllocMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 opCheck);
</source>
</source>


=== sceKernelUserUnmapForDriver ===
=== sceKernelPartialFreeMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x00575B00
| 3.60 || 0x8C43B052
|}
|}


Temp name was sceKernelMemBlockReleaseForDriver.
This is a guessed name.


<source lang="c">int sceKernelUserUnmapForDriver(SceUID uid);</source>
<source lang="c">
/**
* Unmaps and frees PhyPages for a partial range of a memblock.
*
* @param[in] uid  - GUID of the memblock.
* @param[in] vbase - Start of the range.
* @param[in] vsize - Size of the range.
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|NONE]
*
* @return 0 on success, < 0 on error.
*/
int sceKernelPartialFreeMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);
</source>


=== sceKernelMapBlockUserVisibleWithFlagForDriver ===
=== sceKernelPartialMapMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x04059C4B
| 3.60 || 0x13805CA8
|}
|}


<source lang="c">int sceKernelMapBlockUserVisibleWithFlagForDriver(SceUID uid, int some_flag);</source>
This is a guessed name.


=== sceKernelUnlockRangeForDriver ===
<source lang="c">
{| class="wikitable"
/**
|-
* Maps PhyPages for a partial range of a memblock.
! Version !! NID
*
* @param[in] uid  - GUID of the memblock.
* @param[in] vbase - Start of the range.
* @param[in] vsize - Size of the range.
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|FREE|ALLOCNOMAP|NONE]
*
* @return 0 on success, < 0 on error.
*/
int sceKernelPartialMapMemBlockForDriver (SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);
</source>
 
=== sceKernelPartialRemapMemBlockForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
|-
| 3.60 || 0x75C70DE0
| 3.60 || 0x4C584B29
|}
|}


Temp name was sceKernelMemRangeReleaseForDriver.
This is a guessed name.


<source lang="c">int sceKernelUnlockRangeForDriver(void *addr, SceSize size);</source>
<source lang="c">
/**
* Remaps PhyPages for a partial range of a memblock.
*
* @param[in] uid  - GUID of the memblock.
* @param[in] vbase - Start of the range.
* @param[in] vsize - Size of the range.
* @param[in] op    - SCE_KERNEL_MEMBLOCK_PARTIAL_OP_[REMAP_RO|REMAP_RW] | SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED_RW|MAPPED_RO|NONE]
*
* @return 0 on success, < 0 on error.
*/
int sceKernelPartialRemapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 op);
</source>


=== sceKernelUnlockRangeProcForDriver ===
=== sceKernelPartialUnmapMemBlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xA8525B06
| 3.60 || 0x6C76AD89
|}
|}


Temp name was sceKernelMemRangeReleaseForPidForDriver.
This is a guessed name.


<source lang="c">int sceKernelUnlockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source>
<source lang="c">
/**
* Unmaps PhyPages for a partial range of a memblock.
*
* @param[in] uid  - GUID of the memblock.
* @param[in] vbase - Start of the range.
* @param[in] vsize - Size of the range.
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED|NONE]
*
* @return 0 on success, < 0 on error.
*/
int sceKernelPartialUnmapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);
</source>


=== sceKernelUnlockRangeWithModeForDriver ===
=== sceKernelGetMemBlockProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x22CBE925
| 0.990-3.60 || 0x1EFC96EA
|}
|}


Temp name was sceKernelMemRangeReleaseWithPermForDriver, sceKernelUnlockRangeWithPermForDriver.
<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source>
 
Decreases references to pages.


<source lang="c">int sceKernelUnlockRangeWithModeForDriver(SceKernelLockMode mode, void *addr, SceSize size);</source>
=== sceKernelMemBlockToPARangeForDriver ===
 
=== sceKernelLockRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x59A4402F
| 3.60 || 0x64DBE472
|}
|}


Temp name was sceKernelMemRangeRetainForDriver.
This is a guessed name. Temp name was sceKernelMemBlockGetVirPageForDriver.
 
Gets a single PARange from the memblock. Returns an error if the memblock has more than one PARange.


<source lang="c">int sceKernelLockRangeForDriver(void *addr, SceSize size);</source>
<source lang="c">int sceKernelMemBlockToPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source>


=== sceKernelLockRangeProcForDriver ===
=== sceKernelMemBlockToPAVectorForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x659586BF
| 3.60 || 0x987EE587
|}
|}


Temp name was sceKernelMemRangeRetainForPidForDriver.
<source lang="c">int sceKernelMemBlockToPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source>


<source lang="c">int sceKernelLockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source>
=== sceKernelCreateHeapForDriver ===
 
=== sceKernelLockRangeWithModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBC0A1D60
| 0.931-3.60 || 0x9328E0E8
|}
|}


Temp name was sceKernelMemRangeRetainWithPermForDriver, sceKernelLockRangeWithPermForDriver.
The heap pool is thread safe.


Increases references to pages.
has list "SCE_KERNEL_HEAP_HAS_HEAPCB".


<source lang="c">int sceKernelLockRangeWithModeForDriver(SceKernelLockMode mode, const void *addr, SceSize size);</source>
<source lang="C">
// pOpt can be NULL
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);
</source>


=== sceKernelReadUserForDriver ===
=== sceKernelDeleteHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xE08F3967
| 0.940-3.60 || 0xD6437637
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);</source>
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source>


=== sceKernelCopyToUserForDriver ===
=== sceKernelVerifyHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x6D88EF8A
| 0.990-3.60 || 0xC50A9C0D
|}
|}


Temp name was sceKernelMemcpyKernelToUserForDriver.
<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);</source>


Copies <code>size</code> bytes from a kernel buffer to a user buffer. Writes to <code>uaddr</code> are performed using <code>strt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.
=== sceKernelShrinkHeapForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x856FA2E3
|}


<source lang="c">SceInt32 sceKernelCopyToUserForDriver(void *uaddr, const void *kaddr, SceSize size);</source>
<source lang="c">int sceKernelShrinkHeapForDriver(SceUID heapid);</source>


=== sceKernelCopyToUserProcForDriver ===
=== sceKernelAllocHeapMemoryForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x6B825479
| 0.931-3.60 || 0x7B4CB60A
|}
|}


Temp name was sceKernelMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserForDriver.
Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.


Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyToUserForDriver|sceKernelCopyToUser]].
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.


<source lang="c">SceInt32 sceKernelProcCopyToUserForDriver(ScePID pid, void *uaddr, const void *kaddr, SceSize size);</source>
<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source>


=== sceKernelCopyToUserProcDomainForDriver ===
=== sceKernelAllocUncacheHeapMemoryForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.69 || 0x571D2739
| 3.60 || 0x7750CEA7
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelRoMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserRoForDriver.
Temp name was sceKernelAllocHeapMemoryFromGlobalHeapForDriver.


Same as [[SceSysmem#sceKernelCopyToUserProcForDriver|sceKernelCopyToUserProc]], but sets DACR to 0xFFFFFFFF (ignore access permission bits in page table) before the copy then restores it. Use this function instead of sceKernelCopyToUserProc if you need to write data to read-only pages.
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uncache heap.


<source lang="c">SceInt32 sceKernelCopyToUserProcDomainForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
<source lang="c">void* sceKernelAllocUncacheHeapMemoryForDriver(SceSize size);</source>


=== sceKernelCopyFromUserForDriver ===
=== sceKernelAllocUncacheHeapMemoryWithOptionForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xBC996A7A
| 0.990-3.60 || 0x0B4ED16A
|}
|}


Temp name was sceKernelMemcpyUserToKernelForDriver.
Temp name was sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver.


Copies <code>size</code> bytes from a user buffer to a kernel buffer. Reads from <code>uaddr</code> are performed using <code>ldrt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uncache heap.


<source lang="c">SceInt32 sceKernelCopyFromUserForDriver(void *kaddr, const void *uaddr, SceSize size);</source>
<source lang="c">void* sceKernelAllocUncacheHeapMemoryWithOptionForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>


=== sceKernelCopyFromUserProcForDriver ===
=== sceKernelAllocHeapMemoryWithOptForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x605275F8
| 3.60 || 0xB415B5A8
|}
|}


Temp names were sceKernelMemcpyUserToKernelForPidForDriver, sceKernelProcCopyFromUserForDriver.
Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.


Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUser]].
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.


<source lang="c">SceInt32 sceKernelCopyFromUserProcForDriver(SceUID pid, void *dst, void *src, SceSize size);</source>
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>


=== sceKernelUserCopyForDriver ===
=== sceKernelAllocHeapMemoryWithOptionForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.990-3.60 || 0x49D4DD9B
|-
| 1.50-3.60 || 0x1BD44DD5
|}
|}


Temp name was sceKernelMemcpyUserToUserForDriver.
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.


<source lang="C">int sceKernelUserCopyForDriver(void *dst, const void *src, SceSize size);</source>
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.


=== sceKernelProcUserCopyForDriver ===
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
=== sceKernelFreeHeapMemoryForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.990-3.60 || 0x3EBCE343
|-
| 1.50-3.60 || 0x8E086C33
|}
|}


Temp name was sceKernelMemcpyUserToUserForPidForDriver.
Temp name was sceKernelMemPoolFreeForDriver.


<source lang="c">int sceKernelProcUserCopyForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
<source lang="c">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source>


=== sceKernelUserStrnlenForDriver ===
=== sceKernelFreeUncacheHeapMemoryForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present (in ForKernel)
| 3.60 || 0xFB817A59
|-
| 0.940-0.990 || 0xFF06898A
|-
| 1.50-3.60 || not present
|}
|}


Temp name was sceKernelStrnlenFromUserForDriver.
Temp name was sceKernelFreeHeapMemoryFromGlobalHeapForDriver.


<source lang="C">SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);</source>
<source lang="c">int sceKernelFreeUncacheHeapMemoryForDriver(void *ptr);</source>


=== sceKernelStrnlenUserForDriver ===
=== sceKernelCountFillValueFromUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 3.60 || 0xBDA6E42B
|-
| 1.50-3.60 || 0xB429D419
|}
|}


<source lang="c">SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);</source>
Temp name was sceKernelFirstDifferentBlock32UserForDriver.
 
<source lang="c">int sceKernelCountFillValueFromUserForDriver(unsigned int *ptr, int value, int byte_size);</source>


=== sceKernelProcStrnlenUserForDriver ===
=== sceKernelCountFillValueFromUserProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 1.69-3.60 || 0x8334454F
|-
| 1.50-3.60 || 0x9929EB07
|}
|}


<source lang="c">SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);</source>
Temp name was sceKernelFirstDifferentBlock32UserForPidForDriver.
 
<source lang="c">int sceKernelCountFillValueFromUserProcForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);</source>


=== sceKernelProcUserStrcpyForDriver ===
=== sceKernelCountFillValue64FromUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.50 || 0xEBCB3970
| 0.931.010-2.120.011 || not present
|-
|-
| 3.60 || not present
| 2.500.071-3.740.011 || 0xBB3B02C2
|}
|}


<source lang="C">int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);</source>
Temp name was sceKernelFirstDifferentBlock64UserForDriver.
 
<source lang="c">int sceKernelCountFillValue64FromUserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source>


=== sceKernelStrncpyFromUserSpecialForDriver ===
=== sceKernelCountFillValue64FromUserProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.50 || 0x7440BCDA
| 0.931.010-2.120.011 || not present
|-
|-
| 3.60 || not present
| 2.500.071-3.740.011 || 0xE83855FD
|}
|}


<source lang="C">int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>
Temp name was sceKernelFirstDifferentBlock64UserForPidForDriver.
 
<source lang="c">int sceKernelCountFillValue64FromUserProcForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source>


=== sceKernelStrncpyToUserSpecialForDriver ===
=== sceKernelVAtoPAForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.50 || 0x369355F1
| 0.990.000-3.740.011 || 0x8D160E65
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>
Temp name was sceKernelGetPaddrForDriver.
 
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.
 
Returns <0 on error, values >=0 indicate success.
 
<source lang="c">int sceKernelVAtoPAForDriver(ScePVoid pVA, SceUIntPtr *pPA);</source>


=== sceKernelUserStrncpyForDriver ===
=== sceKernelVAtoPABySWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present. Present but not exported.
| 0.990.000-3.740.011 || 0x65419BD3
|-
| 0.940-0.990 || 0xE6D5EFE4
|-
| 1.50-3.60 || not present
|}
|}


Returns 0 on success.
Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.


<source lang="C">int sceKernelUserStrncpyForDriver(char *dst, const char *src, SceSize maxlen);</source>
<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source>


=== sceKernelStrncpyFromUserForDriver ===
=== sceKernelProcVAtoPAForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.990.000-2.120.011 || 0xC51934BD
|-
|-
| 1.50-3.60 || 0xDB3EC244
| 2.500.071-3.740.011 || not present
|}
|}


Temp name was sceKernelStrncpyUserToKernelForDriver.
<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source>


<source lang="c">int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);</source>
=== sceKernelProcModeVAtoPAForDriver ===
 
=== sceKernelProcStrncpyFromUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.990.000-3.740.011 || 0x61A67D32
|-
| 1.50-3.60 || 0x75AAF178
|}
|}


Temp name was sceKernelStrncpyUserForPidForDriver.
Temp name was sceKernelGetPaddrForPidForDriver.


<source lang="c">int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source>
<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, SceUInt32 mode, void *pVA, void **pPA);</source>


=== sceKernelStrncpyToUserForDriver ===
=== sceKernelVARangeToPAVectorForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.931.010-3.740.011 || 0xE68BEEBD
|-
| 1.50-3.60 || 0x80BD6FEB
|}
|}


Temp name was sceKernelStrncpyKernelToUserForDriver.
Temp name was sceKernelGetPaddrListForDriver.
 
This function writes into <code>pVector->output_buffer</code> an array of <code>vRange</code> that encompasses the block of memory specified in the input. <code>pVector->ret_count</code> will contain the number of entries written. If <code>pVector->output_buffer</code> is null, it will just write the count.


<source lang="c">int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);</source>
<source lang="c">int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>


=== sceKernelProcStrncpyToUserForDriver ===
=== sceKernelVARangeToPAVectorBySWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.931.010-1.06 || not present
|-
|-
| 1.50-3.60 || 0xFED82F2D
| 1.500.151-3.740.011 || 0x08A8A7E8
|}
|}


Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.
This is a guessed name. Temp name was sceKernelGetPaddrListForLargePageForDriver.


<source lang="c">int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source>
<source lang="c">int sceKernelVARangeToPAVectorBySWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>


== SceSysmemForDebugger ==
=== sceKernelVARangeToPAVectorByHWForDriver ===
 
This library was removed on FW 1.80.
 
=== sceKernelPhysicalAddressSpaceStartForDebugger ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x6AE2188F
| 0.931.010-1.06 || not present
|-
|-
| 1.691-3.60 || not present
| 1.500.151-3.740.011 || 0x16844CE6
|}
|}


<source lang="C">int sceKernelPhysicalAddressSpaceStartForDebugger(void);</source>
Temp name was sceKernelGetPaddrListForSmallPageForDriver.
 
<source lang="c">int sceKernelVARangeToPAVectorByHWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>


=== sceKernelGetPhysicalAddressSpaceForDebugger ===
=== sceKernelVARangeToPARangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xE8905626
| 0.940-3.740.011 || 0xAE36C775
|-
| 1.691-3.60 || not present
|}
|}


In FW 0.931, it calls sceKernelPhysicalAddressSpaceStartForDebugger.
Temp name was sceKernelGetPaddrPairForDriver.


<source lang="C">void *sceKernelGetPhysicalAddressSpaceForDebugger(void);</source>
<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source>


=== sceKernelIsAccessibleRangeProcForDebugger ===
=== sceKernelVARangeToPARangeBySWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.692 || 0x01DFC193
| 0.931.010-1.06 || not present
|-
|-
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeProcForDriver]].
| 1.500.151-3.740.011 || 0x32257A24
|}
|}


?Returns 0 on success (if is accessible range)?
This is a guessed name. Temp name was sceKernelGetPaddrPairForLargePageForDriver.


<source lang="C">int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source>
<source lang="c">int sceKernelVARangeToPARangeBySWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source>


=== sceKernelIsAccessibleRangeForDebugger ===
=== sceKernelVARangeToPARangeByHWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.692 || 0xD027761F
| 0.931.010-1.06 || not present
|-
|-
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeForDriver]].
| 1.500.151-3.740.011 || 0xB3575090
|}
|}


?Returns 0 on success (if is accessible range)?
This is a guessed name. Temp name was sceKernelGetPaddrPairForSmallPageForDriver.


<source lang="C">int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);</source>
<source lang="c">int sceKernelVARangeToPARangeByHWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source>


== SceSysmem ==
=== sceKernelIsAccessibleRangeForDriver ===
 
The SceSysmem library is responsible for both low-level and high-level memory management. There are functions for allocating raw blocks of memory (similar to Linux <code>sbrk</code>) as well as functions for maintaining a heap-like structure (similar to <code>malloc</code>) for kernel, however [[SceLibKernel]] implements a proper heap and that is used for user code.
 
=== sceKernelMapMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.69 || 0x7B763A21
| 0.931-3.60 || 0x9C78064C
|-
| 3.60 || not present
|}
|}


=== sceKernelRemapMemBlock ===
Temp name was sceKernelFindMemBlockForDriver.
 
Also exported as [[#sceKernelIsAccessibleRangeForDebugger]].
 
?Returns 0 on success (if is accessible range)?
 
<source lang="c">int sceKernelIsAccessibleRangeForDriver(SceUInt32 permission_type, const void *pVA, SceSize len);</source>
 
=== sceKernelIsAccessibleRangeProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.69 || 0x3B29E0F5
| 0.931-3.60 || 0x9F6E45E3
|-
| 3.60 || not present
|}
|}


=== sceKernelPartialMapMemBlock ===
Temp name was sceKernelFindMemBlockForPidForDriver.
 
Also exported as [[#sceKernelIsAccessibleRangeProcForDebugger]].
 
?Returns 0 on success (if is accessible range)?
 
<source lang="C">int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 permission_type, const void *pVA, SceSize len);</source>
 
=== sceKernelIsEqualAccessibleRangeProcBySWForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 1.800.071-3.740.011 || 0xF4AD89D8
|-
| 1.69 || 0xC0A59868
|-
| 3.60 || not present
|}
|}


=== sceKernelUnmapMemBlock ===
Temp name was sceKernelProcIsPAWithinSameSection, sceKernelIsPaddrWithinSameSectionForUidForDriver.
 
<source lang="C">int sceKernelIsEqualAccessibleRangeProcBySWForDriver(SceUID pid, int permission_type, void *pVA, SceSize len);</source>
 
=== sceKernelGetDebugPADramRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.69 || 0xEE30D976
| 1.800.071-3.740.011 || 0xC9928F5E
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source>
This is a guessed name. Temp name was sceKernelGetUnknownValidPhysAddressSpaceForDriver.
 
<source lang="C">int sceKernelGetDebugPADramRangeForDriver(SceUIntPtr *address, SceSize *length);</source>


=== sceKernelPartialUnmapMemBlock ===
=== sceKernelIsVAWithinDebugPADramRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 1.800.071-3.740.011 || 0xA7C0D1FC
|-
| 1.69 || 0xCA99929B
|-
| 3.60 || not present
|}
|}


=== sceKernelGetMemBlockInfoByRange ===
This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver.
 
<source lang="C">int sceKernelIsVAWithinDebugPADramRangeForDriver(const void *pVA);</source>
 
=== sceKernelUserMapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.990-3.60 || 0x278BC201
|-
| 0.996-3.60 || 0x006F3DB4
|}
|}


<source lang="c">
Temp name was sceKernelMapUserBlockDefaultTypeForDriver.
/**
 
* @brief Get memory block informaton by virtual address range
Assigns type 0.


* @param[in] vbase base address
<source lang="C">SceUID sceKernelUserMapForDriver(const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source>
* @param[in] vsize  size
* @param[inout] pInfo information structure
*/
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);
</source>


=== sceKernelGetMemBlockInfoByAddr ===
=== sceKernelProcUserMapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x4010AD65
| 0.931.010-3.36 || not present
|-
| 3.500.000-3.740.011 || 0x0091D74D
|}
|}


<source lang="c">
Temp name was sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly the real name.
/**
 
* @brief Get memory block information.
Assigns type 0.
*
 
* Get information about a memory block.
<source lang="C">SceUID sceKernelProcUserMapForDriver(SceUID pid, const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source>
* @param[in] vbase Base address
* @param[inout] pInfo Information structure
*/
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);
</source>


=== sceKernelGetSubbudgetInfo ===
=== sceKernelUserMapWithFlagsForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.931.030-1.060.031 || not present
|-
|-
| 1.69-3.60 || 0x832B4A65
| 1.500.151-3.740.011 || 0x7D4F8B5F
|}
|}
Temp name was sceKernelMapUserBlockForDriver.
Permission is either "1" for read only, no execute or "2"/"3" for read write, no execute. Type is either 0, 1, or 17 and affects the block type. 0 is default. This will allocate kernel memory starting at kernel_page. To get the same memory as the user pointer, add the kernel_offset. kernel_size is how much is allocated.


<source lang="c">
<source lang="c">
typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60
// this signature is for FW 1.50-1.69
  int size; // Size of this structure
int sceKernelUserMapWithFlagsForDriver(SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
  int unk_4;
  int unk_8;
} SceKernelSubbudgetInfo;


int sceKernelGetSubbudgetInfo(SceBool unk_boolean, SceKernelSubbudgetInfo *pInfo);
// this signature is for FW 3.60 - it now allows to give a name
int sceKernelUserMapWithFlagsForDriver(char *name, SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
</source>
</source>


=== sceKernelGetFreeMemorySize ===
=== sceKernelUserUnmapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x87CC580B
| 0.990-3.60 || 0x00575B00
|}
|}


<source lang="C">
Temp name was sceKernelMemBlockReleaseForDriver.
/**
 
* Get free memory size
<source lang="c">int sceKernelUserUnmapForDriver(SceUID uid);</source>
*/
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);
</source>


=== sceKernelOpenMemBlock ===
=== sceKernelUnlockRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x8EB8DFBB
| 3.60 || 0x75C70DE0
|}
|}


<source lang="c">
Temp name was sceKernelMemRangeReleaseForDriver.
// on FW <= 1.691, flags is not used
 
SceUID sceKernelOpenMemBlock(const char *name, int flags);
<source lang="c">int sceKernelUnlockRangeForDriver(void *addr, SceSize size);</source>
</source>


=== sceKernelFindMemBlockByAddr ===
=== sceKernelUnlockRangeProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xA33B99D1
| 3.60 || 0xA8525B06
|}
|}


<source lang="c">
Temp name was sceKernelMemRangeReleaseForPidForDriver.
/**
 
* Find memory block by virtual range (base address and size)
<source lang="c">int sceKernelUnlockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source>
* If size == 0, API returns a memory block which contains 'start'
* If size > 0, API returns a memory block just fit range [start, start + size].
* @param[in] vaddr base address
* @param[in] size address size
* @retval >=SCE_OK block id
* @retval <SCE_OK error
*/
SceUID sceKernelFindMemBlockByAddr(void *vaddr, SceSize size);
</source>


=== sceKernelFreeMemBlock ===
=== sceKernelUnlockRangeWithModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xA91E15EE
| 3.60 || 0x22CBE925
|}
|}


<source lang="c">
Temp name was sceKernelMemRangeReleaseWithPermForDriver, sceKernelUnlockRangeWithPermForDriver.
/**
 
* Free memory block.
Decreases references to pages.
*
 
* @param[in] uid block uid
<source lang="c">int sceKernelUnlockRangeWithModeForDriver(SceKernelLockMode mode, void *addr, SceSize size);</source>
* @retval SCE_OK Success
* @retval <SCE_OK Error code
*/
int sceKernelFreeMemBlock(SceUID uid);
</source>


=== sceKernelFreeMemBlockForVM ===
=== sceKernelLockRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4EA13FEA
| 3.60 || 0x59A4402F
|}
|}


<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source>
Temp name was sceKernelMemRangeRetainForDriver.
 
<source lang="c">int sceKernelLockRangeForDriver(void *addr, SceSize size);</source>


=== sceKernelCloseMemBlock ===
=== sceKernelLockRangeProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xB680E3A0
| 3.60 || 0x659586BF
|}
|}


<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source>
Temp name was sceKernelMemRangeRetainForPidForDriver.
 
<source lang="c">int sceKernelLockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source>


=== sceKernelGetMemBlockBase ===
=== sceKernelLockRangeWithModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.996-3.60 || 0xB8EF5818
| 3.60 || 0xBC0A1D60
|}
|}


<source lang="C">
Temp name was sceKernelMemRangeRetainWithPermForDriver, sceKernelLockRangeWithPermForDriver.
/**
 
* @brief Get mapped base address of memory block.
Increases references to pages.
*
 
* Get base address of memory block.
<source lang="c">int sceKernelLockRangeWithModeForDriver(SceKernelLockMode mode, const void *addr, SceSize size);</source>
* @param[in] uid block id
* @param[out] ppBase base address of memory block
* @retval SCE_OK success
* @retval <SCE_OK Error
*/
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);
</source>


=== sceKernelAllocMemBlock ===
=== sceKernelReadUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xB9D5EBDE
| 0.990 || 0xE08F3967
|-
| 3.60 || not present
|}
|}


<source lang="c">
<source lang="C">int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);</source>
/**
* Reserve a new memory block.
*
* The memory types that can be specified for type are as follows.
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
*
* Allocate a memory block.
*
* @param[in] name Memory block name
* @param[in] vsize Memory block virtual size
* @param[in] flags Options
* @retval id UID of memory block
* @retval <SCE_OK Error code
*/
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);
</source>


=== sceKernelAllocUnmapMemBlock ===
=== sceKernelCopyToUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEC636BCB
| 0.931-3.60 || 0x6D88EF8A
|}
|}


<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source>
Temp name was sceKernelMemcpyKernelToUserForDriver.
 
Copies <code>size</code> bytes from a kernel buffer to a user buffer. Writes to <code>uaddr</code> are performed using <code>strt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.
 
<source lang="c">SceInt32 sceKernelCopyToUserForDriver(void *uaddr, const void *kaddr, SceSize size);</source>


=== sceKernelOpenVMDomain ===
=== sceKernelCopyToUserProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x9CA3EB2B
| 0.931-3.60 || 0x6B825479
|}
|}


<source lang="c">int sceKernelOpenVMDomain();</source>
Temp name was sceKernelMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserForDriver.
 
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyToUserForDriver|sceKernelCopyToUser]].
 
<source lang="c">SceInt32 sceKernelProcCopyToUserForDriver(ScePID pid, void *uaddr, const void *kaddr, SceSize size);</source>


=== sceKernelSyncVMDomain ===
=== sceKernelCopyToUserProcDomainForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x19D2A81A
| 0.931-1.69 || 0x571D2739
|-
| 3.60 || not present
|}
|}


<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source>
Temp name was sceKernelRoMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserRoForDriver.
 
Same as [[SceSysmem#sceKernelCopyToUserProcForDriver|sceKernelCopyToUserProc]], but sets DACR to 0xFFFFFFFF (ignore access permission bits in page table) before the copy then restores it. Use this function instead of sceKernelCopyToUserProc if you need to write data to read-only pages.
 
<source lang="c">SceInt32 sceKernelCopyToUserProcDomainForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>


=== sceKernelCloseVMDomain ===
=== sceKernelCopyFromUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xD6CA56CA
| 0.931-3.60 || 0xBC996A7A
|}
|}


<source lang="c">int sceKernelCloseVMDomain();</source>
Temp name was sceKernelMemcpyUserToKernelForDriver.


=== sceKernelAllocMemBlockForVM ===
Copies <code>size</code> bytes from a user buffer to a kernel buffer. Reads from <code>uaddr</code> are performed using <code>ldrt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.
 
<source lang="c">SceInt32 sceKernelCopyFromUserForDriver(void *kaddr, const void *uaddr, SceSize size);</source>
 
=== sceKernelCopyFromUserProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xE2D7E137
| 0.931.010-3.60 || 0x605275F8
|}
|}


<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source>
Temp name was sceKernelMemcpyUserToKernelForPidForDriver, sceKernelProcCopyFromUserForDriver.
 
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUser]].
 
<source lang="c">SceInt32 sceKernelCopyFromUserProcForDriver(SceUID pid, void *dst, void *src, SceSize size);</source>


=== sceKernelCheckModelCapability ===
=== sceKernelCopyFromToUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.12 || not present
| 0.990 || not present
|-
|-
| 2.500.071-3.570.011 || 0x0144FBD9
| 1.50-3.60 || 0x1BD44DD5
|}
|}


Only bits 7 and 10 are supported.
Temp name was sceKernelMemcpyUserToUserForDriver, sceKernelUserCopyForDriver.


Returns 0x80020005 if <code>bit</code> is not supported.
<source lang="C">int sceKernelCopyFromToUserForDriver(void *dst, const void *src, SceSize size);</source>


On success, returns SCE_TRUE if the model has capability, else SCE_FALSE.
=== sceKernelCopyFromToUserProcForDriver ===
 
<source lang="c">int sceKernelCheckModelCapability(int bit);</source>
 
=== sceKernelGetModelForCDialog ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xA2CB322F
| 0.990 || not present
|-
| 1.50-3.60 || 0x8E086C33
|}
|}


<source lang="c">int sceKernelGetModelForCDialog();</source>
Temp name was sceKernelMemcpyUserToUserForPidForDriver, sceKernelProcUserCopyForDriver.
 
<source lang="c">int sceKernelCopyFromToUserProcForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>


=== sceKernelGetModel ===
=== sceKernelUserStrnlenForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD0D4F729
| 0.931 || not present (in ForKernel)
|}
 
<source lang="c">int sceKernelGetModel();</source>
 
=== sceKernelIsPSVitaTV ===
{| class="wikitable"
|-
|-
! Version !! NID
| 0.940-0.990 || 0xFF06898A
|-
|-
| 3.60 || 0x1453A5E5
| 1.50-3.60 || not present
|}
|}


<source lang="c">int sceKernelIsPSVitaTV();</source>
Temp name was sceKernelStrnlenFromUserForDriver.


== SceDipsw ==
<source lang="C">SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);</source>


=== sceKernelCheckDipsw ===
=== sceKernelStrnlenUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x1C783FB2
| 0.990 || not present
|-
| 1.50-3.60 || 0xB429D419
|}
|}


=== sceKernelClearDipsw ===
<source lang="c">SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);</source>
 
=== sceKernelProcStrnlenUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x800EDCC1
| 0.990 || not present
|-
| 1.50-3.60 || 0x9929EB07
|}
|}


=== sceKernelSetDipsw ===
<source lang="c">SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);</source>
 
=== sceKernelProcUserStrcpyForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x817053D4
| 0.990-1.50 || 0xEBCB3970
|-
| 3.60 || not present
|}
|}


== SceDipswForDriver ==
<source lang="C">int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);</source>


=== sceKernelCheckDipswForDriver ===
=== sceKernelStrncpyFromUserSpecialForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xA98FC2FD
| 0.990-1.50 || 0x7440BCDA
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelCheckDipswForDriver(int no);</source>
<source lang="C">int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>


=== sceKernelClearDipswForDriver ===
=== sceKernelStrncpyToUserSpecialForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xF1F3E9FE
| 0.990-1.50 || 0x369355F1
|-
| 3.60 || not present
|}
|}


<source lang="C">void sceKernelClearDipswForDriver(int no);</source>
<source lang="C">int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>


=== sceKernelSetDipswForDriver ===
=== sceKernelUserStrncpyForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x82E45FBF
| 0.931 || not present. Present but not exported.
|-
| 0.940-0.990 || 0xE6D5EFE4
|-
| 1.50-3.60 || not present
|}
|}


<source lang="C">void sceKernelSetDipswForDriver(int no);</source>
Returns 0 on success.
 
<source lang="C">int sceKernelUserStrncpyForDriver(char *dst, const char *src, SceSize maxlen);</source>


=== sceKernelGetDipswInfoForDriver ===
=== sceKernelStrncpyFromUserForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.800.071-3.740.011 || 0xB2AD48BE
| 0.990 || not present
|-
| 1.50-3.60 || 0xDB3EC244
|}
|}


This is a guessed name.
Temp name was sceKernelStrncpyUserToKernelForDriver.


All it does is:
<source lang="c">int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);</source>
<source lang="C">return *(int *)(dipsw_addr + 4 * info_id);</source>


info_id possible values:
=== sceKernelProcStrncpyFromUserForDriver ===
* 0: CP timestamp 1
* 1: CP Version, CP Board ID
* 2: CP timestamp 2
* 3: ASLR Seed
 
See [[KBL Param#DIP Switches]].
 
<source lang="C">int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);</source>
 
== SceUartForKernel ==
 
=== sceKernelUartChStartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xA9C74212
| 0.990 || not present
|-
| 1.50-3.60 || 0x75AAF178
|}
|}


Temp name was sceKernelUartInitForKernel, sceUartInitForKernel.
Temp name was sceKernelStrncpyUserForPidForDriver.


It initializes the clock generator registers for the UART <code>channel</code>. See [[UART Registers]]. The default baud rate is 115200 for channels 0-5 and 250000 for channel 6.
<source lang="c">int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source>


<source lang="C">
=== sceKernelStrncpyToUserForDriver ===
// channel: 0-6
int sceKernelUartChStartForKernel(SceUInt32 channel);
</source>
 
=== sceKernelUartReadAvailableForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 5,100: Line 5,144:
| 0.990 || not present
| 0.990 || not present
|-
|-
| 3.60 || 0x38DB7629
| 1.50-3.60 || 0x80BD6FEB
|}
|}


Temp name was sceUartReadAvailableForKernel.
Temp name was sceKernelStrncpyKernelToUserForDriver.


Returns the number of words available to read from the read FIFO.
<source lang="c">int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);</source>


<source lang="c">int sceKernelUartReadAvailableForKernel(int channel);</source>
=== sceKernelProcStrncpyToUserForDriver ===
 
{| class="wikitable"
=== sceKernelUartReadForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x9BBF1255
| 0.990 || not present
|-
| 1.50-3.60 || 0xFED82F2D
|}
|}


Temp name was sceUartReadForKernel.
Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.
 
<source lang="c">int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source>
 
== SceSysmemForDebugger ==


<source lang="c">int sceKernelUartReadForKernel(int channel);</source>
This library was removed on FW 1.80.


=== sceKernelUartWriteForKernel ===
=== sceKernelPhysicalAddressSpaceStartForDebugger ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
| 0.931 || 0x6AE2188F
|-
| 1.691-3.60 || not present
|}
<source lang="C">int sceKernelPhysicalAddressSpaceStartForDebugger(void);</source>
=== sceKernelGetPhysicalAddressSpaceForDebugger ===
{| class="wikitable"
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x41973874
| 0.931 || 0xE8905626
|-
| 1.691-3.60 || not present
|}
|}


Temp name was sceUartWriteForKernel.
In FW 0.931, it calls sceKernelPhysicalAddressSpaceStartForDebugger.


<source lang="c">int sceKernelUartWriteForKernel(int channel, char c);</source>
<source lang="C">void *sceKernelGetPhysicalAddressSpaceForDebugger(void);</source>


=== sceKernelUartPutcharForKernel ===
=== sceKernelIsAccessibleRangeProcForDebugger ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xAF243C6A
| 0.931-1.692 || 0x01DFC193
|-
|-
| 3.60 || not present
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeProcForDriver]].
|}
|}


<source lang="c">int sceKernelUartPutcharForKernel(char c);</source>
?Returns 0 on success (if is accessible range)?


== SceCpu ==
<source lang="C">int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source>


=== sceKernelCpuId ===
=== sceKernelIsAccessibleRangeForDebugger ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931-1.692 || 0xD027761F
|-
|-
| 1.000.071-3.740.011 || 0x2704CFEE
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeForDriver]].
|}
|}


Returns the CPU ID of the current core.
?Returns 0 on success (if is accessible range)?
 
<source lang="C">int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);</source>


<source lang="c">SceUInt sceKernelCpuId(void);</source>
== SceSysmem ==


== SceCpuForKernel ==
The SceSysmem library is responsible for both low-level and high-level memory management. There are functions for allocating raw blocks of memory (similar to Linux <code>sbrk</code>) as well as functions for maintaining a heap-like structure (similar to <code>malloc</code>) for kernel, however [[SceLibKernel]] implements a proper heap and that is used for user code.


=== sceKernelSendEventForKernel ===
=== sceKernelMapMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x45885327
| 0.990-1.69 || 0x7B763A21
|-
|-
| 3.60 || not present
| 3.60 || not present
|}
|}


<source lang="C">void sceKernelSendEventForKernel(void);</source>
=== sceKernelRemapMemBlock ===
 
=== sceKernelWaitForEventForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xD2629465
| 0.990-1.69 || 0x3B29E0F5
|-
|-
| 3.60 || not present
| 3.60 || not present
|}
|}


<source lang="C">void sceKernelWaitForEventForKernel(void);</source>
=== sceKernelPartialMapMemBlock ===
 
=== sceKernelPrintCpuModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xDC99515C
| 0.990 || not present
|-
| 1.69 || 0xC0A59868
|-
|-
| 3.60 || not present
| 3.60 || not present
|}
|}


=== sceKernelTlsKernelSetForKernel ===
=== sceKernelUnmapMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940 || 0x7A180AA4
| 0.990-1.69 || 0xEE30D976
|-
|-
| 3.60 || not present
| 3.60 || not present
|}
|}


<source lang="C">
<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source>
// thread_index must be < 8
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);
</source>


=== sceKernelTlsKernelGetForKernel ===
=== sceKernelPartialUnmapMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940 || 0x28E080BC
| 0.990 || not present
|-
| 1.69 || 0xCA99929B
|-
|-
| 3.60 || not present
| 3.60 || not present
|}
|}


<source lang="C">
=== sceKernelGetMemBlockInfoByRange ===
// thread_index must be < 8
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);
</source>
 
=== sceKernelRoundupDCacheLineForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xED512F50
| 0.990 || not present
|-
|-
| 3.60 || not present
| 0.996-3.60 || 0x006F3DB4
|}
|}


Calls the function previously registered by [[SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel]].
<source lang="c">
/**
* @brief Get memory block informaton by virtual address range


<source lang="C">int sceKernelRoundupDCacheLineForKernel(int a1);</source>
* @param[in] vbase base address
* @param[in] vsize  size
* @param[inout] pInfo information structure
*/
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);
</source>


=== sceKernelSetRoundupDCacheLineFuncForKernel ===
=== sceKernelGetMemBlockInfoByAddr ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x66C3AA93
| 0.990-3.60 || 0x4010AD65
|-
| 3.60 || not present
|}
|}


Uses CTR and CTR-DMINLINE to determine which function to return.
<source lang="c">
/**
* @brief Get memory block information.
*
* Get information about a memory block.
* @param[in] vbase Base address
* @param[inout] pInfo Information structure
*/
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);
</source>


<source lang="C">(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);</source>
=== sceKernelGetSubbudgetInfo ===
 
=== sceKernelReadUser8ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x942B92C3
| 0.990 || not present
|-
|-
| 3.60 || not present
| 1.69-3.60 || 0x832B4A65
|}
|}


<source lang="C">int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
<source lang="c">
#define SCE_KERNEL_SUBBUDGET_ID_MAIN (0)
#define SCE_KERNEL_SUBBUDGET_ID_CDLG (1)


=== sceKernelReadUser16ForKernel ===
typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60
{| class="wikitable"
  int size; // Size of this structure
  SceUInt32 totalSize;
  SceUInt32 freeSize;
} SceKernelSubbudgetInfo;
 
/**
* Get the subbudget info
*
* @param[in]  subbudget - The subbudget ID
* @param[out] pInfo    - The subbudget info
*
* @return 0 on success, < 0 on error.
*/
int sceKernelGetSubbudgetInfo(SceInt subbudget, SceKernelSubbudgetInfo *pInfo);
</source>
 
=== sceKernelGetFreeMemorySize ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || maybe present
| 1.69-3.60 || 0x87CC580B
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
<source lang="C">
/**
* Get free memory size
*/
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);
</source>


=== sceKernelReadUser32ForKernel ===
=== sceKernelOpenMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x6091086F
| 0.990-3.60 || 0x8EB8DFBB
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
<source lang="c">
// on FW <= 1.691, flags is not used
SceUID sceKernelOpenMemBlock(const char *name, int flags);
</source>


=== sceKernelWriteUser8ForKernel ===
=== sceKernelFindMemBlockByAddr ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x13B7B151
| 0.990-3.60 || 0xA33B99D1
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);</source>
<source lang="c">
/**
* Find memory block by virtual range (base address and size)
* If size == 0, API returns a memory block which contains 'start'
* If size > 0, API returns a memory block just fit range [start, start + size].
* @param[in] vaddr base address
* @param[in] size address size
* @retval >=SCE_OK block id
* @retval <SCE_OK error
*/
SceUID sceKernelFindMemBlockByAddr(void *vaddr, SceSize size);
</source>


=== sceKernelWriteUser16ForKernel ===
=== sceKernelFreeMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || maybe present
| 0.990-3.60 || 0xA91E15EE
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);</source>
<source lang="c">
/**
* Free memory block.
*
* @param[in] uid block uid
* @retval SCE_OK Success
* @retval <SCE_OK Error code
*/
int sceKernelFreeMemBlock(SceUID uid);
</source>


=== sceKernelWriteUser32ForKernel ===
=== sceKernelFreeMemBlockForVM ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x101894E0
| 3.60 || 0x4EA13FEA
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);</source>
<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source>


=== sceKernelVMRead8ForKernel ===
=== sceKernelCloseMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xA2F0FE9D
| 0.990-3.60 || 0xB680E3A0
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source>


=== sceKernelVMRead16ForKernel ===
=== sceKernelGetMemBlockBase ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xF31D4D10
| 0.996-3.60 || 0xB8EF5818
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
<source lang="C">
/**
* @brief Get mapped base address of memory block.
*
* Get base address of memory block.
* @param[in] uid block id
* @param[out] ppBase base address of memory block
* @retval SCE_OK success
* @retval <SCE_OK Error
*/
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);
</source>


=== sceKernelVMRead32ForKernel ===
=== sceKernelAllocMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x316574B1
| 0.990-3.60 || 0xB9D5EBDE
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
<source lang="c">
/**
* Reserve a new memory block.
*
* The memory types that can be specified for type are as follows.
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
*
* Allocate a memory block.
*
* @param[in] name Memory block name
* @param[in] vsize Memory block virtual size
* @param[in] flags Options
* @retval id UID of memory block
* @retval <SCE_OK Error code
*/
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);
</source>


=== sceKernelVMWrite8ForKernel ===
=== sceKernelAllocUnmapMemBlock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xA3C65664
| 3.60 || 0xEC636BCB
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);</source>
<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source>


=== sceKernelVMWrite16ForKernel ===
=== sceKernelOpenVMDomain ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xBF38A460
| 1.69-3.60 || 0x9CA3EB2B
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);</source>
<source lang="c">int sceKernelOpenVMDomain();</source>


=== sceKernelVMWrite32ForKernel ===
=== sceKernelSyncVMDomain ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x04D129B2
| 1.69-3.60 || 0x19D2A81A
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);</source>
<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source>


=== sceKernelMMUIsValidMapForKernel ===
=== sceKernelCloseVMDomain ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x4891F923
| 1.69-3.60 || 0xD6CA56CA
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);</source>
<source lang="c">int sceKernelCloseVMDomain();</source>


=== sceKernelMMUIsValidUnmapForKernel ===
=== sceKernelAllocMemBlockForVM ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x60EA8433
| 1.69-3.60 || 0xE2D7E137
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);</source>
<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source>


=== sceKernelMMUL1GetInfoForKernel ===
=== sceKernelCheckModelCapability ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x9D346F87
| 0.931.010-2.12 || not present
|-
|-
| 3.60 || not present
| 2.500.071-3.570.011 || 0x0144FBD9
|}
|}


Parses a L1PT for information about a specific entry. Pass the address of the L1PT in <code>l1pt</code>. Used by [[SceSysmem#sceKernelAddressSpaceGetMMUL1InfoForKernel|sceKernelAddressSpaceGetMMUL1InfoForKernel]].
Only bits 7 and 10 are supported.
 
Returns 0x80020005 if <code>bit</code> is not supported.
 
On success, returns SCE_TRUE if the model has capability, else SCE_FALSE.


<source lang="C">SceInt32 sceKernelMMUL1GetInfoForKernel(void* l1pt, const void *addr, SceKernelMMUL1Info *pInfo);</source>
<source lang="c">int sceKernelCheckModelCapability(int bit);</source>


=== sceKernelMMUL2GetInfoForKernel ===
=== sceKernelGetModelForCDialog ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x247629A7
| 3.60 || 0xA2CB322F
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);</source>
<source lang="c">int sceKernelGetModelForCDialog();</source>


=== sceKernelMMUMapSectionsForKernel ===
=== sceKernelGetModel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x868B471A
| 3.60 || 0xD0D4F729
|-
| 3.60 || not present
|-
| 3.65 || Present, but not exported
|}
|}


<source lang="C">SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>
<source lang="c">int sceKernelGetModel();</source>


=== sceKernelMMUMapSupersectionsForKernel ===
=== sceKernelIsPSVitaTV ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x0D9DA15F
| 3.60 || 0x1453A5E5
|-
| 3.60 || not present
|-
| 3.65 || Present, but not exported
|}
|}


<source lang="C">SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>
<source lang="c">int sceKernelIsPSVitaTV();</source>
 
== SceDipsw ==


=== sceKernelMMUMapSmallPagesForKernel ===
=== sceKernelCheckDipsw ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xB953E022
| 1.69-3.60 || 0x1C783FB2
|-
|}
| 3.60 || not present
 
=== sceKernelClearDipsw ===
{| class="wikitable"
|-
! Version !! NID
|-
|-
| 3.65 || Present, but not exported
| 1.69-3.60 || 0x800EDCC1
|}
|}


<source lang="C">int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>
=== sceKernelSetDipsw ===
 
=== sceKernelMMUMapSmallPageForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xCC7C16F8
| 1.69-3.60 || 0x817053D4
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);</source>
== SceDipswForDriver ==


=== sceKernelMMUMapLargePagesForKernel ===
=== sceKernelCheckDipswForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x78D32D38
| 0.990.000-3.740.011 || 0xA98FC2FD
|-
| 3.60 || not present
|-
| 3.65 || Present, but not exported
|}
|}


<source lang="C">int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>
<source lang="C">int sceKernelCheckDipswForDriver(int no);</source>


=== sceKernelMMUUnmapSectionsWithFlagsForKernel ===
=== sceKernelClearDipswForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xFC657FD1
| 0.990.000-3.740.011 || 0xF1F3E9FE
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>
<source lang="C">void sceKernelClearDipswForDriver(int no);</source>


=== sceKernelMMUUnmapSupersectionsWithFlagsForKernel ===
=== sceKernelSetDipswForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x0E4D29C6
| 0.990.000-3.740.011 || 0x82E45FBF
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>
<source lang="C">void sceKernelSetDipswForDriver(int no);</source>


=== sceKernelMMUUnmapSmallPagesWithFlagsForKernel ===
=== sceKernelGetDipswInfoForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x11EBA8CE
| 1.800.071-3.740.011 || 0xB2AD48BE
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>
This is a guessed name.
 
All it does is:
<source lang="C">return *(int *)(dipsw_addr + 4 * info_id);</source>
 
info_id possible values:
* 0: CP timestamp 1
* 1: CP Version, CP Board ID
* 2: CP timestamp 2
* 3: ASLR Seed
 
See [[KBL Param#DIP Switches]].
 
<source lang="C">int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);</source>
 
== SceUartForKernel ==


=== sceKernelMMUUnmapLargePagesWithFlagsForKernel ===
=== sceKernelUartChStartForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x44319918
| 0.931-3.60 || 0xA9C74212
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>
Temp name was sceKernelUartInitForKernel, sceUartInitForKernel.


=== sceKernelMMUL1VAtoPABySWForKernel ===
It initializes the clock generator registers for the UART <code>channel</code>. See [[UART Registers]]. The default baud rate is 115200 for channels 0-5 and 250000 for channel 6.
 
<source lang="C">
// channel: 0-6
int sceKernelUartChStartForKernel(SceUInt32 channel);
</source>
 
=== sceKernelUartReadAvailableForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x8E4ECF17
| 0.990 || not present
|-
|-
| 3.60 || not present
| 3.60 || 0x38DB7629
|}
|}


<source lang="C">int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);</source>
Temp name was sceUartReadAvailableForKernel.
 
Returns the number of words available to read from the read FIFO.
 
<source lang="c">int sceKernelUartReadAvailableForKernel(int channel);</source>


=== sceKernelMMUSetL2PageTableForKernel ===
=== sceKernelUartReadForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xAECA0820
| 0.931-3.60 || 0x9BBF1255
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);</source>
Temp name was sceUartReadForKernel.
 
<source lang="c">int sceKernelUartReadForKernel(int channel);</source>


=== sceKernelMMUUnsetL2PageTableForKernel ===
=== sceKernelUartWriteForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xCB519DF3
| 0.931-3.60 || 0x41973874
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);</source>
Temp name was sceUartWriteForKernel.
 
<source lang="c">int sceKernelUartWriteForKernel(int channel, char c);</source>


=== SceCpuForKernel_CA4124DE ===
=== sceKernelUartPutcharForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xCA4124DE
| 0.931-0.990 || 0xAF243C6A
|-
|-
| 3.60 || not present
| 3.60 || not present
|}
|}


Returns 1, 2 or 6 based on some page/section properties.
<source lang="c">int sceKernelUartPutcharForKernel(char c);</source>


<source lang="C">int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);</source>
== SceCpu ==


=== sceKernelMMUGetContextForKernel ===
=== sceKernelCpuId ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x211B89DA
| 1.000.071-3.740.011 || 0x2704CFEE
|-
| 1.03-3.60 || not present
|}
|}


Temp name was sceKernelCpuSaveContextForKernel.
Returns the CPU ID of the current core.
 
<source lang="c">SceUInt sceKernelCpuId(void);</source>


<source lang="C">int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);</source>
== SceCpuForKernel ==


=== sceKernelMMUChangeContextForKernel ===
=== sceKernelSendEventForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x0A4F0FB9
| 0.990 || 0x45885327
|-
|-
| 1.03-3.60 || not present
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuRestoreContextForKernel.
<source lang="C">void sceKernelSendEventForKernel(void);</source>


<source lang="C">int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);</source>
=== sceKernelWaitForEventForKernel ===
 
=== sceKernelMMUVAtoPAWithModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x67343A07
| 0.931 || 0xD2629465
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuGetPaddrWithMaskForKernel.
<source lang="C">void sceKernelWaitForEventForKernel(void);</source>


mode (maskPAR) is usually 0x33, sometimes 2.
=== sceKernelPrintCpuModeForKernel ===
 
<source lang="c">int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);</source>
 
=== sceKernelMMUCheckRangeWithModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xCCDA3B8C
| 0.931 || 0xDC99515C
|-
|-
| 3.60 || not present
| 3.60 || not present
|}
|}


Return 0 if all pages are valid, < 0 else.
=== sceKernelTlsKernelSetForKernel ===
 
<source lang="C">int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);</source>
 
=== sceKernelMMUVAtoPAForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x2A46E800
| 0.940 || 0x7A180AA4
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuGetPaddrForKernel.
<source lang="C">
// thread_index must be < 8
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);
</source>


Uses mode (maskPAR) 0x33.
=== sceKernelTlsKernelGetForKernel ===
 
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.
 
Returns <0 on error, values >=0 indicate success.
 
<source lang="c">int sceKernelMMUVAtoPAForKernel(void *pVA, void **pPA);</source>
 
=== sceKernelCpuGetCONTEXTIDRForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x5B6B3274
| 0.940 || 0x28E080BC
|-
| 3.60 || not present
|}
|}
The CONTEXTIDR, bits [31:0] contain the process ID number.


<source lang="C">
<source lang="C">
  return (unsigned __int8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)
// thread_index must be < 8
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);
</source>
</source>


<source lang="C">void sceKernelCpuGetCONTEXTIDRForKernel(void);</source>
=== sceKernelRoundupDCacheLineForKernel ===
 
=== sceKernelCpuUpdateSCTLRForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x04008CF7
| 0.931-0.990 || 0xED512F50
|-
| 3.60 || not present
|}
|}


<source lang="C">
Calls the function previously registered by [[SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel]].
  int result;
  result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)
  __mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)
  return result;
</source>


<source lang="C">void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)</source>
<source lang="C">int sceKernelRoundupDCacheLineForKernel(int a1);</source>


=== sceKernelCpuBranchPredictorInvalidateAllISForKernel ===
=== sceKernelSetRoundupDCacheLineFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x1BB2BB8D
| 0.931-0.990 || 0x66C3AA93
|-
| 3.60 || not present
|}
|}
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)</source>


=== sceKernelCpuBranchPredictorInvalidateAllForKernel ===
Uses CTR and CTR-DMINLINE to determine which function to return.
 
<source lang="C">(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);</source>
 
=== sceKernelReadUser8ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4C4C7D6B
| 0.990 || 0x942B92C3
|-
| 3.60 || not present
|}
|}
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all</source>


=== sceKernelDcacheCleanInvalidateAll ===
<source lang="C">int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
 
=== sceKernelReadUser16ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x85A27F98
| 0.990 || maybe present
|-
| 3.60 || not present
|}
|}


Flushes PLE then cleans and invalidates L1 Dcache and L2 cache in this order.
<source lang="C">int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);</source>


<source lang="c">void sceKernelDcacheCleanInvalidateAll(void);</source>
=== sceKernelReadUser32ForKernel ===
 
=== sceKernelL1DcacheInvalidateForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x470EAE1E
| 0.990 || 0x6091086F
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuDcacheInvalidateMVACForKernel.
<source lang="C">int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);</source>


<source lang="C">void sceKernelL1DcacheInvalidateForKernel(void* addr); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>
=== sceKernelWriteUser8ForKernel ===
 
=== sceKernelL1DcacheInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x583F30D1
| 0.990 || 0x13B7B151
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateMVACRangeForKernel.
<source lang="C">int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);</source>


<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>
=== sceKernelWriteUser16ForKernel ===
 
=== sceKernelL1DcacheCleanInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x6BA2E51C
| 0.990 || maybe present
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel, sceKernelDcacheWritebackInvalidateRangeForKernel.
<source lang="C">int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);</source>


<source lang="C">
=== sceKernelWriteUser32ForKernel ===
// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)
void sceKernelL1DcacheCleanInvalidateRangeForKernel(const void *addr, unsigned int size);
</source>
 
=== sceKernelL1DcacheInvalidateAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2F3BF020
| 0.990 || 0x101894E0
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateSWForKernel.
<source lang="C">int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);</source>


<source lang="C">void sceKernelL1DcacheInvalidateAllForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)</source>
=== sceKernelVMRead8ForKernel ===
 
=== sceKernelL1DcacheCleanAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x73A30DB2
| 0.990 || 0xA2F0FE9D
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelCpuDcacheCleanSWForKernel.
<source lang="C">int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);</source>


<source lang="C">void sceKernelL1DcacheCleanAllForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)</source>
=== sceKernelVMRead16ForKernel ===
 
=== sceKernelL1DcacheCleanInvalidateAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x76DAB4D0
| 0.990 || 0xF31D4D10
|-
| 3.60 || not present
|}
|}


Guessed name was sceKernelCpuDcacheCleanInvalidateSWForKernel.
<source lang="C">int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);</source>


<source lang="C">void sceKernelL1DcacheCleanInvalidateAllForKernel(void);</source>
=== sceKernelVMRead32ForKernel ===
 
=== sceKernelL1DcacheCleanForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF7159B55
| 0.931-0.990 || 0x316574B1
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuDcacheCleanMVACForKernel.
<source lang="C">int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);</source>


<source lang="C">void sceKernelL1DcacheCleanForKernel(void* addr); // DCCMVAC, Data cache clean by MVA (PoC)</source>
=== sceKernelVMWrite8ForKernel ===
 
=== sceKernelL1DcacheCleanRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xC5C1EE4E
| 0.931 || 0xA3C65664
|-
| 3.60 || not present
|}
|}


Guessed name was sceKernelCpuDcacheCleanMVACRangeForKernel.
<source lang="C">int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);</source>


<source lang="C">void sceKernelL1DcacheCleanRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)</source>
=== sceKernelVMWrite16ForKernel ===
 
=== sceKernelL1DcacheInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC8E8C9E9
| 0.931 || 0xBF38A460
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACForKernel.
<source lang="C">int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);</source>


<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(void* addr); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)</source>
=== sceKernelVMWrite32ForKernel ===
 
=== sceKernelL1IcacheInvalidateEntireAllCoreForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x264DA250
| 0.931 || 0x04D129B2
|-
|-
| 3.65 || 0x803C84BF
| 3.60 || not present
|}
|}


Guessed name was sceKernelCpuIcacheInvalidateAllUISForKernel.
<source lang="C">int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);</source>


Invalidates the L1 Icache for all cores.
=== sceKernelMMUIsValidMapForKernel ===
 
<source lang="C">void sceKernelL1IcacheInvalidateEntireAllCoreForKernel(void);</source>
 
=== sceKernelL1IcacheInvalidateEntireForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xAEE0B489
| 0.931 || 0x4891F923
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelCpuIcacheInvalidateAllUForKernel.
<source lang="C">int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);</source>


Invalidates the entire L1 Icache of this core.
=== sceKernelMMUIsValidUnmapForKernel ===
 
<source lang="C">void sceKernelL1IcacheInvalidateEntireForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)</source>
 
=== sceKernelL1IcacheInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xF4C7F578
| 0.931 || 0x60EA8433
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuIcacheInvalidateRangeForKernel, sceKernelCpuIcacheInvalidateMVAURange.
<source lang="C">int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);</source>


Invalidates a range in L1 Icache of this core.
=== sceKernelMMUL1GetInfoForKernel ===
 
<source lang="C">
// ICIMVAU, Instruction cache invalidate by MVA (PoU)
void sceKernelL1IcacheInvalidateRangeForKernel(void *start, SceSize size);
</source>
 
=== sceKernelIcacheInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x19F17BD0
| 0.931-0.990 || 0x9D346F87
|-
|-
| 3.65-3.68 || 0x73E895EA
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.
Parses a L1PT for information about a specific entry. Pass the address of the L1PT in <code>l1pt</code>. Used by [[SceSysmem#sceKernelAddressSpaceGetMMUL1InfoForKernel|sceKernelAddressSpaceGetMMUL1InfoForKernel]].


Cleans and invalidates range in L2 cache, then in L1 Icache of core.
<source lang="C">SceInt32 sceKernelMMUL1GetInfoForKernel(void* l1pt, const void *addr, SceKernelMMUL1Info *pInfo);</source>


<source lang="c">int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);</source>
=== sceKernelMMUL2GetInfoForKernel ===
 
=== sceKernelPleFlushRequestForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD0D85FF8
| 0.931-0.990 || 0x247629A7
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelCpuPreloadEngineKillForKernel.
<source lang="C">int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);</source>


*NSACR (Non-Secure Access Control Register)
=== sceKernelMMUMapSectionsForKernel ===
*Test bit NS access to the Preload Engine resources
{| class="wikitable"
*[>] PLEFF (Preload Engine FIFO flush operation)
|-
*[>] PLEKC (Preload Engine kill channel operation)
! Version !! NID
*[<] PLEASR (Preload Engine Activity Status Register)
|-
| 0.931-0.990 || 0x868B471A
|-
| 3.60 || not present
|-
| 3.65 || Present, but not exported
|}


<source lang="c">void sceKernelPleFlushRequestForKernel(void);</source>
<source lang="C">SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>


=== sceKernelDomainTextMemcpyForKernel ===
=== sceKernelMMUMapSupersectionsForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x8C683DEC
| 0.931-0.990 || 0x0D9DA15F
|-
| 3.60 || not present
|-
|-
| 3.63-3.65 || not present. Removed from library.
| 3.65 || Present, but not exported
|}
|}


Temp name was sceKernelCpuUnrestrictedMemcpyForKernel.
<source lang="C">SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>


Unrestricted memcpy by first setting the <code>DACR</code> register to <code>0xFFFF0000</code> then doing a memcpy.
=== sceKernelMMUMapSmallPagesForKernel ===
 
In FW 0.931, <code>DACR</code> is set to <code>0xFFFFFFFF</code> instead and interrupts are disabled for the operation.
 
<source lang="c">int sceKernelDomainTextMemcpyForKernel(void *dest, const void *src, SceSize len);</source>
 
=== sceKernelCpuForKernel_9B8173F4 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x9B8173F4
| 0.931-0.990 || 0xB953E022
|-
| 3.60 || not present
|-
| 3.65 || Present, but not exported
|}
|}


Might be get_vaddr_memory_type.
<source lang="C">int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>


Return value can be:
=== sceKernelMMUMapSmallPageForKernel ===
* 2
* 8
* 0x40
* 0x80
* 0xD0
* 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)
 
<source lang="c">int sceKernelCpuForKernel_9B8173F4(void *vaddr);</source>
 
=== sceKernelCorelockUnlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xA5C9DBBA
| 0.931-0.990 || 0xCC7C16F8
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.
<source lang="C">int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);</source>


<source lang="c">
=== sceKernelMMUMapLargePagesForKernel ===
typedef struct SceKernelCorelockContext {
int lock;
int16_t core_count;
int16_t last_wait_core;
} SceKernelCorelockContext;
 
void sceKernelCorelockUnlockForKernel(SceKernelCorelockContext *pCtx);
</source>
 
=== sceKernelCorelockLockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x9D72DD1B
| 0.931-0.990 || 0x78D32D38
|-
| 3.60 || not present
|-
| 3.65 || Present, but not exported
|}
|}


This is a guessed name.
<source lang="C">int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>


<source lang="c">void sceKernelCorelockLockForKernel(SceKernelCorelockContext *pCtx, int core);</source>
=== sceKernelMMUUnmapSectionsWithFlagsForKernel ===
 
=== sceKernelCorelockInitializeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x4CD4D921
| 0.931-0.990 || 0xFC657FD1
|-
|-
| 3.65 || 0xA65F6F14
| 3.60 || not present
|}
|}


This is a guessed name.
<source lang="C">int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>


<source lang="C">void sceKernelCorelockInitializeForKernel(SceKernelCorelockContext *pCtx);</source>
=== sceKernelMMUUnmapSupersectionsWithFlagsForKernel ===
 
=== SceCpuForKernel_43CC6E20 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x43CC6E20
| 0.931-0.990 || 0x0E4D29C6
|-
| 3.60 || not present
|}
|}


DACR off
<source lang="C">int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>


Does some memory copies between the args.
=== sceKernelMMUUnmapSmallPagesWithFlagsForKernel ===
 
<source lang="c">int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);</source>
 
=== sceCpuUnrestrictedBzeroIntForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x76EB0DD4
| 0.931-0.990 || 0x11EBA8CE
|-
| 3.60 || not present
|}
|}


DACR off
<source lang="C">int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>


<source lang="c">int sceCpuUnrestrictedBzeroIntForKernel(int *addr);</source>
=== sceKernelMMUUnmapLargePagesWithFlagsForKernel ===
 
=== SceCpuForKernel_337473B5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x337473B5
| 0.931-0.990 || 0x44319918
|-
| 3.60 || not present
|}
|}


DACR off
<source lang="C">int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>


If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.
=== sceKernelMMUL1VAtoPABySWForKernel ===
 
<source lang="c">int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);</source>
 
=== sceKernelCpuAtomicSubIfGreater64ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x37FBFD12
| 0.990 || 0x8E4ECF17
|-
| 3.60 || not present
|}
|}


DACR is not disabled
<source lang="C">int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);</source>


<source lang="c">int sceKernelCpuAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);</source>
=== sceKernelMMUSetL2PageTableForKernel ===
 
=== sceKernelCpuAtomicLimit64ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x6190A018
| 0.990 || 0xAECA0820
|-
| 3.60 || not present
|}
|}


DACR is not disabled
<source lang="C">int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);</source>


<source lang="c">int sceKernelCpuAtomicLimit64ForKernel(unsigned long long *result, int limit);</source>
=== sceKernelMMUUnsetL2PageTableForKernel ===
 
=== sceKernelCpuAtomicAdd32AndGet64InRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD8A7216C
| 0.990 || 0xCB519DF3
|-
| 3.60 || not present
|}
|}


DACR is not disabled
<source lang="C">int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);</source>


<source lang="C">int sceKernelCpuAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);</source>
=== SceCpuForKernel_CA4124DE ===
 
=== sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD37AABE5
| 0.990 || 0xCA4124DE
|-
| 3.60 || not present
|}
|}


DACR is not disabled
Returns 1, 2 or 6 based on some page/section properties.


<source lang="c">int sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);</source>
<source lang="C">int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);</source>


=== sceKernelCpuAtomicGet32AndSet64ForKernel ===
=== sceKernelMMUGetContextForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.931 || 0x211B89DA
|-
|-
| 3.60 || 0x4553FBDE
| 1.03-3.60 || not present
|}
|}


DACR is not disabled
Temp name was sceKernelCpuSaveContextForKernel.


<source lang="c">int sceKernelCpuAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);</source>
<source lang="C">int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);</source>


=== sceKernelCpuAtomicGet32AndSet64_2ForKernel ===
=== sceKernelMMUChangeContextForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 0.931 || 0x0A4F0FB9
|-
|-
| 3.60 || 0x7FB4E7AC
| 1.03-3.60 || not present
|}
|}


Exact same code as SceCpuForKernel_4553FBDE.
Temp name was sceKernelCpuRestoreContextForKernel.


DACR is not disabled
<source lang="C">int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);</source>


<source lang="c">int sceKernelCpuAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);</source>
=== sceKernelMMUVAtoPAWithModeForKernel ===
 
=== sceKernelCpuAtomicDecIfLowPositive32ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x8510FA52
| 0.931-3.60 || 0x67343A07
|}
|}


DACR is not disabled
Temp name was sceKernelCpuGetPaddrWithMaskForKernel.
 
mode (maskPAR) is usually 0x33, sometimes 2.


<source lang="c">int sceKernelCpuAtomicDecIfLowPositive32ForKernel(unsigned int *addr);</source>
<source lang="c">int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);</source>


=== sceKernelCpuAtomicIncrementHighwaterCounterForKernel ===
=== sceKernelMMUCheckRangeWithModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.931 || 0xCCDA3B8C
|-
|-
| 2.100.081-3.610.011 || 0x5F64E5ED
| 3.60 || not present
|-
| 3.630.011-3.740.011 || 0x9DA58A9E
|}
|}


This is a guessed name. Temp name was sceKernelCpuAtomicHiLoAlgorithmForKernel.
Return 0 if all pages are valid, < 0 else.


Atomically increments a highwater counter.
<source lang="C">int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);</source>


Highwater counters are 32-bit values holding a <code>current</code> count in the low 16 bits, and a <code>highwater</code> count in the high 16 bits.
=== sceKernelMMUVAtoPAForKernel ===
 
This routine increments the <code>current</code> count, and the <code>highwater</code> count if the new <code>current</code> value is higher than <code>highwater</code>.
 
DACR is not disabled.
 
Returns the value of the counter after the increment.
 
<source lang="C">SceUInt32 sceKernelCpuAtomicIncrementHighwaterCounterForKernel(SceUInt32 *pCounter);</source>
 
=== sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.100.081-3.610.011 || 0x98E91C1C
| 0.931-3.60 || 0x2A46E800
|-
| 3.630.011-3.740.011 || 0x8F40D0FD
|}
|}


This is a guessed name. Official name might be sceKernelAddressSpaceReferForKernel.
Temp name was sceKernelCpuGetPaddrForKernel.


DACR is not disabled
Uses mode (maskPAR) 0x33.
 
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.


If val is negative, returns 2 and does not override val.
Returns <0 on error, values >=0 indicate success.


<source lang="C">int sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel(int* val, int add_val, int limit);</source>
<source lang="c">int sceKernelMMUVAtoPAForKernel(void *pVA, void **pPA);</source>


=== SceCpuForKernel_6C7E7B57 ===
=== sceKernelCpuGetCONTEXTIDRForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x6C7E7B57
| 3.60 || 0x5B6B3274
|}
|}


Set TTBR lower value (0x4A).
<source lang="C">
  return (SceUInt8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)
</source>


<source lang="c">int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);</source>
<source lang="C">SceUInt8 sceKernelCpuGetCONTEXTIDRForKernel(void);</source>


=== SceCpuForKernel_AED8F8D7 ===
=== sceKernelCpuUpdateSCTLRForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xAED8F8D7
| 3.60 || 0x04008CF7
|-
| 3.60 || not present
|}
|}


Initialize TTBR.
<source lang="C">
  int result;
  result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)
  __mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)
  return result;
</source>


<source lang="C">int SceCpuForKernel_AED8F8D7(const void *ttbr);</source>
<source lang="C">void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)</source>


=== sceKernelGetVmaccessRangeForKernel ===
=== sceKernelCpuBranchPredictorInvalidateAllISForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.610.011 || 0x9A3281C0
| 3.60 || 0x1BB2BB8D
|}
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)</source>
 
=== sceKernelCpuBranchPredictorInvalidateAllForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
|-
| 3.630.011-3.740.011 || 0xC32687D0
| 3.60 || 0x4C4C7D6B
|}
|}
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all</source>


Returns the start and end address of the Virtual Memory access range. Functions such as [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUserForDriver]] (i.e. kernel<->usermode transfer routines) are located in this range. All functions in the Virtual Memory access range run in ARM mode not in Thumb mode.
=== sceKernelDcacheCleanInvalidateAllForKernel ===
 
See [[SceExcpmgr|the SceExcpmgr page]] for more information about how the values returned by this function are used.
 
Note that the Virtual Memory access range excludes the endpoint. <code>*pRangeEnd</code> is not considered part of the range however <code>*pRangeStart</code> is.
 
<source lang="C">
// 0.931.010
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);
 
// 0.940-0.990
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pOldModelRangeStart, SceUIntPtr *pOldModelRangeEnd, SceUIntPtr *pNewModelRangeStart, SceUIntPtr *pNewModelRangeEnd)
 
// 3.600.011-3.740.011
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);
</source>
 
=== SceCpuForKernel_9CB82EB0 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x9CB82EB0
| 0.931.010 || 0x85A27F98
|}
|}


<source lang="C">
Flushes PLE then cleans and invalidates L1 Dcache and L2 cache in this order.
return;
</source>


<source lang="c">int SceCpuForKernel_9CB82EB0(void);</source>
<source lang="C">void sceKernelDcacheCleanInvalidateAllForKernel(void);</source>


== SceCpuForDriver ==
=== sceKernelL1DcacheInvalidateForKernel ===
 
=== SceCpuForDriver_9A9D9C94 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-0.996.090 || 0x9A9D9C94
| 3.60 || 0x470EAE1E
|-
|}
| 1.03-3.740.011 || not present
 
|}
Temp name was sceKernelCpuDcacheInvalidateMVACForKernel.
 
<source lang="C">void sceKernelL1DcacheInvalidateForKernel(void* addr); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>


=== SceCpuForDriver_A2E3E4EB ===
=== sceKernelL1DcacheInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-0.996.090 || 0xA2E3E4EB
| 3.60 || 0x583F30D1
|-
| 1.03-3.740.011 || not present
|}
|}


=== sceKernelRoundupDCacheLine3ForDriver ===
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateMVACRangeForKernel.
 
<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>
 
=== sceKernelL1DcacheCleanInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.060.031 || 0xF0849812
| 0.931-3.60 || 0x6BA2E51C
|-
| 1.50-3.740.011 || not present
|}
|}


<source lang="C">int sceKernelRoundupDCacheLine3ForDriver(int a1);</source>
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel, sceKernelDcacheWritebackInvalidateRangeForKernel.
 
<source lang="C">
// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)
void sceKernelL1DcacheCleanInvalidateRangeForKernel(const void *addr, unsigned int size);
</source>


=== sceKernelAbortForDriver ===
=== sceKernelL1DcacheInvalidateAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.060.031 || 0x6DCA6903
| 3.60 || 0x2F3BF020
|-
| 1.50-3.740.011 || not present
|}
|}


<source lang="C">void sceKernelAbortForDriver(void);</source>
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateSWForKernel.
 
<source lang="C">void sceKernelL1DcacheInvalidateAllForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)</source>


=== sceKernelCpuIdForDriver ===
=== sceKernelL1DcacheCleanAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x5E4D5DE1
| 3.60 || 0x73A30DB2
|}
|}


Returns the CPU ID of the current core.
This is a guessed name. Temp name was sceKernelCpuDcacheCleanSWForKernel.


<source lang="c">int sceKernelCpuIdForDriver(void);</source>
<source lang="C">void sceKernelL1DcacheCleanAllForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)</source>


=== sceKernelCpuAtomicAddAndGet8ForDriver ===
=== sceKernelL1DcacheCleanInvalidateAllForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x1E850481
| 0.931-3.60 || 0x76DAB4D0
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);</source>
Guessed name was sceKernelCpuDcacheCleanInvalidateSWForKernel.


=== sceKernelCpuAtomicAddAndGet16ForDriver ===
<source lang="C">void sceKernelL1DcacheCleanInvalidateAllForKernel(void);</source>
 
=== sceKernelL1DcacheCleanForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x59F74E94
| 3.60 || 0xF7159B55
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
Temp name was sceKernelCpuDcacheCleanMVACForKernel.


=== sceKernelCpuAtomicAddAndGet32ForDriver ===
<source lang="C">void sceKernelL1DcacheCleanForKernel(void* addr); // DCCMVAC, Data cache clean by MVA (PoC)</source>
 
=== sceKernelL1DcacheCleanRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x5F6A8743
| 0.931-3.60 || 0xC5C1EE4E
|}
|}


Adds <code>val</code> to <code>*addr</code> atomically, and returns the result.
Guessed name was sceKernelCpuDcacheCleanMVACRangeForKernel.


<source lang="c">unsigned int sceKernelCpuAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="C">void sceKernelL1DcacheCleanRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)</source>


=== sceKernelCpuAtomicAddAndGet64ForDriver ===
=== sceKernelL1DcacheCleanInvalidateForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4E459A03
| 3.60 || 0xC8E8C9E9
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACForKernel.


<hr>
<source lang="C">void sceKernelL1DcacheCleanInvalidateForKernel(void *start); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)</source>


=== sceKernelCpuAtomicAddUnless8ForDriver ===
=== sceKernelL1IcacheInvalidateEntireAllCoreForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x5CC62CEC
| 0.931-3.60 || 0x264DA250
|-
| 3.65 || 0x803C84BF
|}
|}


<source lang="c">int sceKernelCpuAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);</source>
Guessed name was sceKernelCpuIcacheInvalidateAllUISForKernel.
 
Invalidates the L1 Icache for all cores.
 
<source lang="C">void sceKernelL1IcacheInvalidateEntireAllCoreForKernel(void);</source>


=== sceKernelCpuAtomicAddUnless16ForDriver ===
=== sceKernelL1IcacheInvalidateEntireForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0F84AFE9
| 3.60 || 0xAEE0B489
|}
|}


<source lang="c">int sceKernelCpuAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);</source>
This is a guessed name. Temp name was sceKernelCpuIcacheInvalidateAllUForKernel.


=== sceKernelCpuAtomicAddUnless32ForDriver ===
Invalidates the entire L1 Icache of this core.
 
<source lang="C">void sceKernelL1IcacheInvalidateEntireForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)</source>
 
=== sceKernelL1IcacheInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x1F157DC3
| 0.931-3.60 || 0xF4C7F578
|}
|}


<source lang="c">int sceKernelCpuAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);</source>
Temp name was sceKernelCpuIcacheInvalidateRangeForKernel, sceKernelCpuIcacheInvalidateMVAURange.


=== sceKernelCpuAtomicAddUnless64ForDriver ===
Invalidates a range in L1 Icache of this core.
 
<source lang="C">
// ICIMVAU, Instruction cache invalidate by MVA (PoU)
void sceKernelL1IcacheInvalidateRangeForKernel(void *start, SceSize size);
</source>
 
=== sceKernelIcacheInvalidateRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x06CCFA4B
| 0.931-3.60 || 0x19F17BD0
|-
| 3.65-3.68 || 0x73E895EA
|}
|}


<source lang="c">int sceKernelCpuAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);</source>
Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.


<hr>
Cleans and invalidates range in L2 cache, then in L1 Icache of core.
 
<source lang="c">int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);</source>


=== sceKernelCpuAtomicAndAndGet8ForDriver ===
=== sceKernelPleFlushRequestForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x32B62B1A
| 3.60 || 0xD0D85FF8
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
Temp name was sceKernelCpuPreloadEngineKillForKernel.
 
*NSACR (Non-Secure Access Control Register)
*Test bit NS access to the Preload Engine resources
*[>] PLEFF (Preload Engine FIFO flush operation)
*[>] PLEKC (Preload Engine kill channel operation)
*[<] PLEASR (Preload Engine Activity Status Register)
 
<source lang="c">void sceKernelPleFlushRequestForKernel(void);</source>


=== sceKernelCpuAtomicAndAndGet16ForDriver ===
=== sceKernelDomainTextMemcpyForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB281D52A
| 0.931-3.60 || 0x8C683DEC
|-
| 3.63-3.65 || not present. Removed from library.
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
Temp name was sceKernelCpuUnrestrictedMemcpyForKernel.
 
Unrestricted memcpy by first setting the <code>DACR</code> register to <code>0xFFFF0000</code> then doing a memcpy.


=== sceKernelCpuAtomicAndAndGet32ForDriver ===
In FW 0.931, <code>DACR</code> is set to <code>0xFFFFFFFF</code> instead and interrupts are disabled for the operation.
 
<source lang="c">int sceKernelDomainTextMemcpyForKernel(void *dest, const void *src, SceSize len);</source>
 
=== sceKernelMMUGetMemoryTypeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xDF899E4B
| 3.60 || 0x9B8173F4
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
Return value can be:
* 2
* 8
* 0x40
* 0x80
* 0xD0
* 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)
 
<source lang="c">int sceKernelMMUGetMemoryTypeForKernel(void *vaddr);</source>


=== sceKernelCpuAtomicAndAndGet64ForDriver ===
=== sceKernelCorelockUnlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD18E7B54
| 3.60 || 0xA5C9DBBA
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.


<hr>
<source lang="c">
typedef struct SceKernelCorelockContext {
int lock;
int16_t core_count;
int16_t last_wait_core;
} SceKernelCorelockContext;


=== sceKernelCpuAtomicClearAndGet8ForDriver ===
void sceKernelCorelockUnlockForKernel(SceKernelCorelockContext *pCtx);
</source>
 
=== sceKernelCorelockLockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x8E538AB5
| 0.931-3.60 || 0x9D72DD1B
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
This is a guessed name.


=== sceKernelCpuAtomicClearAndGet16ForDriver ===
<source lang="c">void sceKernelCorelockLockForKernel(SceKernelCorelockContext *pCtx, int core);</source>
 
=== sceKernelCorelockInitializeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x6B050D7C
| 0.931-3.60 || 0x4CD4D921
|-
| 3.65 || 0xA65F6F14
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
This is a guessed name.


=== sceKernelCpuAtomicClearAndGet32ForDriver ===
<source lang="C">void sceKernelCorelockInitializeForKernel(SceKernelCorelockContext *pCtx);</source>
 
=== SceCpuForKernel_43CC6E20 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x78C1F148
| 3.60 || 0x43CC6E20
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
DACR off
 
Does some memory copies between the args.


=== sceKernelCpuAtomicClearAndGet64ForDriver ===
<source lang="c">int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);</source>
 
=== sceKernelDomainTextBzeroIntForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2149CD4C
| 3.60 || 0x76EB0DD4
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
This is a guessed name.
 
Temp name was sceCpuUnrestrictedBzeroIntForKernel.
 
DACR off


<hr>
<source lang="c">int sceKernelDomainTextBzeroIntForKernel(int *addr);</source>


=== sceKernelCpuAtomicClearMask8ForDriver ===
=== SceCpuForKernel_337473B5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x1B3336B0
| 0.931-3.60 || 0x337473B5
|}
|}


<source lang="c">void sceKernelCpuAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);</source>
DACR off
 
If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.


=== sceKernelCpuAtomicClearMask16ForDriver ===
<source lang="C">int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);</source>
 
=== sceKernelAtomicSubIfGreater64ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x1BE58599
| 3.60 || 0x37FBFD12
|}
|}


<source lang="c">void sceKernelCpuAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);</source>
DACR is not disabled


=== sceKernelCpuAtomicClearMask32ForDriver ===
<source lang="C">int sceKernelAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);</source>
 
=== sceKernelAtomicLimit64ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4AE1BCC0
| 3.60 || 0x6190A018
|}
|}


<source lang="c">void sceKernelCpuAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);</source>
DACR is not disabled


=== sceKernelCpuAtomicClearMask64ForDriver ===
<source lang="C">int sceKernelAtomicLimit64ForKernel(unsigned long long *result, int limit);</source>
 
=== sceKernelAtomicAdd32AndGet64InRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x55760309
| 3.60 || 0xD8A7216C
|}
|}


<source lang="c">void sceKernelCpuAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
DACR is not disabled


<hr>
<source lang="C">int sceKernelAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);</source>


=== sceKernelCpuAtomicCompareAndSet8ForDriver ===
=== sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3627F4E0
| 3.60 || 0xD37AABE5
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);</source>
DACR is not disabled


=== sceKernelCpuAtomicCompareAndSet16ForDriver ===
<source lang="C">int sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);</source>
 
=== sceKernelAtomicGet32AndSet64ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x6F63F56D
| 0.990 || not present
|-
| 3.60 || 0x4553FBDE
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);</source>
DACR is not disabled
 
<source lang="c">int sceKernelAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);</source>


=== sceKernelCpuAtomicCompareAndSet32ForDriver ===
=== sceKernelAtomicGet32AndSet64_2ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xCDA96E81
| 0.990 || not present
|-
| 3.60 || 0x7FB4E7AC
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);</source>
Exact same code as SceCpuForKernel_4553FBDE.


=== sceKernelCpuAtomicCompareAndSet64ForDriver ===
DACR is not disabled
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x4B527009
|}
 
<source lang="c">unsigned long long sceKernelCpuAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);</source>


<hr>
<source lang="c">int sceKernelAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);</source>


=== sceKernelCpuAtomicDecIfPositive8ForDriver ===
=== sceKernelAtomicDecIfLowPositive32ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x45153D4E
| 3.60 || 0x8510FA52
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicDecIfPositive8ForDriver(unsigned char *addr);</source>
DACR is not disabled


=== sceKernelCpuAtomicDecIfPositive16ForDriver ===
<source lang="c">int sceKernelAtomicDecIfLowPositive32ForKernel(unsigned int *addr);</source>
 
=== sceKernelAtomicIncrementHighwaterCounterForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x9A693F5B
| 0.931.010-2.060.011 || not present
|}
 
<source lang="c">unsigned short sceKernelCpuAtomicDecIfPositive16ForDriver(unsigned short *addr);</source>
 
=== sceKernelCpuAtomicDecIfPositive32ForDriver ===
{| class="wikitable"
|-
|-
! Version !! NID
| 2.100.081-3.610.011 || 0x5F64E5ED
|-
|-
| 3.60 || 0x2A71B03C
| 3.630.011-3.740.011 || 0x9DA58A9E
|}
|}


This is a guessed name. Official name might be sceKernelAddressSpaceReleaseForDriver.
This is a guessed name. Temp name was sceKernelCpuAtomicHiLoAlgorithmForKernel.


<source lang="c">unsigned int sceKernelCpuAtomicDecIfPositive32ForDriver(unsigned int* addr);</source>
Atomically increments a highwater counter.


=== sceKernelCpuAtomicDecIfPositive64ForDriver ===
Highwater counters are 32-bit values holding a <code>current</code> count in the low 16 bits, and a <code>highwater</code> count in the high 16 bits.
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x267D0B33
|}


<source lang="c">unsigned long long sceKernelCpuAtomicDecIfPositive64ForDriver(unsigned long long *addr);</source>
This routine increments the <code>current</code> count, and the <code>highwater</code> count if the new <code>current</code> value is higher than <code>highwater</code>.


<hr>
DACR is not disabled.


=== sceKernelCpuAtomicGetAndAdd8ForDriver ===
Returns the value of the counter after the increment.
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xFCDCD4DE
|}


<source lang="c">unsigned char sceKernelCpuAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);</source>
<source lang="C">SceUInt32 sceKernelAtomicIncrementHighwaterCounterForKernel(SceUInt32 *pCounter);</source>


=== sceKernelCpuAtomicGetAndAdd16ForDriver ===
=== sceKernelAtomicAddAndGetPositive32InRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x225DF91A
| 3.100.081-3.610.011 || 0x98E91C1C
|-
| 3.630.011-3.740.011 || 0x8F40D0FD
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);</source>
This is a guessed name.


=== sceKernelCpuAtomicGetAndAdd32ForDriver ===
DACR is not disabled
{| class="wikitable"
 
|-
If val is negative, returns 2 and does not override val.
! Version !! NID
|-
| 3.60 || 0x341B6E81
|}


<source lang="c">unsigned int sceKernelCpuAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="C">int sceKernelAtomicAddAndGetPositive32InRangeForKernel(int* val, int add_val, int limit);</source>


=== sceKernelCpuAtomicGetAndAdd64ForDriver ===
=== SceCpuForKernel_6C7E7B57 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x043FD446
| 0.931-3.60 || 0x6C7E7B57
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
Set TTBR lower value (0x4A).


<hr>
<source lang="c">int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);</source>


=== sceKernelCpuAtomicGetAndAnd8ForDriver ===
=== SceCpuForKernel_AED8F8D7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD8E675C0
| 0.931 || 0xAED8F8D7
|-
| 3.60 || not present
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);</source>
Initialize TTBR.


=== sceKernelCpuAtomicGetAndAnd16ForDriver ===
<source lang="C">int SceCpuForKernel_AED8F8D7(const void *ttbr);</source>
 
=== sceKernelGetVmaccessRangeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4A820BC5
| 0.931.010-3.610.011 || 0x9A3281C0
|-
| 3.630.011-3.740.011 || 0xC32687D0
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);</source>
Returns the start and end address of the Virtual Memory access range. Functions such as [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUserForDriver]] (i.e. kernel<->usermode transfer routines) are located in this range. All functions in the Virtual Memory access range run in ARM mode not in Thumb mode.
 
See [[SceExcpmgr|the SceExcpmgr page]] for more information about how the values returned by this function are used.
 
Note that the Virtual Memory access range excludes the endpoint. <code>*pRangeEnd</code> is not considered part of the range however <code>*pRangeStart</code> is.


=== sceKernelCpuAtomicGetAndAnd32ForDriver ===
<source lang="C">
// 0.931.010
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);
 
// 0.940-0.990
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pOldModelRangeStart, SceUIntPtr *pOldModelRangeEnd, SceUIntPtr *pNewModelRangeStart, SceUIntPtr *pNewModelRangeEnd)
 
// 3.600.011-3.740.011
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);
</source>
 
=== SceCpuForKernel_9CB82EB0 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x10EB35EB
| 3.60 || 0x9CB82EB0
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="C">
return;
</source>


=== sceKernelCpuAtomicGetAndAnd64ForDriver ===
<source lang="c">int SceCpuForKernel_9CB82EB0(void);</source>
 
== SceCpuForDriver ==
 
=== SceCpuForDriver_9A9D9C94 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x18A17E07
| 0.990.000-0.996.090 || 0x9A9D9C94
|-
| 1.03-3.740.011 || not present
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
=== SceCpuForDriver_A2E3E4EB ===
 
<hr>
 
=== sceKernelCpuAtomicGetAndClear8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x382D1466
| 0.990.000-0.996.090 || 0xA2E3E4EB
|-
| 1.03-3.740.011 || not present
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);</source>
=== sceKernelRoundupDCacheLine3ForDriver ===
 
=== sceKernelCpuAtomicGetAndClear16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x8E9C086D
| 0.931.010-1.060.031 || 0xF0849812
|-
| 1.50-3.740.011 || not present
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);</source>
<source lang="C">int sceKernelRoundupDCacheLine3ForDriver(int a1);</source>


=== sceKernelCpuAtomicGetAndClear32ForDriver ===
=== sceKernelAbortForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE36F3A46
| 0.931.010-1.060.031 || 0x6DCA6903
|-
| 1.50-3.740.011 || not present
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="C">void sceKernelAbortForDriver(void);</source>


=== sceKernelCpuAtomicGetAndClear64ForDriver ===
=== sceKernelCpuIdForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x88BA6002
| 0.990-3.60 || 0x5E4D5DE1
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
Returns the CPU ID of the current core.


<hr>
<source lang="c">int sceKernelCpuIdForDriver(void);</source>


=== sceKernelCpuAtomicGetAndOr8ForDriver ===
=== sceKernelAtomicAddAndGet8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBDF6F8E4
| 3.60 || 0x1E850481
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);</source>
<source lang="c">unsigned char sceKernelAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);</source>


=== sceKernelCpuAtomicGetAndOr16ForDriver ===
=== sceKernelAtomicAddAndGet16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x004F09D1
| 3.60 || 0x59F74E94
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);</source>
<source lang="c">unsigned short sceKernelAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelCpuAtomicGetAndOr32ForDriver ===
=== sceKernelAtomicAddAndGet32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2A40BB93
| 0.990-3.60 || 0x5F6A8743
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);</source>
Adds <code>val</code> to <code>*addr</code> atomically, and returns the result.
 
<source lang="c">unsigned int sceKernelAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>


=== sceKernelCpuAtomicGetAndOr64ForDriver ===
=== sceKernelAtomicAddAndGet64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xCB73D6D5
| 3.60 || 0x4E459A03
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
<source lang="c">unsigned long long sceKernelAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<hr>
<hr>


=== sceKernelCpuAtomicGetAndSet8ForDriver ===
=== sceKernelAtomicAddUnless8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x29599FC8
| 3.60 || 0x5CC62CEC
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);</source>
<source lang="c">int sceKernelAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);</source>


=== sceKernelCpuAtomicGetAndSet16ForDriver ===
=== sceKernelAtomicAddUnless16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x085532C8
| 3.60 || 0x0F84AFE9
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);</source>
<source lang="c">int sceKernelAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);</source>


=== sceKernelCpuAtomicGetAndSet32ForDriver ===
=== sceKernelAtomicAddUnless32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0EE04C03
| 3.60 || 0x1F157DC3
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="c">int sceKernelAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);</source>


=== sceKernelCpuAtomicGetAndSet64ForDriver ===
=== sceKernelAtomicAddUnless64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD2DEE625
| 3.60 || 0x06CCFA4B
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);</source>
<source lang="c">int sceKernelAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);</source>


=== sceKernelCpuAtomicGetAndSub8ForDriver ===
<hr>
 
=== sceKernelAtomicAndAndGet8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7B43D0D7
| 3.60 || 0x32B62B1A
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);</source>
<source lang="c">unsigned char sceKernelAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>


=== sceKernelCpuAtomicGetAndSub16ForDriver ===
=== sceKernelAtomicAndAndGet16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3EE9B5B8
| 3.60 || 0xB281D52A
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);</source>
<source lang="c">unsigned short sceKernelAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelCpuAtomicGetAndSub32ForDriver ===
=== sceKernelAtomicAndAndGet32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF891CF2A
| 3.60 || 0xDF899E4B
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="c">unsigned int sceKernelAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>


=== sceKernelCpuAtomicGetAndSub64ForDriver ===
=== sceKernelAtomicAndAndGet64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xA7585370
| 3.60 || 0xD18E7B54
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
<source lang="c">unsigned long long sceKernelAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<hr>
<hr>


=== sceKernelCpuAtomicGetAndXor8ForDriver ===
=== sceKernelAtomicClearAndGet8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBAF47F7B
| 3.60 || 0x8E538AB5
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);</source>
<source lang="c">unsigned char sceKernelAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>


=== sceKernelCpuAtomicGetAndXor16ForDriver ===
=== sceKernelAtomicClearAndGet16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x711801E6
| 3.60 || 0x6B050D7C
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);</source>
<source lang="c">unsigned short sceKernelAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelCpuAtomicGetAndXor32ForDriver ===
=== sceKernelAtomicClearAndGet32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x77E34309
| 3.60 || 0x78C1F148
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="c">unsigned int sceKernelAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>


=== sceKernelCpuAtomicGetAndXor64ForDriver ===
=== sceKernelAtomicClearAndGet64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE212ECAD
| 3.60 || 0x2149CD4C
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
<source lang="c">unsigned long long sceKernelAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<hr>
<hr>


=== sceKernelCpuAtomicOrAndGet8ForDriver ===
=== sceKernelAtomicClearMask8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x5D515F1B
| 3.60 || 0x1B3336B0
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
<source lang="c">void sceKernelAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);</source>


=== sceKernelCpuAtomicOrAndGet16ForDriver ===
=== sceKernelAtomicClearMask16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xADD39B84
| 3.60 || 0x1BE58599
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>
<source lang="c">void sceKernelAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelCpuAtomicOrAndGet32ForDriver ===
=== sceKernelAtomicClearMask32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBC248C30
| 3.60 || 0x4AE1BCC0
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);</source>
<source lang="c">void sceKernelAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);</source>


=== sceKernelCpuAtomicOrAndGet64ForDriver ===
=== sceKernelAtomicClearMask64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3E218AF7
| 3.60 || 0x55760309
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);</source>
<source lang="c">void sceKernelAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<hr>
<hr>


=== sceKernelCpuAtomicSet8ForDriver ===
=== sceKernelAtomicCompareAndSet8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0836537E
| 3.60 || 0x3627F4E0
|}
|}


<source lang="c">void sceKernelCpuAtomicSet8ForDriver(unsigned char *addr, unsigned char val);</source>
<source lang="c">unsigned char sceKernelAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);</source>


=== sceKernelCpuAtomicSet16ForDriver ===
=== sceKernelAtomicCompareAndSet16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x532CA3E8
| 3.60 || 0x6F63F56D
|}
|}


<source lang="c">void sceKernelCpuAtomicSet16ForDriver(unsigned short *addr, unsigned short val);</source>
<source lang="c">unsigned short sceKernelAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);</source>


=== sceKernelCpuAtomicSet32ForDriver ===
=== sceKernelAtomicCompareAndSet32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3168BC57
| 3.60 || 0xCDA96E81
|}
|}


<source lang="c">void sceKernelCpuAtomicSet32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="c">unsigned int sceKernelAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);</source>


=== sceKernelCpuAtomicSet64ForDriver ===
=== sceKernelAtomicCompareAndSet64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC381CE8C
| 3.60 || 0x4B527009
|}
|}


<source lang="c">void sceKernelCpuAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
<source lang="c">unsigned long long sceKernelAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);</source>


<hr>
<hr>


=== sceKernelCpuAtomicSetIfGreaterGet8ForDriver ===
=== sceKernelAtomicDecIfPositive8ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x45153D4E
|}
 
<source lang="c">unsigned char sceKernelAtomicDecIfPositive8ForDriver(unsigned char *addr);</source>
 
=== sceKernelAtomicDecIfPositive16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC3868071
| 3.60 || 0x9A693F5B
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);</source>
<source lang="c">unsigned short sceKernelAtomicDecIfPositive16ForDriver(unsigned short *addr);</source>


=== sceKernelCpuAtomicSetIfGreaterGet16ForDriver ===
=== sceKernelAtomicDecIfPositive32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x875B094D
| 3.60 || 0x2A71B03C
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);</source>
This is a guessed name. Official name might be sceKernelAddressSpaceReleaseForDriver.


=== sceKernelCpuAtomicSetIfGreaterGet32ForDriver ===
<source lang="c">unsigned int sceKernelAtomicDecIfPositive32ForDriver(unsigned int* addr);</source>
 
=== sceKernelAtomicDecIfPositive64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x26F71995
| 3.60 || 0x267D0B33
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);</source>
<source lang="c">unsigned long long sceKernelAtomicDecIfPositive64ForDriver(unsigned long long *addr);</source>


<hr>
<hr>


=== sceKernelCpuAtomicSubAndGet8ForDriver ===
=== sceKernelAtomicGetAndAdd8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEB085370
| 3.60 || 0xFCDCD4DE
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
<source lang="c">unsigned char sceKernelAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);</source>


=== sceKernelCpuAtomicSubAndGet16ForDriver ===
=== sceKernelAtomicGetAndAdd16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x515682C9
| 3.60 || 0x225DF91A
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
<source lang="c">unsigned short sceKernelAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelCpuAtomicSubAndGet32ForDriver ===
=== sceKernelAtomicGetAndAdd32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xA4884C4E
| 3.60 || 0x341B6E81
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="c">unsigned int sceKernelAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);</source>


=== sceKernelCpuAtomicSubAndGet64ForDriver ===
=== sceKernelAtomicGetAndAdd64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB5F8919C
| 3.60 || 0x043FD446
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
<source lang="c">unsigned long long sceKernelAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<hr>
<hr>


=== sceKernelCpuAtomicXorAndGet8ForDriver ===
=== sceKernelAtomicGetAndAnd8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x03887992
| 3.60 || 0xD8E675C0
|}
|}


<source lang="c">unsigned char sceKernelCpuAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);</source>
<source lang="c">unsigned char sceKernelAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);</source>


=== sceKernelCpuAtomicXorAndGet16ForDriver ===
=== sceKernelAtomicGetAndAnd16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x646003D6
| 3.60 || 0x4A820BC5
|}
|}


<source lang="c">unsigned short sceKernelCpuAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>
<source lang="c">unsigned short sceKernelAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelCpuAtomicXorAndGet32ForDriver ===
=== sceKernelAtomicGetAndAnd32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4244BE65
| 3.60 || 0x10EB35EB
|}
|}


<source lang="c">unsigned int sceKernelCpuAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
<source lang="c">unsigned int sceKernelAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);</source>


=== sceKernelCpuAtomicXorAndGet64ForDriver ===
=== sceKernelAtomicGetAndAnd64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x692C51B3
| 3.60 || 0x18A17E07
|}
|}


<source lang="c">unsigned long long sceKernelCpuAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
<source lang="c">unsigned long long sceKernelAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<hr>
<hr>


=== sceKernelDcacheInvalidateRangeForDriver ===
=== sceKernelAtomicGetAndClear8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x02796361
| 3.60 || 0x382D1466
|}
|}


Temp name was sceKernelDcacheInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.
<source lang="c">unsigned char sceKernelAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);</source>


<source lang="c">int sceKernelDcacheInvalidateRangeForDriver(const void *start, SceSize size);</source>
=== sceKernelAtomicGetAndClear16ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x8E9C086D
|}
 
<source lang="c">unsigned short sceKernelAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelDcacheInvalidateRangeForL2WBWAForDriver ===
=== sceKernelAtomicGetAndClear32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x614C6698
| 3.60 || 0xE36F3A46
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelDcacheInvalidateRange_0x10ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.
<source lang="c">unsigned int sceKernelAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);</source>


<source lang="c">int sceKernelDcacheInvalidateRangeForL2WBWAForDriver(const void *start, SceSize size);</source>
=== sceKernelAtomicGetAndClear64ForDriver ===
 
=== sceKernelDcacheInvalidateRangeForL1WBWAForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x8B4C26DF
| 3.60 || 0x88BA6002
|}
|}


Temp name was sceKernelDcacheInvalidateRange_0x20ForDriver, sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.
<source lang="c">unsigned long long sceKernelAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<source lang="c">int sceKernelDcacheInvalidateRangeForL1WBWAForDriver(const void *start, SceSize size);</source>
<hr>


=== sceKernelDcacheCleanInvalidateRangeForDriver ===
=== sceKernelAtomicGetAndOr8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x364E68A4
| 3.60 || 0xBDF6F8E4
|}
|}


Temp name was sceKernelDcacheCleanInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver.
<source lang="c">unsigned char sceKernelAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);</source>


<source lang="c">int sceKernelDcacheCleanInvalidateRangeForDriver(const void *start, SceSize size);</source>
=== sceKernelAtomicGetAndOr16ForDriver ===
 
=== sceKernelDcacheCleanInvalidateRangeForL2WBWAForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x364E68A4
| 3.60 || 0x004F09D1
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelDcacheCleanInvalidateRange_0x10ForDriver.
<source lang="c">unsigned short sceKernelAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);</source>
 
<source lang="c">int sceKernelDcacheCleanInvalidateRangeForL2WBWAForDriver(const void *start, SceSize size);</source>


=== sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver ===
=== sceKernelAtomicGetAndOr32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xE551F99B
| 3.60 || 0x2A40BB93
|}
|}


Temp name was sceKernelDcacheCleanInvalidateRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.
<source lang="c">unsigned int sceKernelAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);</source>


<source lang="c">int sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver(const void *start, SceSize);</source>
=== sceKernelAtomicGetAndOr64ForDriver ===
 
=== sceKernelDcacheCleanRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x103872A5
| 3.60 || 0xCB73D6D5
|}
|}


Temp name was sceKernelDcacheCleanRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.
<source lang="c">unsigned long long sceKernelAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<source lang="c">int sceKernelDcacheCleanRangeForDriver(const void *start, SceSize size);</source>
<hr>


=== sceKernelDcacheCleanRangeForL2WBWAForDriver ===
=== sceKernelAtomicGetAndSet8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x2A5344B7
| 3.60 || 0x29599FC8
|-
| 3.60 || not present
|}
|}


Temp name was sceKernelDcacheCleanRange_0x10ForDriver.
<source lang="c">unsigned char sceKernelAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);</source>


<source lang="c">int sceKernelDcacheCleanRangeForL2WBWAForDriver(const void *start, SceSize size);</source>
=== sceKernelAtomicGetAndSet16ForDriver ===
 
=== sceKernelDcacheCleanRangeForL1WBWAForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.68 || 0x9CB9F0CE
| 3.60 || 0x085532C8
|}
|}


Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelDcacheCleanRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.
<source lang="c">unsigned short sceKernelAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);</source>


<source lang="c">int sceKernelDcacheCleanRangeForL1WBWAForDriver(const void *start, SceSize size);</source>
=== sceKernelAtomicGetAndSet32ForDriver ===
 
=== SceCpuForDriver_E813EBB2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xE813EBB2
| 3.60 || 0x0EE04C03
|}
|}


Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.
<source lang="c">unsigned int sceKernelAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);</source>


<source lang="C">
=== sceKernelAtomicGetAndSet64ForDriver ===
#define SceL2CacheReg 0x1A002000
{| class="wikitable"
__dsb();
|-
*(int *)(SceL2CacheReg + 0x730) = 0;
! Version !! NID
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )
|-
    ;
| 3.60 || 0xD2DEE625
__dmb();
|}
</source>


<source lang="c">int SceCpuForDriver_E813EBB2(void);</source>
<source lang="c">unsigned long long sceKernelAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);</source>


=== sceKernelIsUncacheAddressInTmpFsGameForDriver ===
=== sceKernelAtomicGetAndSub8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x337CBDF3
| 3.60 || 0x7B43D0D7
|}
|}


Temp name was sceKernelCpuIsVaddrMappedForDriver.
<source lang="c">unsigned char sceKernelAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);</source>


<source lang="C">
=== sceKernelAtomicGetAndSub16ForDriver ===
  uint32_t vaddr_memory_type = SceCpuForKernel_9B8173F4(vaddr);
{| class="wikitable"
  if (vaddr_memory_type != 8) {
|-
    if (vaddr_memory_type <= 8) {
! Version !! NID
      if (vaddr_memory_type != 2)
|-
        return 0;
| 3.60 || 0x3EE9B5B8
    } else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)
|}
      return 0;
  }
  return 1;
</source>


<source lang="c">int sceKernelIsUncacheAddressInTmpFsGameForDriver(void *vaddr);</source>
<source lang="c">unsigned short sceKernelAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelAtomicGetAndSub32ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xF891CF2A
|}


=== sceKernelCpuSuspendIntrForDriver ===
<source lang="c">unsigned int sceKernelAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);</source>
 
=== sceKernelAtomicGetAndSub64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0x821FC0EE
| 3.60 || 0xA7585370
|}
|}


Temp name was sceKernelCpuDisableInterruptsForDriver.
<source lang="c">unsigned long long sceKernelAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
 
<hr>


Disables IRQ (FIQ are not disabled, but they're routed to Secure state anyways...) and returns previous interrupt bit status (either 0 or 0x80).
=== sceKernelAtomicGetAndXor8ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xBAF47F7B
|}


<source lang="c">
<source lang="c">unsigned char sceKernelAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);</source>
//Return CPSR.I and disable IRQ.
SceKernelIntrStatus sceKernelCpuSuspendIntrForDriver(void);
</source>


=== sceKernelCpuResumeIntrForDriver ===
=== sceKernelAtomicGetAndXor16ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0xF5BAD43B
| 3.60 || 0x711801E6
|}
|}


Temp name was sceKernelCpuEnableInterruptsForDriver.
<source lang="c">unsigned short sceKernelAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);</source>


Restore previous IRQ state. Pass the return value of the previous call to [[SceSysmem#sceKernelCpuSuspendIntrForDriver|sceKernelCpuSuspendIntrForDriver]].
=== sceKernelAtomicGetAndXor32ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x77E34309
|}


<source lang="c">
<source lang="c">unsigned int sceKernelAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);</source>
//Enable IRQ if prev_state & 0x80.
SceKernelIntrStatus sceKernelCpuResumeIntrForDriver(SceKernelIntrStatus prev_state);
</source>


<hr>
=== sceKernelAtomicGetAndXor64ForDriver ===
'''Spinlock functions'''
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xE212ECAD
|}


The following functions implement a simple mutal exclusion mechanism using atomic operation (LDREX/STREX). Spinlocks are owned by a single thread or CPU at a time. Unlike other lock/sync objects of the kernel, spinlocks can be used under any context. Use spinlocks if the data to protect may be accessed from an IRQ or exception handler.
<source lang="c">unsigned long long sceKernelAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


There are two version of the Spinlock functions: normal functions do not change the CPU state, while the <code>SuspendIntr</code> functions ensure the CPU cannot be interrupted while the lock is held.
<hr>


The same type of function must be used to lock and unlock a spinlock: for example, '''calling <code>sceKernelSpinlockLowLockCpuResumeIntr</code> followed by <code>sceKernelSpinlockLowUnlock</code> is an invalid usage of this API'''.
=== sceKernelAtomicOrAndGet8ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x5D515F1B
|}


Spinlocks can take two values: <code>0</code> means the spinlock is unlocked, and <code>1</code> means the spinlock is locked.
<source lang="c">unsigned char sceKernelAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>


<source lang="c">
=== sceKernelAtomicOrAndGet16ForDriver ===
//Unofficial names
{| class="wikitable"
typedef int SceKernelSpinlock;
|-
typedef int SceKernelRWSpinlock;
! Version !! NID
typedef int SceKernelIntrStatus;
|-
| 3.60 || 0xADD39B84
|}


//Sample usage:
<source lang="c">unsigned short sceKernelAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>
void function(Object* object) {
    sceKernelSpinlockLowLock(&object->lock);
    /* ... work on object  ... */
    sceKernelSpinlockUnlock(&object->lock);
}


void trylock_function(Object* object) {
=== sceKernelAtomicOrAndGet32ForDriver ===
    int res = sceKernelSpinlockLowTryLock(&object->lock);
{| class="wikitable"
    if (res >= 0) {
|-
        /* ... work on object ... */
! Version !! NID
    }
|-
}
| 3.60 || 0xBC248C30
|}


void uninterruptible_function(Object* object) {
<source lang="c">unsigned int sceKernelAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);</source>
    SceKernelIntrStatus status = sceKernelSpinlockLowLockCpuSuspendIntr(&object->lock);
    /* ... work on object  ... */
    /* interrupts are disabled here */
    sceKernelSpinlockUnlock(&object->lock, status);
}
 
void uninterruptible_trylock_function(Object* object) {
    SceKernelIntrStatus status = sceKernelSpinlockLowTryLockCpuSuspendIntr(&object->lock);
    if (status >= 0) {
        /* ... work on object ... */
        /* interrupts are disabled here */
        sceKernelSpinlockLowUnlockCpuResumeIntr(&object->lock, status);
    }
}
</source>


=== sceKernelSpinlockLowLockForDriver ===
=== sceKernelAtomicOrAndGet64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0xBF82DEB2
| 3.60 || 0x3E218AF7
|}
|}


Temp name was sceKernelCpuLockStoreLRForDriver.
<source lang="c">unsigned long long sceKernelAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);</source>


Acquires a spinlock.
<hr>


<source lang="c">void sceKernelSpinlockLowLockForDriver(SceKernelSpinlock *pLock);</source>
=== sceKernelAtomicSet8ForDriver ===
 
=== sceKernelSpinlockLowTryLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x5AC9D394
| 3.60 || 0x0836537E
|}
|}


This is a guessed name. Temp name was sceKernelCpuTryLockStoreLRForDriver.
<source lang="c">void sceKernelAtomicSet8ForDriver(unsigned char *addr, unsigned char val);</source>
 
Attempts to acquire a spinlock.


<source lang="c">
=== sceKernelAtomicSet16ForDriver ===
/**
* @param pLock Pointer to the spinlock
* @retval SCE_OK if the spinlock is acquired
* @retval <0 if the spinlock could not be acquired
*/
int sceKernelSpinlockLowTryLockForDriver(SceKernelSpinlock *pLock);
</source>
 
=== sceKernelSpinlockLowUnlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0xD6ED0C46
| 3.60 || 0x532CA3E8
|}
|}


Temp name was sceKernelCpuUnlockStoreLRForDriver.
<source lang="c">void sceKernelAtomicSet16ForDriver(unsigned short *addr, unsigned short val);</source>


Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockForDriver|sceKernelSpinlockLowLockForDriver]] or [[SceSysmem#sceKernelSpinlockLowTryLockForDriver|sceKernelSpinlockLowTryLockForDriver]].
=== sceKernelAtomicSet32ForDriver ===
 
<source lang="c">void sceKernelSpinlockLowUnlockForDriver(SceKernelSpinlock *pLock);</source>
 
=== sceKernelSpinlockLowLockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xD32ACE9E
| 3.60 || 0x3168BC57
|}
|}


Temp name was sceKernelCpuSuspendIntrForDriver, sceKernelCpuLockSuspendIntrStoreLRForDriver.
<source lang="c">void sceKernelAtomicSet32ForDriver(unsigned int *addr, unsigned int val);</source>


Acquires a spinlock and suspend interrupts if necessary.
=== sceKernelAtomicSet64ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xC381CE8C
|}
 
<source lang="c">void sceKernelAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


<source lang="c">
<hr>
/**
* @param pLock Pointer to the spinlock
* @return An opaque value describing the interrupt state
*/
SceKernelIntrStatus sceKernelSpinlockLowLockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);
</source>


=== sceKernelSpinlockLowTryLockCpuSuspendIntrForDriver ===
=== sceKernelAtomicSetIfGreaterGet8ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x27C0B340
| 3.60 || 0xC3868071
|}
|}


This is a guessed name. Temp name was sceKernelCpuTryLockSuspendIntrStoreLRForDriver.
<source lang="c">unsigned char sceKernelAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);</source>


Attempts to acquire a spinlock. If successfully acquired, suspends interrupts if necessary.
=== sceKernelAtomicSetIfGreaterGet16ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x875B094D
|}


<source lang="c">
<source lang="c">unsigned short sceKernelAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);</source>
/**
* @param pLock Pointer to the spinlock
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
* @retval <0 if the spinlock could not be acquired
*/
SceKernelIntrStatus sceKernelSpinlockLowTryLockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);
</source>


=== sceKernelSpinlockLowUnlockCpuResumeIntrForDriver ===
=== sceKernelAtomicSetIfGreaterGet32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x7BB9D5DF
| 3.60 || 0x26F71995
|}
|}


Temp name was sceKernelCpuUnlockResumeIntrStoreLRForDriver, sceKernelCpuResumeIntrForDriver.
<source lang="c">unsigned int sceKernelAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);</source>
 
Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockCpuSuspendIntrForDriver|sceKernelSpinlockLowLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelSpinlockLowTryLockCpuSuspendIntrForDriver|sceKernelSpinlockLowTryLockCpuSuspendIntrForDriver]] and resumes interrupts if necessary.
 
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.
 
<source lang="c">void sceKernelSpinlockLowUnlockCpuResumeIntrForDriver(SceKernelSpinlock *pLock, SceKernelIntrStatus prev_state);
</source>


<hr>
<hr>
'''RW Spinlock functions'''


The following functions implement RW spinlocks. This variant of the spinlock allows multiple threads/CPUs to access data at the same time as long as only reads are performed. When acquired for writing, a single thread at a time can access the data and is thus free to modify it. Like regular spinlocks, the RW spinlocks can be used under any context. Use RW spinlocks if the data to protect may be accessed from an IRQ or exception handler.
=== sceKernelAtomicSubAndGet8ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xEB085370
|}


Like for regular spinlocks, all RWSpinlock functions are available in a normal and <code>SuspendIntr</code> version. Additionally, every function exists in <code>Read</code> and <code>Write</code> variants, depending on whether the caller wants to read or write to the object protected by the lock.
<source lang="c">unsigned char sceKernelAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>


Like for regular spinlocks, the same type of function must be used to lock and unlock a RW spinlock.
=== sceKernelAtomicSubAndGet16ForDriver ===
'''Calling <code>sceKernelRWSpinlockLowReadLock</code> followed by <code>sceKernelRWSpinlockLowWriteUnlock</code> is an invalid usage of this API'''. '''Calling <code>sceKernelRWSpinlockLowReadLockCpuSuspendIntr</code> followed by  <code>sceKernelRWSpinlockLowReadUnlockCpu</code> is also an invalid usage of this API'''.
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x515682C9
|}


RW Spinlocks can take three kind of values: <code>0</code> means the spinlock is unlocked, <code>-0x80000000</code> means the spinlock is write-locked, and a positive value <code>x</code> means that <code>x</code> readers have read-locked the spinlock.
<source lang="c">unsigned short sceKernelAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>


=== sceKernelRWSpinlockLowReadLockForDriver ===
=== sceKernelAtomicSubAndGet32ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xCAC9AE80
| 3.60 || 0xA4884C4E
|}
|}


This is a guessed name. Temp name was sceKernelCpuSpinLockStoreLRForDriver.
<source lang="c">unsigned int sceKernelAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
 
Acquires a RW spinlock for reading data. '''Modifying the data protected by the spinlock is not allowed'''.


<source lang="c">void sceKernelRWSpinlockLowReadLockForDriver(SceKernelRWSpinlock *pRWLock);</source>
=== sceKernelAtomicSubAndGet64ForDriver ===
 
=== sceKernelRWSpinlockLowTryReadLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x093925BD
| 3.60 || 0xB5F8919C
|}
|}


This is a guessed name. Temp name was sceKernelCpuTrySpinLockStoreLRForDriver.
<source lang="c">unsigned long long sceKernelAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


Attempts to acquire a RW spinlock for reading data.
<hr>


'''Even if the spinlock is acquired, modifying the data protected by the spinlock is not allowed'''.
=== sceKernelAtomicXorAndGet8ForDriver ===
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @retval SCE_OK if the spinlock is acquired
* @retval <0 if the spinlock could not be acquired
*/
int sceKernelRWSpinlockLowTryReadLockForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowReadUnlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF5FD5676
| 3.60 || 0x03887992
|}
|}


Temp name was sceKernelCpuSpinUnlockStoreLRForDriver.
<source lang="c">unsigned char sceKernelAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);</source>


Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockForDriver|sceKernelRWSpinlockLowReadLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockForDriver|sceKernelRWSpinlockLowTryReadLockForDriver]].
=== sceKernelAtomicXorAndGet16ForDriver ===
 
<source lang="c">void sceKernelRWSpinlockLowReadUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source>
 
=== sceKernelRWSpinlockLowWriteLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3F42B434
| 3.60 || 0x646003D6
|}
|}


This is a guessed name. Temp name was sceKernelCpuLockStoreFlagForDriver.
<source lang="c">unsigned short sceKernelAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>


Acquires a RW spinlock for writing data.
=== sceKernelAtomicXorAndGet32ForDriver ===
 
<source lang="c">void sceKernelRWSpinlockLowWriteLockForDriver(SceKernelRWSpinlock *pRWLock);</source>
 
=== sceKernelRWSpinlockLowTryWriteLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4F7790B4
| 3.60 || 0x4244BE65
|}
|}


This is a guessed name. Temp name was sceKernelCpuTryLockStoreFlagForDriver.
<source lang="c">unsigned int sceKernelAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
 
Attempts to acquire a RW spinlock for writing data.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @retval SCE_OK if the spinlock is acquired
* @retval <0 if the spinlock could not be acquired
*/
int sceKernelRWSpinlockLowTryWriteLockForDriver(SceKernelRWSpinlock *pRWLock);
</source>


=== sceKernelRWSpinlockLowWriteUnlockForDriver ===
=== sceKernelAtomicXorAndGet64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xCB8ABDF0
| 3.60 || 0x692C51B3
|}
|}


Temp name was sceKernelCpuUnlockStoreFlagForDriver.
<source lang="c">unsigned long long sceKernelAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>


Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockForDriver|sceKernelRWSpinlockLowWriteLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockForDriver|sceKernelRWSpinlockLowTryWriteLockForDriver]].
<hr>


<source lang="c">void sceKernelRWSpinlockLowWriteUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source>
=== sceKernelDcacheInvalidateRangeForDriver ===
 
=== sceKernelRWSpinlockLowReadLockCpuSuspendIntr ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xEC53D007
| 0.931-3.60 || 0x02796361
|}
|}


This is a guessed name. Temp name was sceKernelCpuSpinLockSuspendIntrStoreLRForDriver, sceKernelCpuSpinLockIrqSaveForDriver.
Temp name was sceKernelDcacheInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.


Acquires a RW spinlock for reading data and suspends interrupts if necessary.
<source lang="c">int sceKernelDcacheInvalidateRangeForDriver(const void *start, SceSize size);</source>


<source lang="c">
=== sceKernelDcacheInvalidateRangeForL2WBWAForDriver ===
/**
* @param pLock Pointer to the spinlock
* @return An opaque value describing the interrupt state
*/
SceKernelIntrStatus sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF02467D1
| 0.990 || 0x614C6698
|-
| 3.60 || not present
|}
|}


This is a guessed name. Temp name was sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver.
Temp name was sceKernelDcacheInvalidateRange_0x10ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.


Attempts to acquire a RW spinlock for reading data. If successfully acquired, suspends interrupts if necessary.
<source lang="c">int sceKernelDcacheInvalidateRangeForL2WBWAForDriver(const void *start, SceSize size);</source>


<source lang="c">
=== sceKernelDcacheInvalidateRangeForL1WBWAForDriver ===
/**
* @param pLock Pointer to the spinlock
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
* @retval <0 if the spinlock could not be acquired
*/
SceKernelIntrStatus sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x740A0750
| 0.990-3.60 || 0x8B4C26DF
|}
|}


Temp name was sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver, sceKernelCpuSpinLockIrqRestoreForDriver.
Temp name was sceKernelDcacheInvalidateRange_0x20ForDriver, sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.


Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.
<source lang="c">int sceKernelDcacheInvalidateRangeForL1WBWAForDriver(const void *start, SceSize size);</source>


If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.
=== sceKernelDcacheCleanInvalidateRangeForDriver ===
 
<source lang="c">void sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source>
 
=== sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x4C38CE4D
| 0.931-3.60 || 0x364E68A4
|}
|}


This is a guessed name. Temp name was sceKernelCpuLockSuspendIntrStoreFlagForDriver.
Temp name was sceKernelDcacheCleanInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver, sceKernelDcacheCleanInvalidateRange_0x10ForDriver.


Acquires a RW spinlock for writing data and suspends interrupts if necessary.
Also have another name "sceKernelDcacheCleanInvalidateRangeForL2WBWAForDriver" in 0.990.


<source lang="c">
<source lang="c">int sceKernelDcacheCleanInvalidateRangeForDriver(const void *start, SceSize size);</source>
/**
* @param pLock Pointer to the spinlock
* @return An opaque value describing the interrupt state
*/
SceKernelIntrStatus sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>


=== sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver ===
=== sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xDE6482C6
| 0.990-3.60 || 0xE551F99B
|}
|}


This is a guessed name. Temp name was sceKernelCpuTryLockSuspendIntrStoreFlagForDriver.
Temp name was sceKernelDcacheCleanInvalidateRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.


Attempts to acquire a RW spinlock for writing data. If successfully acquired, suspends interrupts if necessary.
<source lang="c">int sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver(const void *start, SceSize);</source>


<source lang="c">
=== sceKernelDcacheCleanRangeForDriver ===
/**
* @param pLock Pointer to the spinlock
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
* @retval <0 if the spinlock could not be acquired
*/
SceKernelIntrStatus sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x9EC91017
| 0.931.010-3.740.011 || 0x103872A5
|}
|}


Temp name was sceKernelCpuUnlockResumeIntrStoreFlagForDriver.
Temp name was sceKernelDcacheCleanRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.


Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.
<source lang="c">int sceKernelDcacheCleanRangeForDriver(const void *start, SceSize size);</source>


If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.
=== sceKernelDcacheCleanRangeForL2WBWAForDriver ===
 
<source lang="c">void sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source>
 
== SceSysclibForKernel ==
 
This library was removed on FW 1.80.
 
=== __prnt ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.50 || 0xE38E7605
| 0.990.000-3.350.011 || 0x2A5344B7
|-
|-
| 1.80-3.60 || not present. Moved to ForDriver.
| 3.500.011-3.740.011 || not present
|}
|}


This is a guessed name. from PSP.
Temp name was sceKernelDcacheCleanRange_0x10ForDriver.
 
<source lang="c">int sceKernelDcacheCleanRangeForL2WBWAForDriver(const void *start, SceSize size);</source>


=== SceSysclibForKernel_F7E34376 ===
=== sceKernelDcacheCleanRangeForL1WBWAForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.50 || 0xF7E34376
| 0.990.000-3.740.011 || 0x9CB9F0CE
|}
|}


=== SceSysclibForKernel_FA746181 ===
Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelDcacheCleanRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.
 
<source lang="c">int sceKernelDcacheCleanRangeForL1WBWAForDriver(const void *start, SceSize size);</source>
 
=== SceCpuForDriver_E813EBB2 ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.50 || 0xFA746181
| 0.990.000-3.740.011 || 0xE813EBB2
|}
|}


return a1 * (- 0x6e19295b) - 0x6e19295b;
Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.


In SceSysmem, it is used internally to modify a global variable, like a multiplication hash function would do.
<source lang="C">
#define SceL2CacheReg 0x1A002000
__dsb();
*(int *)(SceL2CacheReg + 0x730) = 0;
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )
    ;
__dmb();
</source>


<source lang="C">int SceSysclibForKernel_FA746181(int a1);</source>
<source lang="c">int SceCpuForDriver_E813EBB2(void);</source>


== SceSysclibForDriver ==
=== sceKernelIsUncacheAddressInTmpFsGameForDriver ===
 
The C standard library for use in kernel only. Usermode has access to [[SceLibKernel]], which confusingly is usermode only.
 
Includes standard string functions (no insecure variants like <code>strcpy</code>).
 
=== memset2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.69 || 0x502B000D
| 3.60 || 0x337CBDF3
|-
| 3.60 || not present
|}
|}


=== sortof_vsnprintf ===
Temp name was sceKernelCpuIsVaddrMappedForDriver.
 
<source lang="C">
  uint32_t vaddr_memory_type = sceKernelMMUGetMemoryTypeForKernel(vaddr);
  if (vaddr_memory_type != 8) {
    if (vaddr_memory_type <= 8) {
      if (vaddr_memory_type != 2)
        return 0;
    } else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)
      return 0;
  }
  return 1;
</source>
 
<source lang="C">SceBool sceKernelIsUncacheAddressInTmpFsGameForDriver(void *address);</source>
 
=== sceKernelCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x589BAF6B
| 1.60-3.60 || 0x821FC0EE
|-
| 3.60 || not present
|}
|}


This is a guessed name.
Temp name was sceKernelCpuDisableInterruptsForDriver.
 
Disables IRQ (FIQ are not disabled, but they're routed to Secure state anyways...) and returns previous interrupt bit status (either 0 or 0x80).
 
<source lang="c">
//Return CPSR.I and disable IRQ.
SceKernelIntrStatus sceKernelCpuSuspendIntrForDriver(void);
</source>


=== sortof_vsnprintf_2 ===
=== sceKernelCpuResumeIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x658EA38E
| 1.60-3.60 || 0xF5BAD43B
|-
| 3.60 || not present
|}
|}


This is a guessed name.
Temp name was sceKernelCpuEnableInterruptsForDriver.
 
Restore previous IRQ state. Pass the return value of the previous call to [[SceSysmem#sceKernelCpuSuspendIntrForDriver|sceKernelCpuSuspendIntrForDriver]].
 
<source lang="c">
//Enable IRQ if prev_state & 0x80.
SceKernelIntrStatus sceKernelCpuResumeIntrForDriver(SceKernelIntrStatus prev_state);
</source>
 
<hr>
'''Spinlock functions'''
 
The following functions implement a simple mutal exclusion mechanism using atomic operation (LDREX/STREX). Spinlocks are owned by a single thread or CPU at a time. Unlike other lock/sync objects of the kernel, spinlocks can be used under any context. Use spinlocks if the data to protect may be accessed from an IRQ or exception handler.
 
There are two version of the Spinlock functions: normal functions do not change the CPU state, while the <code>SuspendIntr</code> functions ensure the CPU cannot be interrupted while the lock is held.
 
The same type of function must be used to lock and unlock a spinlock: for example, '''calling <code>sceKernelSpinlockLowLockCpuResumeIntr</code> followed by <code>sceKernelSpinlockLowUnlock</code> is an invalid usage of this API'''.
 
Spinlocks can take two values: <code>0</code> means the spinlock is unlocked, and <code>1</code> means the spinlock is locked.
 
<source lang="c">
//Unofficial names
typedef int SceKernelSpinlock;
typedef int SceKernelRWSpinlock;
typedef int SceKernelIntrStatus;
 
//Sample usage:
void function(Object* object) {
    sceKernelSpinlockLowLock(&object->lock);
    /* ... work on object  ... */
    sceKernelSpinlockUnlock(&object->lock);
}
 
void trylock_function(Object* object) {
    int res = sceKernelSpinlockLowTrylock(&object->lock);
    if (res >= 0) {
        /* ... work on object ... */
    }
}
 
void uninterruptible_function(Object* object) {
    SceKernelIntrStatus status = sceKernelSpinlockLowLockCpuSuspendIntr(&object->lock);
    /* ... work on object  ... */
    /* interrupts are disabled here */
    sceKernelSpinlockUnlock(&object->lock, status);
}
 
void uninterruptible_trylock_function(Object* object) {
    SceKernelIntrStatus status = sceKernelSpinlockLowTrylockCpuSuspendIntr(&object->lock);
    if (status >= 0) {
        /* ... work on object ... */
        /* interrupts are disabled here */
        sceKernelSpinlockLowUnlockCpuResumeIntr(&object->lock, status);
    }
}
</source>


=== SceSysclibForDriver_33388DBC ===
=== sceKernelSpinlockLowLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x33388DBC
| 1.60-3.60 || 0xBF82DEB2
|-
| 3.60 || not present
|}
|}


Calculates xor of a1 and a2, then does some calculation with a3.
Temp name was sceKernelCpuLockStoreLRForDriver.
 
Acquires a spinlock.
 
<source lang="c">void sceKernelSpinlockLowLockForDriver(SceKernelSpinlock *pLock);</source>


=== SceSysclibForDriver_72429909 ===
=== sceKernelSpinlockLowTrylockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x72429909
| 0.990.000-3.740.011 || 0x5AC9D394
|-
|}
| 3.60 || not present
 
|}
This is a guessed name. Temp name was sceKernelCpuTryLockStoreLRForDriver, sceKernelSpinlockLowTryLockForDriver.
 
Attempts to acquire a spinlock.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @retval SCE_OK if the spinlock is acquired
* @retval <0 if the spinlock could not be acquired
*/
int sceKernelSpinlockLowTrylockForDriver(SceKernelSpinlock *pLock);
</source>


=== SceSysclibForDriver_32373DF7 ===
=== sceKernelSpinlockLowUnlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x32373DF7
| 1.60-3.60 || 0xD6ED0C46
|-
| 3.60 || not present
|}
|}


Helper for strtol in base 10.
Temp name was sceKernelCpuUnlockStoreLRForDriver.
 
Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockForDriver|sceKernelSpinlockLowLockForDriver]] or [[SceSysmem#sceKernelSpinlockLowTrylockForDriver|sceKernelSpinlockLowTrylockForDriver]].


<source lang="C">int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);</source>
<source lang="c">void sceKernelSpinlockLowUnlockForDriver(SceKernelSpinlock *pLock);</source>


=== __aeabi_idiv ===
=== sceKernelSpinlockLowLockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2518CD9E
| 0.990-3.60 || 0xD32ACE9E
|}
|}


=== __aeabi_idivmod ===
Temp name was sceKernelCpuSuspendIntrForDriver, sceKernelCpuLockSuspendIntrStoreLRForDriver.
 
Acquires a spinlock and suspend interrupts if necessary.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @return An opaque value describing the interrupt state
*/
SceKernelIntrStatus sceKernelSpinlockLowLockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);
</source>
 
=== sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xAC86B4BA
| 3.60 || 0x27C0B340
|}
|}


=== __aeabi_lcmp ===
Temp name was sceKernelCpuTryLockSuspendIntrStoreLRForDriver.
 
Attempts to acquire a spinlock. If successfully acquired, suspends interrupts if necessary.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
* @retval <0 if the spinlock could not be acquired
*/
SceKernelIntrStatus sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);
</source>
 
=== sceKernelSpinlockLowUnlockCpuResumeIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x709077A1
| 0.990-3.60 || 0x7BB9D5DF
|}
|}


=== __aeabi_lmul ===
Temp name was sceKernelCpuUnlockResumeIntrStoreLRForDriver, sceKernelCpuResumeIntrForDriver.
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xFEE5E751
|}


=== __aeabi_uidiv ===
Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockCpuSuspendIntrForDriver|sceKernelSpinlockLowLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver|sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver]] and resumes interrupts if necessary.
{| class="wikitable"
! Version !! NID
|-
| 0.990-3.60 || 0xA9FF1205
|}


=== __aeabi_uidivmod ===
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.
{| class="wikitable"
 
! Version !! NID
<source lang="c">void sceKernelSpinlockLowUnlockCpuResumeIntrForDriver(SceKernelSpinlock *pLock, SceKernelIntrStatus prev_state);
|-
</source>
| 0.990-3.60 || 0xA46CB7DE
 
|}
<hr>
'''RW Spinlock functions'''
 
The following functions implement RW spinlocks. This variant of the spinlock allows multiple threads/CPUs to access data at the same time as long as only reads are performed. When acquired for writing, a single thread at a time can access the data and is thus free to modify it. Like regular spinlocks, the RW spinlocks can be used under any context. Use RW spinlocks if the data to protect may be accessed from an IRQ or exception handler.
 
Like for regular spinlocks, all RWSpinlock functions are available in a normal and <code>SuspendIntr</code> version. Additionally, every function exists in <code>Read</code> and <code>Write</code> variants, depending on whether the caller wants to read or write to the object protected by the lock.
 
Like for regular spinlocks, the same type of function must be used to lock and unlock a RW spinlock.
'''Calling <code>sceKernelRWSpinlockLowReadLock</code> followed by <code>sceKernelRWSpinlockLowWriteUnlock</code> is an invalid usage of this API'''. '''Calling <code>sceKernelRWSpinlockLowReadLockCpuSuspendIntr</code> followed by  <code>sceKernelRWSpinlockLowReadUnlockCpu</code> is also an invalid usage of this API'''.
 
RW Spinlocks can take three kind of values: <code>0</code> means the spinlock is unlocked, <code>-0x80000000</code> means the spinlock is write-locked, and a positive value <code>x</code> means that <code>x</code> readers have read-locked the spinlock.


=== __aeabi_ldivmod ===
=== sceKernelRWSpinlockLowReadLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7554AB04
| 3.60 || 0xCAC9AE80
|}
|}


=== __aeabi_uldivmod ===
This is a guessed name. Temp name was sceKernelCpuSpinLockStoreLRForDriver.
 
Acquires a RW spinlock for reading data. '''Modifying the data protected by the spinlock is not allowed'''.
 
<source lang="c">void sceKernelRWSpinlockLowReadLockForDriver(SceKernelRWSpinlock *pRWLock);</source>
 
=== sceKernelRWSpinlockLowTryReadLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x9D148CDE
| 3.60 || 0x093925BD
|}
|}


Returns the 64-bit quotient of the division of dividend by divisor.
This is a guessed name. Temp name was sceKernelCpuTrySpinLockStoreLRForDriver.
 
Attempts to acquire a RW spinlock for reading data.


Used for example to convert [[SceRtc]] ticks to a simpler format (divide by time unit in ms) or to compute the number of storage device blocks in [[SceSdstor]] (divide by block size).
'''Even if the spinlock is acquired, modifying the data protected by the spinlock is not allowed'''.


<source lang="C">
<source lang="c">
// ex: __aeabi_uldivmod(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000, 0);
/**
SceUInt64 __aeabi_uldivmod(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);
* @param pLock Pointer to the spinlock
* @retval SCE_OK if the spinlock is acquired
* @retval <0 if the spinlock could not be acquired
*/
int sceKernelRWSpinlockLowTryReadLockForDriver(SceKernelRWSpinlock *pRWLock);
</source>
</source>


=== __aeabi_ulcmp ===
=== sceKernelRWSpinlockLowReadUnlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xFE900DE8
| 3.60 || 0xF5FD5676
|}
|}


=== __aeabi_llsr ===
Temp name was sceKernelCpuSpinUnlockStoreLRForDriver.
 
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockForDriver|sceKernelRWSpinlockLowReadLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockForDriver|sceKernelRWSpinlockLowTryReadLockForDriver]].
 
<source lang="c">void sceKernelRWSpinlockLowReadUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source>
 
=== sceKernelRWSpinlockLowWriteLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xE46C47E6
| 3.60 || 0x3F42B434
|}
|}


=== __aeabi_llsl ===
This is a guessed name. Temp name was sceKernelCpuLockStoreFlagForDriver.
 
Acquires a RW spinlock for writing data.
 
<source lang="c">void sceKernelRWSpinlockLowWriteLockForDriver(SceKernelRWSpinlock *pRWLock);</source>
 
=== sceKernelRWSpinlockLowTryWriteLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x72D31F9D
| 3.60 || 0x4F7790B4
|}
|}


=== __aeabi_lasr ===
This is a guessed name. Temp name was sceKernelCpuTryLockStoreFlagForDriver.
 
Attempts to acquire a RW spinlock for writing data.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @retval SCE_OK if the spinlock is acquired
* @retval <0 if the spinlock could not be acquired
*/
int sceKernelRWSpinlockLowTryWriteLockForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowWriteUnlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x1D89F6C0
| 3.60 || 0xCB8ABDF0
|}
|}


Temp name was rshift.
Temp name was sceKernelCpuUnlockStoreFlagForDriver.
 
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockForDriver|sceKernelRWSpinlockLowWriteLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockForDriver|sceKernelRWSpinlockLowTryWriteLockForDriver]].
 
<source lang="c">void sceKernelRWSpinlockLowWriteUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source>


=== __memcpy_chk ===
=== sceKernelRWSpinlockLowReadLockCpuSuspendIntr ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x8A0B0815
| 0.990.000-3.740.011 || 0xEC53D007
|}
|}


=== __memmove_chk ===
This is a guessed name. Temp name was sceKernelCpuSpinLockSuspendIntrStoreLRForDriver, sceKernelCpuSpinLockIrqSaveForDriver.
 
Acquires a RW spinlock for reading data and suspends interrupts if necessary.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @return An opaque value describing the interrupt state
*/
SceKernelIntrStatus sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x35DBB110
| 3.60 || 0xF02467D1
|}
|}


=== __memset_chk ===
This is a guessed name. Temp name was sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver.
 
Attempts to acquire a RW spinlock for reading data. If successfully acquired, suspends interrupts if necessary.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
* @retval <0 if the spinlock could not be acquired
*/
SceKernelIntrStatus sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x1A30BB28
| 0.990.000-3.740.011 || 0x740A0750
|}
|}


=== __stack_chk_fail ===
Temp name was sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver, sceKernelCpuSpinLockIrqRestoreForDriver.
 
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.
 
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.
 
<source lang="c">void sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source>
 
=== sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.50-3.60 || 0xB997493D
| 0.990-3.60 || 0x4C38CE4D
|}
|}


=== __stack_chk_guard ===
This is a guessed name. Temp name was sceKernelCpuLockSuspendIntrStoreFlagForDriver.
{| class="wikitable"
 
! Version !! NID
Acquires a RW spinlock for writing data and suspends interrupts if necessary.
|-
| 3.60 || 0x99EEBD1F
|}


This is a variable.
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @return An opaque value describing the interrupt state
*/
SceKernelIntrStatus sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>


=== __strlcat_chk ===
=== sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x224BE33F
| 3.60 || 0xDE6482C6
|}
|}


=== __strlcpy_chk ===
This is a guessed name. Temp name was sceKernelCpuTryLockSuspendIntrStoreFlagForDriver.
 
Attempts to acquire a RW spinlock for writing data. If successfully acquired, suspends interrupts if necessary.
 
<source lang="c">
/**
* @param pLock Pointer to the spinlock
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
* @retval <0 if the spinlock could not be acquired
*/
SceKernelIntrStatus sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);
</source>
 
=== sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xCF86EA38
| 0.990-3.60 || 0x9EC91017
|}
|}


=== __strncat_chk ===
Temp name was sceKernelCpuUnlockResumeIntrStoreFlagForDriver.
 
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.
 
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.
 
<source lang="c">void sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source>
 
== SceSysclibForKernel ==
 
This library was removed on FW 1.80.
 
=== __prnt ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931-1.50 || 0xE38E7605
|-
|-
| 3.60 || 0x33EE298B
| 1.80-3.60 || not present. Moved to ForDriver.
|}
|}


=== __strncpy_chk ===
This is a guessed name. from PSP.
 
=== SceSysclibForKernel_F7E34376 ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x96268C53
| 1.50 || 0xF7E34376
|}
|}


=== __snprintf_chk ===
=== SceSysclibForKernel_FA746181 ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7DBE7007
| 0.990-1.50 || 0xFA746181
|}
|}


=== __vsnprintf_chk ===
return a1 * (- 0x6e19295b) - 0x6e19295b;
{| class="wikitable"
 
In SceSysmem, it is used internally to modify a global variable, like a multiplication hash function would do.
 
<source lang="C">int SceSysclibForKernel_FA746181(int a1);</source>
 
== SceSysclibForDriver ==
 
The C standard library for use in kernel only. Usermode has access to [[SceLibKernel]], which confusingly is usermode only.
 
Includes standard string functions (no insecure variants like <code>strcpy</code>).
 
=== memset2 ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931-1.69 || 0x502B000D
|-
|-
| 3.60 || 0xCBF64DF6
| 3.60 || not present
|}
|}


=== __prnt ===
=== sortof_vsnprintf ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present. Present in ForKernel.
| 0.931-0.990 || 0x589BAF6B
|-
|-
| 3.60 || 0xE38E7605
| 3.60 || not present
|}
|}


This is a guessed name. from PSP.
This is a guessed name.


<source lang="C">void __prnt(void (* cb)(void *argp, int ch), void *argp, const char *fmt, va_list list);</source>
=== sortof_vsnprintf_2 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-0.990 || 0x658EA38E
|-
| 3.60 || not present
|}


Supported formats:
This is a guessed name.


=== SceSysclibForDriver_33388DBC ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Format !! Description
! Version !! NID
|-
|-
| \x20 || maybe space fill
| 0.931-0.990 || 0x33388DBC
|-
|-
| # || unknown
| 3.60 || not present
|}
 
Calculates xor of a1 and a2, then does some calculation with a3.
 
=== SceSysclibForDriver_72429909 ===
{| class="wikitable"
|-
|-
| * || unknown
! Version !! NID
|-
|-
| - || Left align
| 0.931-0.990 || 0x72429909
|-
|-
| + || unknown
| 3.60 || not present
|}
 
=== SceSysclibForDriver_32373DF7 ===
{| class="wikitable"
|-
|-
| . || unknown
! Version !! NID
|-
|-
| 0 || Padding number and Enter zero padding
| 0.931-0.990 || 0x32373DF7
|-
|-
| 1~9 || Padding number
| 3.60 || not present
|}
 
Helper for strtol in base 10.
 
<source lang="C">int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);</source>
 
=== __aeabi_idiv ===
{| class="wikitable"
|-
|-
| D || unknown (maybe with long?)
! Version !! NID
|-
|-
| L || unknown (maybe with long?)
| 3.60 || 0x2518CD9E
|-
| O || unknown (maybe with long?)
|-
| U || unknown (maybe with long?)
|-
| X || print hex number as uppercase
|-
| c || print char
|-
| d || print decimal number
|-
| h || unknown
|-
| l || long
|-
| o || unknown
|-
| p || print pointer as lowercase
|-
| s || print strings
|-
| u || unsigned number
|-
| x || print hex number as lowercase
|}
|}


=== vsnprintf ===
=== __aeabi_idivmod ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x3DDBE2E1
| 3.60 || 0xAC86B4BA
|}
|}


<source lang="C">int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);</source>
=== __aeabi_lcmp ===
 
=== get_ctype_table ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x0614B013
| 3.60 || 0x709077A1
|-
| 3.60 || not present
|}
|}


=== look_ctype_table ===
=== __aeabi_lmul ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xCDF7F155
| 3.60 || 0xFEE5E751
|}
|}


<source lang="C">
=== __aeabi_uidiv ===
typedef enum SceCTypeFlag {
SCE_CTYPE_NONE      = 0,
SCE_CTYPE_UPPERCASE = 1,
SCE_CTYPE_LOWERCASE = 2,
SCE_CTYPE_NUMBER    = 4,
SCE_CTYPE_CONTROL  = 8,
SCE_CTYPE_SYMBOL    = 0x10,
SCE_CTYPE_INVISIBLE = 0x20,
SCE_CTYPE_HEX_CASE  = 0x40
} SceCTypeFlag;
 
char look_ctype_table(char ch);
</source>
 
=== memchr ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x60DAEA30
| 0.990-3.60 || 0xA9FF1205
|}
|}


=== timingsafe_memcmp ===
=== __aeabi_uidivmod ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB5A4D745
| 0.990-3.60 || 0xA46CB7DE
|}
|}


timing constant memcmp
=== __aeabi_ldivmod ===
 
=== memcmp ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xF939E83D
| 3.60 || 0x7554AB04
|}
|}


=== memcpy ===
=== __aeabi_uldivmod ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x40C88316
| 0.931-3.60 || 0x9D148CDE
|}
|}


=== memmove ===
Returns the 64-bit quotient of the division of dividend by divisor.
 
Used for example to convert [[SceRtc]] ticks to a simpler format (divide by time unit in ms) or to compute the number of storage device blocks in [[SceSdstor]] (divide by block size).
 
<source lang="C">
// ex: __aeabi_uldivmod(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000, 0);
SceUInt64 __aeabi_uldivmod(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);
</source>
 
=== __aeabi_ulcmp ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.50-3.60 || 0x6CC9C1A1
| 0.931-3.60 || 0xFE900DE8
|}
|}


On FW 1.69, this seems to be implemented incorrectly.
=== __aeabi_llsr ===
 
=== memset ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x0AB9BF5C
| 0.931-3.60 || 0xE46C47E6
|}
|}


=== snprintf ===
=== __aeabi_llsl ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xAE7A8981
| 0.931-3.60 || 0x72D31F9D
|}
|}


=== strchr ===
=== __aeabi_lasr ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.50-3.60 || 0x38463759
| 0.931-3.60 || 0x1D89F6C0
|}
|}


=== strcmp ===
Temp name was rshift.
 
=== __memcpy_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x0B33BC43
| 3.60 || 0x8A0B0815
|}
|}


=== strlcat ===
=== __memmove_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x12504E09
| 3.60 || 0x35DBB110
|}
|}


=== strlcpy ===
=== __memset_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7FB4EBEC
| 3.60 || 0x1A30BB28
|}
|}


=== strlen ===
=== __stack_chk_fail ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xCFC6A9AC
| 1.50-3.60 || 0xB997493D
|}
|}


=== strncat ===
=== __stack_chk_guard ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xA1D1C32C
| 3.60 || 0x99EEBD1F
|}
|}


=== strncmp ===
This is a variable.
 
=== __strlcat_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0x12CEE649
| 3.60 || 0x224BE33F
|}
|}


=== strncpy ===
=== __strlcpy_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x6D286146
| 3.60 || 0xCF86EA38
|}
|}


=== strncpy_s ===
=== __strncat_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 3.60 || 0x33EE298B
|-
| 0.990-3.60 || 0xFE39AEAC
|}
|}


=== strnlen ===
=== __strncpy_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xCD4BD884
| 3.60 || 0x96268C53
|}
|}


=== strrchr ===
=== __snprintf_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x7F0E0835
| 3.60 || 0x7DBE7007
|}
|}


=== strstr ===
=== __vsnprintf_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x1304A69D
| 0.931-0.990 || not present
|-
| 3.60 || 0xCBF64DF6
|}
|}


=== strtol ===
=== __prnt ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xAB77C5AA
| 0.931 || not present. Present in ForKernel.
|-
| 3.60 || 0xE38E7605
|}
|}


=== strtoll ===
This is a guessed name. from PSP.
 
<source lang="C">void __prnt(void (* cb)(void *argp, int ch), void *argp, const char *fmt, va_list list);</source>
 
Supported formats:
 
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Format !! Description
|-
|-
| 3.60 || 0x87AAAFA2
| \x20 || maybe space fill
|}
 
=== strtoul ===
{| class="wikitable"
|-
|-
! Version !! NID
| # || unknown
|-
|-
| 3.60 || 0x4E5042DA
| * || unknown
|}
 
=== tolower ===
{| class="wikitable"
|-
|-
! Version !! NID
| - || Left align
|-
|-
| 3.60 || 0x0021DAF9
| + || unknown
|}
 
<source lang="C">char tolower(char ch);</source>
 
=== toupper ===
{| class="wikitable"
|-
|-
! Version !! NID
| . || unknown
|-
|-
| 3.60 || 0xA685DCB1
| 0 || Padding number and Enter zero padding
|}
 
<source lang="C">char toupper(char ch);</source>
 
=== __strncpy_chk2 ===
{| class="wikitable"
|-
|-
! Version !! NID
| 1~9 || Padding number
|-
|-
| 3.60 || 0x545DA5FD
| D || unknown (maybe with long?)
|}
 
This is a guessed name.
 
=== __strncat_chk2 ===
{| class="wikitable"
|-
|-
! Version !! NID
| L || unknown (maybe with long?)
|-
|-
| 3.60 || 0xDE4666F0
| O || unknown (maybe with long?)
|}
|-
 
| U || unknown (maybe with long?)
This is a guessed name.
|-
| X || print hex number as uppercase
|-
| c || print char
|-
| d || print decimal number
|-
| h || unknown
|-
| l || long
|-
| o || unknown
|-
| p || print pointer as lowercase
|-
| s || print strings
|-
| u || unsigned number
|-
| x || print hex number as lowercase
|}


== SceSysrootForKernel ==
=== vsnprintf ===
 
=== sceKernelSysrootSWBkptGetOriginalOpcodeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x9CFF80F9
| 0.931-3.60 || 0x3DDBE2E1
|}
|}


This is a guessed name.
<source lang="C">int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);</source>


See [[#sceKernelSysrootSWBkptGetOriginalOpcodeForDriver]].
=== get_ctype_table ===
 
=== sceKernelSysrootSetGetPrxDebugFlagFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-2.060.011 || 0xE635DFCC
| 0.931-0.990 || 0x0614B013
|-
|-
| 2.100.081-3.740.011 || not present
| 3.60 || not present
|}
|}


This is a guessed name.
=== look_ctype_table ===
 
Registers the function called by [[#sceKernelSysrootGetPrxDebugFlagForKernel]] which is also the fallback function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].
 
This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_26458702]].
 
<source lang="C">int sceKernelSysrootSetGetPrxDebugFlagFuncForKernel(void *func);</source>3999F917
 
=== sceKernelSysrootGetPrxDebugFlagForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x73522F65
| 3.60 || 0xCDF7F155
|}
|}


This is a guessed name.
<source lang="C">
typedef enum SceCTypeFlag {
SCE_CTYPE_NONE      = 0,
SCE_CTYPE_UPPERCASE = 1,
SCE_CTYPE_LOWERCASE = 2,
SCE_CTYPE_NUMBER    = 4,
SCE_CTYPE_CONTROL  = 8,
SCE_CTYPE_SYMBOL    = 0x10,
SCE_CTYPE_INVISIBLE = 0x20,
SCE_CTYPE_HEX_CASE  = 0x40
} SceCTypeFlag;


Calls the function registered by [[#sceKernelSysrootSetGetPrxDebugFlagFuncForKernel]] on System Software version < 2.100.081 and by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]] on System Software version >= 2.100.081.
char look_ctype_table(char ch);
</source>


<source lang="C">int sceKernelSysrootGetPrxDebugFlagForKernel(SceUID pid, SceUInt32 *pFlag);</source>
=== memchr ===
 
=== SceSysrootForKernel_5E7ECC37 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 3.60 || 0x60DAEA30
|-
| 1.800.071-2.060.011 || 0x5E7ECC37
|-
| 2.100.081-3.740.011 || not present
|}
|}


Registers the function called by [[#SceSysrootForKernel_5C86E49B]].
=== timingsafe_memcmp ===
 
This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].
 
<source lang="C">int SceSysrootForKernel_5E7ECC37(void *func);</source>
 
=== SceSysrootForKernel_5C86E49B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 3.60 || 0xB5A4D745
|-
| 1.800.071-3.740.011 || 0x5C86E49B
|}
|}


Calls the handler stored in SceSysrootDbgpHandler at offset 0x10 and registered by [[#SceSysrootForKernel_5E7ECC37]] or [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].
timing constant memcmp


=== sceKernelSysrootSetProcessDebugSuspendFuncForKernel ===
=== memcmp ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.010.031 || 0x4337841F
| 0.931-3.60 || 0xF939E83D
|-
| 3.10-3.740.011 || 0x4337841F
|}
|}


This is a guessed name.
=== memcpy ===
 
Registers the function called by [[#sceKernelSysrootProcessDebugSuspendForKernel]].
 
This function has been removed since System Software version 3.10 because its feature is already provided by [[#SceSysrootForKernel_D29BCA77]].
 
<source lang="C">int sceKernelSysrootSetProcessDebugSuspendFuncForKernel(void *func);</source>
 
=== sceKernelSysrootProcessDebugSuspendForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x1247A825
| 0.931-3.60 || 0x40C88316
|}
|}


This is a guessed name. Official name might be as well sceKernelProcessDebugSuspendForKernel.
=== memmove ===
 
Calls the function registered by either [[#sceKernelSysrootSetProcessDebugSuspendFuncForKernel]] or [[#SceSysrootForKernel_D29BCA77]].
 
<source lang="C">int sceKernelSysrootProcessDebugSuspendForKernel(SceUID pid, int status);</source>
 
=== SceSysrootForKernel_150DBA2B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.360.011 || 0x150DBA2B
| 1.50-3.60 || 0x6CC9C1A1
|-
| 3.500.011-3.740.011 || not present
|}
|}


=== SceSysrootForKernel_273EAE53 ===
On FW 1.69, this seems to be implemented incorrectly.
 
=== memset ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.360.011 || 0x273EAE53
| 0.931-3.60 || 0x0AB9BF5C
|-
| 3.500.011-3.740.011 || not present
|}
|}


=== sceKernelSysrootIsKernelProcessForKernel ===
=== snprintf ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.360.011 || 0xE0FC42C3
| 1.69-3.60 || 0xAE7A8981
|-
| 3.500.011-3.740.011 || not present
|}
|}


This is a guessed name.
=== strchr ===
 
<source lang="C">SceBool sceKernelSysrootIsKernelProcessForKernel(void);</source>
 
=== sceKernelSysrootRegisterKPLSForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-1.70 || 0x23BEAF6B
| 1.50-3.60 || 0x38463759
|-
| 1.800.071-3.740.011 || not present
|}
|}


=== SceSysrootForKernel_571E5B79 ===
=== strcmp ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x571E5B79
| 1.69-3.60 || 0x0B33BC43
|}
|}


See [[#SceSysrootForDriver_571E5B79]].
=== strlcat ===
 
=== sceKernelSysrootRegisterDbgpHandlerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 3.60 || 0x12504E09
|-
| 2.100.081-3.740.011 || 0x3999F917
|}
|}


Registers a debug process handler.
=== strlcpy ===
 
<source lang="C">int sceKernelSysrootRegisterDbgpHandlerForKernel(SceSysrootDbgpHandler *handler);</source>
 
=== SceSysrootForKernel_611F17A4 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0x611F17A4
| 3.60 || 0x7FB4EBEC
|}
|}


Registers the function called by [[#SceSysrootForKernel_118657C6]].
=== strlen ===
 
<source lang="C">int SceSysrootForKernel_611F17A4(void *func);</source>
 
=== SceSysrootForKernel_118657C6 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0x118657C6
| 0.931-3.60 || 0xCFC6A9AC
|}
|}


Calls the function registered by [[#SceSysrootForKernel_611F17A4]].
=== strncat ===
 
Used in [[SceExcpmgr]].
 
<source lang="C">SceKernelMMUContext* SceSysrootForKernel_118657C6(void);</source>
 
=== SceSysrootForKernel_081F2C20 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 1.69-3.60 || 0xA1D1C32C
|-
| 1.60-1.69 || 0x081F2C20
|-
| 3.60 || not present
|}
|}


Registers sceKernelGetProcessId_2 from [[SceKernelThreadMgr]].
<source lang="C">char *strncat(char *s1, const char *s2, size_t n);</source>


<source lang="C">int SceSysrootForKernel_081F2C20(void *func);</source>
=== strncmp ===
 
=== SceSysrootForKernel_C5EAF5F7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xC5EAF5F7
| 1.60-3.60 || 0x12CEE649
|}
|}


Registers the function called by [[#SceSysrootForKernel_47724459]].
<source lang="C">int strncmp(const char *s0, const char *s1, int n);</source>


<source lang="C">int SceSysrootForKernel_C5EAF5F7(void *func);</source>
=== strncpy ===
 
=== SceSysrootForKernel_47724459 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x47724459
| 0.931-3.60 || 0x6D286146
|}
|}


Calls the function registered by [[#SceSysrootForKernel_C5EAF5F7]].
=== strncpy_s ===
 
=== SceSysrootForKernel_8747D415 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x8747D415
| 0.931 || not present
|-
| 0.990-3.60 || 0xFE39AEAC
|}
|}


Registers the function used by [[#SceSysrootForKernel_B27B7530]].
=== strnlen ===
 
<source lang="C">int SceSysrootForKernel_8747D415(void *func);</source>
 
=== SceSysrootForKernel_B27B7530 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xB27B7530
| 1.69-3.60 || 0xCD4BD884
|}
|}


Calls the function registered by [[#SceSysrootForKernel_8747D415]].
=== strrchr ===
 
Used by [[SceKernelBusError]].
 
=== SceSysrootForKernel_82FC6405 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x82FC6405
| 1.69-3.60 || 0x7F0E0835
|}
|}


Registers the function used by [[#SceSysrootForKernel_CD4B84F7]].
=== strstr ===
 
{| class="wikitable"
Used by [[SceKernelBusError]].
 
<source lang="C">int SceSysrootForKernel_82FC6405(void *func);</source>
 
=== SceSysrootForKernel_CD4B84F7 ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCD4B84F7
| 1.69-3.60 || 0x1304A69D
|}
|}


Calls the function registered by [[#SceSysrootForKernel_82FC6405]].
=== strtol ===
 
Used by [[SceKernelBusError]].
 
=== SceSysrootForKernel_733C243E ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x733C243E
| 0.931-3.60 || 0xAB77C5AA
|}
|}


Registers many Sysroot [[SceProcessmgr]] callbacks.
=== strtoll ===
 
<source lang="C">int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);</source>
 
=== SceSysrootForKernel_7334F1E8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7334F1E8
| 3.60 || 0x87AAAFA2
|}
|}


Calls [[SceProcessmgr#SceProcessmgrForKernel_C77C2085]] function registered by [[#SceSysrootForKernel_733C243E]].
=== strtoul ===
 
<source lang="C">int SceSysrootForKernel_7334F1E8(SceUID pid);</source>
 
=== SceSysrootForKernel_D29BCA77 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0xD29BCA77
| 3.60 || 0x4E5042DA
|}
|}


Registers many Sysroot [[SceProcessmgr]] callbacks.
=== tolower ===
 
<source lang="C">int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);</source>
 
=== SceSysrootForKernel_DD7821AA ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xDD7821AA
| 3.60 || 0x0021DAF9
|}
|}


Registers the function called by [[#SceSysrootForKernel_340575CB]].
<source lang="C">char tolower(char ch);</source>


<source lang="C">int SceSysrootForKernel_DD7821AA(void *func);</source>
=== toupper ===
 
=== SceSysrootForKernel_340575CB ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x340575CB
| 3.60 || 0xA685DCB1
|}
|}


Return some PID.
<source lang="C">char toupper(char ch);</source>


<source lang="C">SceUID SceSysrootForKernel_340575CB(void);</source>
=== __strcpy_chk ===
 
=== sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xBE1EF51C
| 0.931.010-0.990 || not present
|-
| 0.996.090-3.740.011 || 0x545DA5FD
|}
|}


Registers the function called by [[#sceKernelSysrootCheckRemapCodeForUserForKernel]].
Copy a string, with buffer overflow checking.


<source lang="C">int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);</source>
<source lang="C">char * __strcpy_chk(char * dest, const char * src, size_t destlen);</source>


=== sceKernelSysrootCheckRemapCodeForUserForKernel ===
=== __strcat_chk ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xF8769E86
| 0.931.010-0.990 || not present
|-
| 0.996.090-3.740.011 || 0xDE4666F0
|}
|}


=== sceKernelSysrootAllocCurrentProcessHeapForKernel ===
Concatenate two strings, with buffer overflow checking.
 
<source lang="C">char *__strcat_chk(char *dest, const char *src, SceSize destlen);</source>
 
== SceSysrootForKernel ==
 
=== sceKernelSysrootSWBkptGetOriginalOpcodeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x2F75C1DC
| 0.990.000-3.740.011 || 0x9CFF80F9
|}
|}


<source lang="C">void *sceKernelSysrootAllocCurrentProcessHeapForKernel(SceSize size);</source>
This is a guessed name.
 
See [[#sceKernelSysrootSWBkptGetOriginalOpcodeForDriver]].


=== sceKernelSysrootCorelockUnlockForKernel ===
=== sceKernelSysrootSetGetPrxDebugFlagFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.740.011 || 0xAE55B7CC
| 0.940-2.060.011 || 0xE635DFCC
|-
| 2.100.081-3.740.011 || not present
|}
|}


Calls [[#SceCpuForKernel_A5C9DBBA]].
This is a guessed name.
 
Registers the function called by [[#sceKernelSysrootGetPrxDebugFlagForKernel]] which is also the fallback function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].
 
This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_26458702]].


<source lang="C">void sceKernelSysrootCorelockUnlockForKernel(void);</source>
<source lang="C">int sceKernelSysrootSetGetPrxDebugFlagFuncForKernel(void *func);</source>3999F917


=== SceSysrootForKernel_21F5790B ===
=== sceKernelSysrootGetPrxDebugFlagForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 0.990.000-3.740.011 || 0x73522F65
|-
| 3.60 || 0x21F5790B
|}
|}


Registers a function related to kernel panic.
This is a guessed name.
 
Calls the function registered by [[#sceKernelSysrootSetGetPrxDebugFlagFuncForKernel]] on System Software version < 2.100.081 and by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]] on System Software version >= 2.100.081.


<source lang="C">int SceSysrootForKernel_21F5790B(void *func);</source>
<source lang="C">int sceKernelSysrootGetPrxDebugFlagForKernel(SceUID pid, SceUInt32 *pFlag);</source>


=== SceSysrootForKernel_0DF574A9 ===
=== SceSysrootForKernel_5E7ECC37 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-2.060.011 || 0x5E7ECC37
|-
|-
| 3.60 || 0x0DF574A9
| 2.100.081-3.740.011 || not present
|}
|}


Calls the function related to kernel panic registered by [[#SceSysrootForKernel_21F5790B]].
Registers the function called by [[#SceSysrootForKernel_5C86E49B]].
 
This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].


<source lang="C">int SceSysrootForKernel_0DF574A9(void);</source>
<source lang="C">int SceSysrootForKernel_5E7ECC37(void *func);</source>


=== SceSysrootForKernel_2D6B2A79 ===
=== SceSysrootForKernel_5C86E49B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x2D6B2A79
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0x5C86E49B
|}
|}


Registers a function related to kernel panic, called by [[#SceSysrootForKernel_CC7A0E63]].
Calls the handler stored in SceSysrootDbgpHandler at offset 0x10 and registered by [[#SceSysrootForKernel_5E7ECC37]] or [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].


=== SceSysrootForKernel_CC7A0E63 ===
=== sceKernelSysrootSetProcessDebugSuspendFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCC7A0E63
| 0.990.000-3.010.031 || 0x4337841F
|-
| 3.10-3.740.011 || 0x4337841F
|}
|}


Calls a function related to kernel panic, registered by [[#SceSysrootForKernel_2D6B2A79]].
This is a guessed name.
 
Registers the function called by [[#sceKernelSysrootProcessDebugSuspendForKernel]].
 
This function has been removed since System Software version 3.10 because its feature is already provided by [[#SceSysrootForKernel_D29BCA77]].


<source lang="C">
<source lang="C">int sceKernelSysrootSetProcessDebugSuspendFuncForKernel(void *func);</source>
// type: 1: kernel_assertion_or_panic, 3: kernel_exception
// size: must be <= 0x1000
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);
</source>


=== SceSysrootForKernel_1D84C4D4 ===
=== sceKernelSysrootProcessDebugSuspendForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.990.000-3.740.011 || 0x1247A825
|-
| 2.100.081-3.740.011 || 0x1D84C4D4
|}
|}


Get module name, fingerprint and base from address.
This is a guessed name. Official name might be as well sceKernelProcessDebugSuspendForKernel.


<source lang="C">int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);</source>
Calls the function registered by either [[#sceKernelSysrootSetProcessDebugSuspendFuncForKernel]] or [[#SceSysrootForKernel_D29BCA77]].
 
<source lang="C">int sceKernelSysrootProcessDebugSuspendForKernel(SceUID pid, int status);</source>


=== SceSysrootForKernel_5B5EBFB1 ===
=== SceSysrootForKernel_150DBA2B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x5B5EBFB1
| 0.990.000-3.360.011 || 0x150DBA2B
|-
| 3.500.011-3.740.011 || not present
|}
|}


Registers pointer to SceLT5 used by [[#SceSysrootForKernel_E20F6FC8]].
=== SceSysrootForKernel_273EAE53 ===
 
<source lang="C">int SceSysrootForKernel_5B5EBFB1(uint a1);</source>
 
=== SceSysrootForKernel_41636522 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 0.990.000-3.360.011 || 0x273EAE53
|-
|-
| 1.800.071-3.740.011 || 0x41636522
| 3.500.011-3.740.011 || not present
|}
|}


Returns current SceLT5 value pointed by pointer registered using [[#SceSysrootForKernel_E20F6FC8]]. Long/low (64bit) time in microseconds. It is about "awake" uptime from system boot.
=== sceKernelSysrootIsKernelProcessForKernel ===
 
<source lang="C">uint64_t SceSysrootForKernel_41636522(void);</source>
 
=== SceSysrootForKernel_E20F6FC8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 0.990.000-3.360.011 || 0xE0FC42C3
|-
|-
| 1.800.071-3.740.011 || 0xE20F6FC8
| 3.500.011-3.740.011 || not present
|}
|}


Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".
This is a guessed name.


Used by SceDebug Kernel Exceptions handlers.
<source lang="C">SceBool sceKernelSysrootIsKernelProcessForKernel(void);</source>


<source lang="C">uint64_t SceSysrootForKernel_E20F6FC8(void);</source>
=== sceKernelSysrootRegisterKPLSForKernel ===
 
=== SceSysrootForKernel_1D8DB3A5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 0.990.000-1.70 || 0x23BEAF6B
|-
|-
| 1.800.071-3.740.011 || 0x1D8DB3A5
| 1.800.071-3.740.011 || not present
|}
|}


Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".
=== SceSysrootForKernel_571E5B79 ===
 
Returns 0 on success, 0x80020006 if pTime is a NULL pointer.
 
<source lang="C">int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);</source>
 
=== sceKernelSysrootCorelockLockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.740.011 || 0x8E4B61F1
| 0.990.000-3.740.011 || 0x571E5B79
|}
|}


Calls [[#SceCpuForKernel_9D72DD1B]].
See [[#SceSysrootForDriver_571E5B79]].


<source lang="C">int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);</source>
=== sceKernelSysrootRegisterDbgpHandlerForKernel ===
 
=== SceSysrootForKernel_06182D59 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 0.931.010-2.060.011 || not present
|-
|-
| 1.800.071-3.740.011 || 0x06182D59
| 2.100.081-3.740.011 || 0x3999F917
|}
|}


Reimplementation:
Registers a debug process handler.
<source lang="C">
int SceSysrootForKernel_06182D59(int idx) {
return *(uint32_t *)(pSysroot + 0x20) + (idx << 0x5);
}
</source>


<source lang="C">int SceSysrootForKernel_06182D59(int idx);</source>
<source lang="C">int sceKernelSysrootRegisterDbgpHandlerForKernel(SceSysrootDbgpHandler *handler);</source>


=== SceSysrootForKernel_7385CADE ===
=== sceKernelSysrootSetGetIntrMMUContextFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-0.990.000 || not present
| 0.931.010-3.740.011 || 0x611F17A4
|-
| 1.000.071-3.740.011 || 0x7385CADE
|}
|}


Get current syscall's PID.
This is a guessed name.


<source lang="C">
Registers the function called by [[#sceKernelSysrootGetIntrMMUContextForKernel]].
// Returns KERNEL_PID if the function has not been set
SceUID SceSysrootForKernel_7385CADE(void);
</source>


=== SceSysrootForKernel_D441DC34 ===
<source lang="C">int sceKernelSysrootSetGetIntrMMUContextFuncForKernel(void *func);</source>
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010-0.990.000 || not present
|-
| 1.000.071-3.740.011 || 0xD441DC34
|}


Calls a callback registered by [[#SceSysrootForKernel_26458702]], related to syscall frame printing on kernel panic.
=== sceKernelSysrootGetIntrMMUContextForKernel ===
 
=== sceKernelSysrootGetSysrootClassItemsizeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xEEB867C0
| 0.931.010-3.740.011 || 0x118657C6
|}
|}


This is a guessed name. Derived from get_SceKernelSysrootClass_itemsize.
This is a guessed name.


On System Software version 0.990, returns hardcoded value 0x470.
Calls the function registered by [[#sceKernelSysrootSetGetIntrMMUContextFuncForKernel]].


On System Software version 3.200.010, returns hardcoded value 0x440.
Return value is officially named <code>pIntrMMUContext</code>. "Intr" likely stands for "interrupt" or for "internal".


On System Software version 3.600.011, returns hardcoded value 0x41C.
Used in [[SceExcpmgr]].


<source lang="C">SceSize sceKernelSysrootGetSysrootClassItemsizeForKernel(void);</source>
<source lang="C">SceKernelMMUContext* sceKernelSysrootGetIntrMMUContextForKernel(void);</source>


=== sceKernelGetSysrootClassObjectForKernel ===
=== SceSysrootForKernel_081F2C20 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x085C2BCB
| 0.931-0.990 || not present
|-
| 1.60-1.69 || 0x081F2C20
|-
| 3.60 || not present
|}
|}


This is a guessed name. Derived from get_SceKernelSysrootClass_object.
Registers sceKernelGetProcessId_2 from [[SceKernelThreadMgr]].


<source lang="C">SceKernelObject *sceKernelGetSysrootClassObjectForKernel(void);</source>
<source lang="C">int SceSysrootForKernel_081F2C20(void *func);</source>


=== sceKernelSysrootGetLibraryDBForKernel ===
=== SceSysrootForKernel_C5EAF5F7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-2.060.011 || 0xCD70C9D7
| 0.990-3.60 || 0xC5EAF5F7
|-
| 2.100.081-3.740.011 || not present
|}
|}


Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(0x10005)]] in 3.60
Registers the function called by [[#SceSysrootForKernel_47724459]].


<source lang="C">
<source lang="C">int SceSysrootForKernel_C5EAF5F7(void *func);</source>
// size is 0x34-bytes on FW 2.00
void *sceKernelSysrootGetLibraryDBForKernel(void *pSysroot);
</source>


=== sceKernelSysrootSetLibraryDBForKernel ===
=== SceSysrootForKernel_47724459 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-2.060.011 || 0xCB58A0F4
| 0.990-3.60 || 0x47724459
|-
| 2.100.081-3.740.011 || not present
|}
|}


Maybe sets a pointer to the library stub structure. See [[Modules]].
Calls the function registered by [[#SceSysrootForKernel_C5EAF5F7]].


<source lang="C">
=== SceSysrootForKernel_8747D415 ===
// size is 0x34-bytes on FW 2.00
int sceKernelSysrootSetLibraryDBForKernel(void *pSysroot, void *pLibDb);
</source>
 
=== sceKernelSysrootGetProcessLibraryDBForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-2.060.011 || 0xF1037820
| 0.990-3.60 || 0x8747D415
|-
| 2.100.081-3.740.011 || not present
|}
|}


Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(pid)]] in System Software version 3.600.011.
Registers the function used by [[#SceSysrootForKernel_B27B7530]].


The return value of this function is an integer on error, but returns a pointer to LibraryDB on success.
<source lang="C">int SceSysrootForKernel_8747D415(void *func);</source>


<source lang="C">
=== SceSysrootForKernel_B27B7530 ===
// size is 0x34-bytes on FW 2.00
int sceKernelSysrootGetProcessLibraryDBForKernel(SceUID pid);
</source>
 
=== sceKernelSysrootAllocForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.360.011 || 0xB0149E69
| 0.990-3.60 || 0xB27B7530
|-
| 3.500.011-3.740.011 || Not present
|}
|}


Allocates memory from the "Sysroot heap". The Sysroot heap is located after <code>SceSysroot</code> structure and consumes the rest of the page. Allocations from this "heap" are permanent and cannot be returned - there is no <code>sceKernelSysrootFreeForKernel</code>.
Calls the function registered by [[#SceSysrootForKernel_8747D415]].


Usage of this function is not recommended because of the lack of a "free" function. Use [[SceSysmem#sceKernelAllocForKernel]] instead.
Used by [[SceKernelBusError]].


<source lang="C">void *sceKernelSysrootAllocForKernel(SceSize size);</source>
=== SceSysrootForKernel_82FC6405 ===
 
=== sceKernelSysrootSetStatusForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0xA84676E3
| 0.990-3.60 || 0x82FC6405
|}
|}


Registers the function used by [[#SceSysrootForKernel_CD4B84F7]].
Used by [[SceKernelBusError]].
<source lang="C">int SceSysrootForKernel_82FC6405(void *func);</source>
=== SceSysrootForKernel_CD4B84F7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! status !! description
! Version !! NID
|-
|-
| 3 || Global malloc heap initialization completed.
| 0.990-3.60 || 0xCD4B84F7
|-
| 4 || Start initialization for load the module
|-
| 0x10 || Initialization to load the module is complete
|-
| 0x100 || First process create
|-
| 0x1000 || Kernel boot completed.
|}
|}


<source lang="C">int sceKernelSysrootSetStatusForKernel(SceUInt32 status);</source>
Calls the function registered by [[#SceSysrootForKernel_82FC6405]].
 
Used by [[SceKernelBusError]].


=== sceKernelSysrootGetProcessCBExitDeleteThreadForKernel ===
=== SceSysrootForKernel_733C243E ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xBBFD2E3C
| 0.990-3.60 || 0x733C243E
|}
|}


=== sceKernelSysrootGetCurrentProcessCBForKernel ===
Registers many Sysroot [[SceProcessmgr]] callbacks.
 
<source lang="C">int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);</source>
 
=== SceSysrootForKernel_7334F1E8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x9991B1AF
| 3.60 || 0x7334F1E8
|}
|}


=== sceKernelSysrootGetCurrentThreadAttrForKernel ===
Calls [[SceProcessmgr#SceProcessmgrForKernel_C77C2085]] function registered by [[#SceSysrootForKernel_733C243E]].
 
<source lang="C">int SceSysrootForKernel_7334F1E8(SceUID pid);</source>
 
=== SceSysrootForKernel_D29BCA77 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x73601453
| 0.990-3.740.011 || 0xD29BCA77
|}
|}


<source lang="C">int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);</source>
Registers many Sysroot [[SceProcessmgr]] callbacks.
 
<source lang="C">int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);</source>


=== sceKernelSysrootGetCurrentTimeForKernel ===
=== SceSysrootForKernel_DD7821AA ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x4FCFA359
| 0.990-3.60 || 0xDD7821AA
|}
|}


<source lang="C">SceRtcTick *sceKernelSysrootGetCurrentTimeForKernel(void);</source>
Registers the function called by [[#SceSysrootForKernel_340575CB]].


=== sceKernelSysrootGetSystemTimeForKernel ===
<source lang="C">int SceSysrootForKernel_DD7821AA(void *func);</source>
 
=== SceSysrootForKernel_340575CB ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.692.000 || 0xE0D41319
| 0.990-3.60 || 0x340575CB
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)</source>
Return some PID.


=== sceKernelSysrootGetSystemTimeLowForKernel ===
<source lang="C">SceUID SceSysrootForKernel_340575CB(void);</source>
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-1.692.000 || 0x2464329D
|-
| 3.60 || not present
|}


<source lang="C">int sceKernelSysrootGetSystemTimeLowForKernel(void);</source>
=== sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel ===
 
=== sceKernelSysrootAssertSysrootForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-1.692.000 || 0x1B7F150F
| 0.990-3.60 || 0xBE1EF51C
|-
| 3.60 || not present
|}
|}


Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).
Registers the function called by [[#sceKernelSysrootCheckRemapCodeForUserForKernel]].


<source lang="C">int sceKernelSysrootAssertSysrootForKernel(void *sysroot);</source>
<source lang="C">int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);</source>


=== sceKernelSysrootSetVbaseResetVectorForKernel ===
=== sceKernelSysrootCheckRemapCodeForUserForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0x0F2F2B4E
| 0.990-3.60 || 0xF8769E86
|}
|}


=== sceKernelSysrootThreadMgrStartAfterProcessForKernel ===
=== sceKernelSysrootAllocCurrentProcessHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0x0EB5D7CD
| 0.990-3.60 || 0x2F75C1DC
|}
|}


=== sceKernelSysrootGetCurrentProcessForKernel ===
<source lang="C">void *sceKernelSysrootAllocCurrentProcessHeapForKernel(SceSize size);</source>
 
=== sceKernelSysrootCorelockUnlockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.996.090 || 0x5B7570C5
| 0.931.010-3.740.011 || 0xAE55B7CC
|}
|}


Return the current process id.
Calls [[#SceCpuForKernel_A5C9DBBA]].


<source lang="C">SceUID sceKernelSysrootGetCurrentProcessForKernel(void);</source>
<source lang="C">void sceKernelSysrootCorelockUnlockForKernel(void);</source>


=== sceKernelSysrootTrapThreadAfterSyscallForKernel ===
=== SceSysrootForKernel_21F5790B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0x9139E22B
| 0.931 || not present
|-
| 3.60 || 0x21F5790B
|}
|}


Calls a callback registered by [[#SceSysrootForKernel_26458702]].
Registers a function related to kernel panic.


Prints syscall_critical_usage.
<source lang="C">int SceSysrootForKernel_21F5790B(void *func);</source>


=== sceKernelSysrootReturnFromExcpToThreadForKernel ===
=== SceSysrootForKernel_0DF574A9 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0xDADFF828
| 0.931 || not present
|-
| 3.60 || 0x0DF574A9
|}
|}


Used in [[SceExcpmgr]].
Calls the function related to kernel panic registered by [[#SceSysrootForKernel_21F5790B]].


<source lang="C">int sceKernelSysrootReturnFromExcpToThreadForKernel(void);</source>
<source lang="C">int SceSysrootForKernel_0DF574A9(void);</source>


=== sceKernelSysrootBacktraceForKernel ===
=== SceSysrootForKernel_2D6B2A79 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0xCC893F37
| 0.990-3.60 || 0x2D6B2A79
|}
|}


See also [[SceKernelModulemgr#SceBacktraceForDriver]].
Registers a function related to kernel panic, called by [[#SceSysrootForKernel_CC7A0E63]].


<source lang="C">int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);</source>
=== SceSysrootForKernel_CC7A0E63 ===
 
=== sceKernelSysrootPrintBacktraceForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0x491CE8DF
| 0.990-3.60 || 0xCC7A0E63
|}
|}


See also [[SceKernelModulemgr#SceBacktraceForDriver]].
Calls a function related to kernel panic, registered by [[#SceSysrootForKernel_2D6B2A79]].


<source lang="C">int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);</source>
<source lang="C">
// type: 1: kernel_assertion_or_panic, 3: kernel_exception
// size: must be <= 0x1000
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);
</source>


=== sceKernelSysrootRegisterBacktraceForKernel ===
=== SceSysrootForKernel_1D84C4D4 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.010.031 || 0x1C307A31
| 0.931.010-2.060.011 || not present
|-
|-
| 3.60 || not present
| 2.100.081-3.740.011 || 0x1D84C4D4
|}
|}


<source lang="c">int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());</source>
Get module name, fingerprint and base from address.
 
<source lang="C">int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);</source>


=== sceKernelSysrootGetSharedMemoryForKernel ===
=== SceSysrootForKernel_5B5EBFB1 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0xC8C8C321
| 0.990.000-3.740.011 || 0x5B5EBFB1
|}
|}


=== sceKernelSysrootSetSharedMemoryForKernel ===
Registers pointer to SceLT5 used by [[#SceSysrootForKernel_E20F6FC8]].
 
<source lang="C">int SceSysrootForKernel_5B5EBFB1(uint a1);</source>
 
=== SceSysrootForKernel_41636522 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0xFBB91741
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0x41636522
|}
|}


=== sceKernelSysrootGetUIDEntryHeapForKernel ===
Returns current SceLT5 value pointed by pointer registered using [[#SceSysrootForKernel_E20F6FC8]]. Long/low (64bit) time in microseconds. It is about "awake" uptime from system boot.
 
<source lang="C">uint64_t SceSysrootForKernel_41636522(void);</source>
 
=== SceSysrootForKernel_E20F6FC8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0x88DE85EF
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0xE20F6FC8
|}
|}


Temp name was sceKernelSysrootGetPUIDEntryHeapForKernel.
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".


Gets the UID Entry Heap of the process.
Used by SceDebug Kernel Exceptions handlers.


Kernel process's UID entry heap is the GUIDEntryHeap. All other process' UID entry heaps are PUID heaps.
<source lang="C">uint64_t SceSysrootForKernel_E20F6FC8(void);</source>


<source lang="C">int sceKernelSysrootGetUIDEntryHeapForKernel(SceUID pid, void **entryHeap);</source>
=== SceSysrootForKernel_1D8DB3A5 ===
 
=== sceKernelSysrootGetStatusForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0x5C426B19
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0x1D8DB3A5
|}
|}


<source lang="C">int sceKernelSysrootGetStatusForKernel(void);</source>
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".
 
Returns 0 on success, 0x80020006 if pTime is a NULL pointer.
 
<source lang="C">int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);</source>


=== sceKernelSysrootIofilemgrStartForKernel ===
=== sceKernelSysrootCorelockLockForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xF6A6D205
| 0.931.010-3.740.011 || 0x8E4B61F1
|}
|}


=== SceSysrootForKernel_F9FB9A2A ===
Calls [[#SceCpuForKernel_9D72DD1B]].
 
<source lang="C">int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);</source>
 
=== SceSysrootForKernel_06182D59 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-2.060.011 || 0xF9FB9A2A
| 0.931.010-1.692.000 || not present
|-
|-
| 2.100.081-3.740.011 || not present
| 1.800.071-3.740.011 || 0x06182D59
|}
|}


Registers the function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].
Reimplementation:
<source lang="C">
int SceSysrootForKernel_06182D59(int idx) {
return *(uint32_t *)(pSysroot + 0x20) + (idx << 0x5);
}
</source>


This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_D29BCA77]].
<source lang="C">int SceSysrootForKernel_06182D59(int idx);</source>


<source lang="C">int SceSysrootForKernel_F9FB9A2A(void *func);</source>
=== SceSysrootForKernel_7385CADE ===
 
=== sceKernelSysrootGetCurrentAddressSpaceCBForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.740.011 || 0x63EBB05B
| 0.931.010-0.990.000 || not present
|-
| 1.000.071-3.740.011 || 0x7385CADE
|}
|}


Gets the current Address Space's control block via TPIDRPRW.
Get current syscall's PID.


This function calls a callback registered by [[#SceSysrootForKernel_F9FB9A2A]] on System Software version < 2.10 and by [[#SceSysrootForKernel_D29BCA77]] on System Software version >= 2.10, if it was registered, else a fallback callback. The fallback callback is registered by [[#SceSysrootForKernel_E635DFCC]] on System Software version < 2.10 and by [[#SceSysrootForKernel_26458702]] on System Software version >= 2.10.
<source lang="C">
// Returns KERNEL_PID if the function has not been set
SceUID SceSysrootForKernel_7385CADE(void);
</source>


<source lang="C">SceUIDAddressSpaceObject *sceKernelSysrootGetCurrentAddressSpaceCBForKernel(void);</source>
=== SceSysrootForKernel_D441DC34 ===
 
=== SceSysrootForKernel_BF82931F ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.500.151-3.740.011 || 0xBF82931F
| 0.931.010-0.990.000 || not present
|-
| 1.000.071-3.740.011 || 0xD441DC34
|}
|}


Calls the function registered by [[#SceSysrootForDriver_2BE874EF]].
Calls a callback registered by [[#SceSysrootForKernel_26458702]], related to syscall frame printing on kernel panic.


No usage seen on CEX OS. Maybe used in DEX/TOOL OS.
=== sceKernelSysrootGetSysrootClassItemsizeForKernel ===
 
<source lang="C">int SceSysrootForKernel_BF82931F(int maybe_app_id, void *pOut);</source>
 
=== SceSysrootForKernel_6D111FA7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.500.151-3.740.011 || 0x6D111FA7
| 0.990.000-3.740.011 || 0xEEB867C0
|}
|}


Calls the function registered by [[#SceSysrootForDriver_3B19B06B]].
This is a guessed name. Derived from get_SceKernelSysrootClass_itemsize.
 
On System Software version 0.990, returns hardcoded value 0x470.
 
On System Software version 3.200.010, returns hardcoded value 0x440.


Used only in [[SceCoredump]].
On System Software version 3.600.011, returns hardcoded value 0x41C.


<source lang="C">int SceSysrootForKernel_6D111FA7(int maybe_app_id, void *pOut);</source>
<source lang="C">SceSize sceKernelSysrootGetSysrootClassItemsizeForKernel(void);</source>


=== SceSysrootForKernel_2A03DFA1 ===
=== sceKernelGetSysrootClassObjectForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2A03DFA1
| 0.990.000-3.740.011 || 0x085C2BCB
|}
|}


Calls the function registered by [[#SceSysrootForDriver_70AD47A9]].
This is a guessed name. Derived from get_SceKernelSysrootClass_object.


Used only in [[SceCoredump]].
<source lang="C">SceKernelObject *sceKernelGetSysrootClassObjectForKernel(void);</source>


<source lang="C">
=== sceKernelSysrootGetLibraryDBForKernel ===
// pOut: A buffer of at least 0xF8 bytes
{| class="wikitable"
int SceSysrootForKernel_2A03DFA1(void *pOut);
</source>
 
=== sceKernelSysrootAppMgrSpawnProcessForKernel ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x3ACACD22
| 0.990.000-2.060.011 || 0xCD70C9D7
|-
| 2.100.081-3.740.011 || not present
|}
|}


=== sceKernelSysrootGetCachedSecureModuleInfoForKernel ===
Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(0x10005)]] in 3.60
 
<source lang="C">
// size is 0x34-bytes on FW 2.00
void *sceKernelSysrootGetLibraryDBForKernel(void *pSysroot);
</source>
 
=== sceKernelSysrootSetLibraryDBForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF10AB792
| 0.990.000-2.060.011 || 0xCB58A0F4
|-
| 2.100.081-3.740.011 || not present
|}
|}


Temp name was sceKernelSysrootGetSmSelfInfoForKernel.
Maybe sets a pointer to the library stub structure. See [[Modules]].
 
<source lang="C">
// size is 0x34-bytes on FW 2.00
int sceKernelSysrootSetLibraryDBForKernel(void *pSysroot, void *pLibDb);
</source>


=== sceKernelSysrootGetProcessLibraryDBForKernel ===
{| class="wikitable"
{| class="wikitable"
! Index !! SM SELF location
|-
|-
| 0 || os0:sm/gcauthmgr_sm.self
! Version !! NID
|-
|-
| 1 || os0:sm/rmauth_sm.self
| 0.990.000-2.060.011 || 0xF1037820
|-
|-
| 2 || os0:sm/encdec_w_portability_sm.self
| 2.100.081-3.740.011 || not present
|}
|}


<source lang="C">int sceKernelSysrootGetCachedSecureModuleForKernel(SceCachedSecureModule id, SceCachedSecureModuleInfo *pInfo);</source>
Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(pid)]] in System Software version 3.600.011.
 
The return value of this function is an integer on error, but returns a pointer to LibraryDB on success.
 
<source lang="C">
// size is 0x34-bytes on FW 2.00
int sceKernelSysrootGetProcessLibraryDBForKernel(SceUID pid);
</source>


=== sceKernelSysrootGetProcessSelfAuthInfoForKernel ===
=== sceKernelSysrootAllocForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x4F0A4066
| 0.931.010-3.360.011 || 0xB0149E69
|-
| 3.500.011-3.740.011 || Not present
|}
|}


Temp name was sceSysrootGetSelfAuthInfoForKernel.
Allocates memory from the "Sysroot heap". The Sysroot heap is located after <code>SceSysroot</code> structure and consumes the rest of the page. Allocations from this "heap" are permanent and cannot be returned - there is no <code>sceKernelSysrootFreeForKernel</code>.
 
Usage of this function is not recommended because of the lack of a "free" function. Use [[SceSysmem#sceKernelAllocForKernel]] instead.


<source lang="C">int sceKernelSysrootGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *pSelfAuthInfo);</source>
<source lang="C">void *sceKernelSysrootAllocForKernel(SceSize size);</source>


=== sceKernelSysrootGetProcessTitleIdForKernel ===
=== sceKernelSysrootSetStatusForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEC3124A3
| 0.990-3.740.011 || 0xA84676E3
|}
|}


Temp name was sceSysrootGetProcessTitleIdForPidForKernel.
<source lang="C">int sceKernelSysrootGetProcessTitleIdForKernel(SceUID pid, char *title_id, SceSize len);</source>
=== sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! status !! description
|-
|-
| 0.931.010-1.692.000 || not present
| 3 || Global malloc heap initialization completed.
|-
|-
| 1.800.071-3.740.011 || 0xB39CD708
| 4 || Start initialization for load the module
|-
| 0x10 || Initialization to load the module is complete
|-
| 0x100 || First process create
|-
| 0x1000 || Kernel boot completed.
|}
|}


Registers the function called by [[#sceKernelSysrootGetFunctionNameByNIDForKernel]].
<source lang="C">int sceKernelSysrootSetStatusForKernel(SceUInt32 status);</source>


<source lang="c">int sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel(void *func);</source>
=== sceKernelSysrootGetProcessCBExitDeleteThreadForKernel ===
 
=== sceKernelSysrootGetFunctionNameByNIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 0.990-3.60 || 0xBBFD2E3C
|-
| 1.800.071-3.740.011 || 0x0B79E220
|}
|}


Mirror of [[SceSysLibTrace#sceNidsymtblGetFunctionNameByNIDForDriver]].
=== sceKernelSysrootGetCurrentProcessCBForKernel ===
 
<source lang="c">int sceKernelSysrootGetFunctionNameByNIDForKernel(SceNID funcnid, const char **name);</source>
 
=== SceSysrootForKernel_26458702 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.990-3.60 || 0x9991B1AF
|-
| 2.100.081-3.740.011 || 0x26458702
|}
|}


Registers some callbacks for example the fallback callback called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].
=== sceKernelSysrootGetCurrentThreadAttrForKernel ===
 
=== SceSysrootForKernel_B171CC2D ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.990-3.60 || 0x73601453
|-
| 2.100.081-3.740.011 || 0xB171CC2D
|}
|}


Register some ModuleMgr handlers.
<source lang="C">int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);</source>


Used by [[SceKernelModulemgr]].
=== sceKernelSysrootGetCurrentTimeForKernel ===
 
<source lang="C">int SceSysrootForKernel_B171CC2D(SceSysrootModulemgrHandlers *pHandlers);</source>
 
=== sceKernelSysrootGetProcessSyscallInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFF9F80FF
| 0.990 || 0x4FCFA359
|}
|}


<source lang="c">int sceKernelSysrootGetProcessSyscallInfoForKernel(SceUID pid, const void *PC, SceSyscallInfo *pInfo);</source>
<source lang="C">SceRtcTick *sceKernelSysrootGetCurrentTimeForKernel(void);</source>


=== sceKernelSysrootGetVbaseResetVectorForKernel ===
=== sceKernelSysrootGetSystemTimeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCC85905B
| 0.990-1.692.000 || 0xE0D41319
|-
| 3.60 || not present
|}
|}


Returns the exception vectors base address. The address of the exception vectors for the CPU <code>i</code> is: <code>sceKernelSysrootGetVbaseResetVectorForKernel() + 0x40 * i</code>.
<source lang="C">int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)</source>


<source lang="C">void *sceKernelSysrootGetVbaseResetVectorForKernel(void);</source>
=== sceKernelSysrootGetSystemTimeLowForKernel ===
 
=== sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x71DB83A2
| 0.990-1.692.000 || 0x2464329D
|-
| 3.60 || not present
|}
|}


Registers [[SceSblPostSsMgr#sceSblLicMgrGetLicenseStatusForDriver]].
<source lang="C">int sceKernelSysrootGetSystemTimeLowForKernel(void);</source>


<source lang="c">int sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel(int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)());</source>
=== sceKernelSysrootAssertSysrootForKernel ===
 
=== sceKernelSysrootLicMgrGetLicenseStatusForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x377895EB
| 0.990-1.692.000 || 0x1B7F150F
|-
| 3.60 || not present
|}
|}


Called by [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel|sceSblAuthMgrAuthHeaderForKernel]] before Cmep request.
Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).


<source lang="C">int sceKernelSysrootLicMgrGetLicenseStatusForKernel(void);</source>
<source lang="C">int sceKernelSysrootAssertSysrootForKernel(void *sysroot);</source>


=== sceKernelSysrootGetSysrootForKernel ===
=== sceKernelSysrootSetVbaseResetVectorForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x3E455842
| 0.990-3.740.011 || 0x0F2F2B4E
|}
|}


Temp name was sceKernelGetSysbaseForKernel.
=== sceKernelSysrootThreadMgrStartAfterProcessForKernel ===
 
Returns pointer to SceUIDSysrootObject in SceSysmem.
 
<source lang="C">SceUIDSysrootObject *sceKernelSysrootGetSysrootForKernel(void);</source>
 
=== sceKernelSysrootGetKblParamForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0x9DB56D1F
| 0.990-3.740.011 || 0x0EB5D7CD
|}
|}


Temp name was sceKernelGetSysrootBufferForKernel, sceSysrootGetSysrootBufferForKernel.
=== sceKernelSysrootGetCurrentProcessForKernel ===
 
Returns pointer to [[KBL Param]].
 
<source lang="C">SceKblParam *sceKernelSysrootGetKblParamForKernel(void);</source>
 
=== sceKernelSysrootGetSoCRevisionForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xD3872270
| 0.931-0.996.090 || 0x5B7570C5
|}
|}


return pSysroot->soc_revision;
Return the current process id.


<source lang="C">int sceKernelSysrootGetSoCRevisionForKernel(void);</source>
<source lang="C">SceUID sceKernelSysrootGetCurrentProcessForKernel(void);</source>


=== sceKernelSysrootGetPervasiveUnkDwordForKernel ===
=== sceKernelSysrootTrapThreadAfterSyscallForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xFFD6E24D
| 0.990-3.740.011 || 0x9139E22B
|}
|}


This is a guessed name.
Calls a callback registered by [[#SceSysrootForKernel_26458702]].


Returns value initially read from physical address 0xE3100004 (ScePervasiveMisc + 0x4).
Prints syscall_critical_usage.


return pSysroot->pervasive_unk_dword;
=== sceKernelSysrootReturnFromExcpToThreadForKernel ===
 
<source lang="C">int sceKernelSysrootGetPervasiveUnkDwordForKernel(void);</source>
 
=== sceKernelSysrootGetKermitRevisionForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x403B509E
| 0.931-3.740.011 || 0xDADFF828
|}
|}


return pSysroot->kermit_revision;
Used in [[SceExcpmgr]].


Used by [[SceKernelBusError]], [[SceSysStateMgr]].
<source lang="C">int sceKernelSysrootReturnFromExcpToThreadForKernel(void);</source>


<source lang="C">
=== sceKernelSysrootBacktraceForKernel ===
// Only bits set are in 0x1FFFF mask.
// ret & 0x1FF00 = Major Revision? (known values: 0 for KERMIT10_REV_ES4, 1 for KERMIT15_REV_ES1)
// ret & 0x000F0 = Engineering Sample (1 = ES1, 2 = ES2, etc)
// ret & 0x0000F = Minor Revision
SceUInt32 sceKernelSysrootGetKermitRevisionForKernel(void);
</source>
 
=== sceKernelSysrootGetErnieSleepFactorForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.996.090-3.740.011 || 0xAB3CC7D0
| 0.931-3.740.011 || 0xCC893F37
|}
|}


This is a guessed name.
See also [[SceKernelModulemgr#SceBacktraceForDriver]].


See [[KBL Param#Sleep Factor]].
<source lang="C">int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);</source>


return kbl_param->sleep_factor;
=== sceKernelSysrootPrintBacktraceForKernel ===
 
<source lang="C">int sceKernelSysrootGetErnieSleepFactorForKernel(void);</source>
 
=== sceKernelSysrootGetErnieWakeupFactorForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x2F97041A
| 0.931-3.740.011 || 0x491CE8DF
|}
|}


This is the official name. Temp name was sceSysrootGetWakeupFactorForKernel.
See also [[SceKernelModulemgr#SceBacktraceForDriver]].


See [[KBL Param#Wakeup Factor]].
<source lang="C">int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);</source>


return kbl_param->wakeup_factor;
=== sceKernelSysrootRegisterBacktraceForKernel ===
 
<source lang="C">int sceKernelSysrootGetErnieWakeupFactorForKernel(void);</source>
 
=== sceKernelSysrootGetSessionIdForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.81 || not present
| 0.940-3.010.031 || 0x1C307A31
|-
|-
| 2.000.081-3.740.011 || 0x84783B71
| 3.60 || not present
|}
|}


Writes kbl_param->session_id to buffer.
<source lang="c">int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());</source>


pSessionId buffer size is 0x10 bytes.
=== sceKernelSysrootGetSharedMemoryForKernel ===
 
<source lang="C">int sceKernelSysrootGetSessionIdForKernel(char *pSessionId);</source>
 
=== sceKernelSysrootIsExternalBootModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x89D19090
| 0.990-3.740.011 || 0xC8C8C321
|}
|}


return *(int *)(kbl_param->boot_type_indicator_1) & 1;
=== sceKernelSysrootSetSharedMemoryForKernel ===
 
<source lang="C">int sceKernelSysrootIsExternalBootModeForKernel(void);</source>
 
=== sceKernelSysrootIsSomeBootModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-0.996.090 || not present
| 0.990-3.740.011 || 0xFBB91741
|-
| 1.000.071-3.740.011 || 0x7B7F8171
|}
|}


This is a guessed name. A possible name is sceKernelIsAllowSdCardFromMgmt.
=== sceKernelSysrootGetUIDEntryHeapForKernel ===
 
Used by [[SceSdif]], [[SceExfatfs]].
 
return (*(int *)(kbl_param->boot_type_indicator_1) >> 19) & 1;
 
Returns true if boot_type_indicator_1 has flag 0x80000 ?sd mode? - (Mgmt bit 1)
 
<source lang="C">int sceKernelSysrootIsSomeBootModeForKernel(void);</source>
 
=== sceKernelSysrootIsExternalBootMode2ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x7918D44E
| 0.990-3.740.011 || 0x88DE85EF
|}
|}


This is a guessed name. Temp name was sceSysrootIsSomeBootMode2ForKernel. A possible name is sceKernelIsAllowFwCheckSkip.
Temp name was sceKernelSysrootGetPUIDEntryHeapForKernel.


return kbl_param->boot_type_indicator_1[2] & 1;
Gets the UID Entry Heap of the process.


Return true if boot_type_indicator_1 has flag 0x10000 but it seems to be never set in external (release) second_loader. It allows to bypass current fw version check for module loading.
Kernel process's UID entry heap is the GUIDEntryHeap. All other process' UID entry heaps are PUID heaps.


<source lang="C">int sceKernelSysrootIsExternalBootMode2ForKernel(void);</source>
<source lang="C">int sceKernelSysrootGetUIDEntryHeapForKernel(SceUID pid, void **entryHeap);</source>


=== sceKernelSysrootIsUartModeForKernel ===
=== sceKernelSysrootGetStatusForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.740.011 || 0xAE7A8F1D
| 0.990-3.740.011 || 0x5C426B19
|}
|}


This is a guessed name. Temp name was sceSysrootIsSomeModeForKernel.
<source lang="C">int sceKernelSysrootGetStatusForKernel(void);</source>


Returns true if (kbl_param->boot_flags[1] != 0xFF).
=== sceKernelSysrootIofilemgrStartForKernel ===
 
Used to check if UART must be initialized or not.
 
<source lang="C">int sceKernelSysrootIsUartModeForKernel(void);</source>
 
=== sceKernelSysrootIsSafeModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x834439A7
| 0.990-3.60 || 0xF6A6D205
|}
|}


<source lang="C">int sceKernelSysrootIsSafeModeForKernel(void);</source>
=== SceSysrootForKernel_F9FB9A2A ===
 
=== sceKernelSysrootIsUpdateModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xB0E1FC67
| 0.990.000-2.060.011 || 0xF9FB9A2A
|-
| 2.100.081-3.740.011 || not present
|}
|}


<source lang="C">int sceKernelSysrootIsUpdateModeForKernel(void);</source>
Registers the function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].
 
This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_D29BCA77]].
 
<source lang="C">int SceSysrootForKernel_F9FB9A2A(void *func);</source>


=== sceKernelSysrootIsBsodRebootForKernel ===
=== sceKernelSysrootGetCurrentAddressSpaceCBForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.940-3.740.011 || 0x63EBB05B
|-
| 2.100.081-3.740.011 || 0x4373AC96
|}
|}


return ((pKblParam->wakeup_factor) & 0x7Fu) == 0x17;
Gets the current Address Space's control block via TPIDRPRW.
 
This function calls a callback registered by [[#SceSysrootForKernel_F9FB9A2A]] on System Software version < 2.10 and by [[#SceSysrootForKernel_D29BCA77]] on System Software version >= 2.10, if it was registered, else a fallback callback. The fallback callback is registered by [[#SceSysrootForKernel_E635DFCC]] on System Software version < 2.10 and by [[#SceSysrootForKernel_26458702]] on System Software version >= 2.10.


<source lang="C">int sceKernelSysrootIsBsodRebootForKernel(void);</source>
<source lang="C">SceUIDAddressSpaceObject *sceKernelSysrootGetCurrentAddressSpaceCBForKernel(void);</source>


=== sceKernelSysrootIsUsbEnumWakeupForKernel ===
=== SceSysrootForKernel_BF82931F ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.996.090-3.740.011 || 0x79C9AE10
| 1.500.151-3.740.011 || 0xBF82931F
|}
|}


<source lang="C">
Calls the function registered by [[#SceSysrootForDriver_2BE874EF]].
if ( *(int *)(kbl_param->unk_C0) & 0x90000 )
 
  return 1;
No usage seen on CEX OS. Maybe used in DEX/TOOL OS.
else
  return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) == 0xF;
</source>


<source lang="C">int sceKernelSysrootIsUsbEnumWakeupForKernel(void);</source>
<source lang="C">int SceSysrootForKernel_BF82931F(int maybe_app_id, void *pOut);</source>


=== sceKernelSysrootIsUnknownRebootForKernel ===
=== SceSysrootForKernel_6D111FA7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 1.500.151-3.740.011 || 0x6D111FA7
|-
| 2.100.081-3.740.011 || 0xE4EA1960
|}
|}


return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) <= 1;
Calls the function registered by [[#SceSysrootForDriver_3B19B06B]].
 
Used only in [[SceCoredump]].


<source lang="C">int sceKernelSysrootIsUnknownRebootForKernel(void);</source>
<source lang="C">int SceSysrootForKernel_6D111FA7(int maybe_app_id, void *pOut);</source>


=== sceKernelSysrootIsManufacturingModeForKernel ===
=== SceSysrootForKernel_2A03DFA1 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.740.011 || 0x55392965
| 3.60 || 0x2A03DFA1
|}
|}


This is a guessed name. Temp name was sceSysrootUseExternalStorageForKernel.
Calls the function registered by [[#SceSysrootForDriver_70AD47A9]].


When returns true it allows loading sd0:psp2config.skprx.
Used only in [[SceCoredump]].


Returns true when Manufacturing Mode flag is set:
<source lang="C">
// pOut: A buffer of at least 0xF8 bytes
int SceSysrootForKernel_2A03DFA1(void *pOut);
</source>


return (*(int *)(kbl_param->boot_type_indicator_1) >> 2) & 1;
=== sceKernelSysrootAppMgrSpawnProcessForKernel ===
 
<source lang="C">int sceKernelSysrootIsManufacturingModeForKernel(void);</source>
 
=== sceKernelSysrootUseInternalStorageForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x50FE3B4D
| 0.990-3.60 || 0x3ACACD22
|}
|}


Returns true when use internal storage flag is not set:
=== sceKernelSysrootGetCachedSecureModuleInfoForKernel ===
 
{| class="wikitable"
return *(char *)(kbl_param->boot_flags[5]) & 1 ^ 1;
|-
! Version !! NID
|-
| 3.60 || 0xF10AB792
|}


<source lang="C">int sceKernelSysrootUseInternalStorageForKernel(void);</source>
Temp name was sceKernelSysrootGetSmSelfInfoForKernel.


=== sceKernelSysrootGetThreadAccessLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
! Index !! SM SELF location
|-
|-
! Version !! NID
| 0 || os0:sm/gcauthmgr_sm.self
|-
| 1 || os0:sm/rmauth_sm.self
|-
|-
| 3.60 || 0x20009397
| 2 || os0:sm/encdec_w_portability_sm.self
|}
|}


Calls int (__cdecl *GetThreadAccessLevel)(); // 0x344 on 3.60
<source lang="C">int sceKernelSysrootGetCachedSecureModuleForKernel(SceCachedSecureModule id, SceCachedSecureModuleInfo *pInfo);</source>


<source lang="c">int sceKernelSysrootGetThreadAccessLevelForKernel(void);</source>
=== sceKernelSysrootGetProcessSelfAuthInfoForKernel ===
 
=== sceKernelSysrootAllocRemoteProcessHeapForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xD351EBC8
| 0.931-3.60 || 0x4F0A4066
|}
|}


Temp name was sceKernelAllocHeapMemoryForKernel.
Temp name was sceSysrootGetSelfAuthInfoForKernel.


Same as <code>sceKernelAllocHeapMemoryWithOptForDriver</code> but does set <code>pid</code> to 0x1000B.
<source lang="C">int sceKernelSysrootGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *pSelfAuthInfo);</source>


Checks that pid is 0x10013 or 0x10005 (kernel).
=== sceKernelSysrootGetProcessTitleIdForKernel ===
 
<source lang="C">void* sceKernelSysrootAllocRemoteProcessHeapForKernel(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
=== sceKernelSysrootGetModulePrivateForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x37EC12BB
| 3.60 || 0xEC3124A3
|}
|}


data : 3: system memory (0xDC-bytes), 7: some process data (?-bytes), 9: kbl module cb (0xAC-bytes)
Temp name was sceSysrootGetProcessTitleIdForPidForKernel.


<source lang="C">void *sceKernelSysrootGetModulePrivateForKernel(int idx);</source>
<source lang="C">int sceKernelSysrootGetProcessTitleIdForKernel(SceUID pid, char *title_id, SceSize len);</source>


=== sceKernelSysrootSetModulePrivateForKernel ===
=== sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x7A7E7C0C
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0xB39CD708
|}
|}


<source lang="C">void sceKernelSysrootSetModulePrivateForKernel(int idx, void *data);</source>
Registers the function called by [[#sceKernelSysrootGetFunctionNameByNIDForKernel]].
 
<source lang="c">int sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel(void *func);</source>


=== sceKernelSysrootSetSysrootForKernel ===
=== sceKernelSysrootGetFunctionNameByNIDForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.740.011 || 0x36916C30
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0x0B79E220
|}
|}


<source lang="C">void sceKernelSysrootSetSysrootForKernel(SceUID sysroot_uid);</source>
Mirror of [[SceSysLibTrace#sceNidsymtblGetFunctionNameByNIDForDriver]].
 
<source lang="c">int sceKernelSysrootGetFunctionNameByNIDForKernel(SceNID funcnid, const char **name);</source>


=== sceKernelSysrootProcessmgrStart2ForKernel ===
=== SceSysrootForKernel_26458702 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.011-3.740.011 || 0x62E8F511
| 0.931.010-2.060.011 || not present
|-
| 2.100.081-3.740.011 || 0x26458702
|}
|}


=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel ===
Registers some callbacks for example the fallback callback called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].
 
=== SceSysrootForKernel_B171CC2D ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.740.011 || 0x256B2394
| 0.931.010-2.060.011 || not present
|-
| 2.100.081-3.740.011 || 0xB171CC2D
|}
|}


<source lang="C">sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel(SceUID pid, SceUID modid, SceUInt32 stopReason, SceUInt64 time);</source>
Register some ModuleMgr handlers.
 
Used by [[SceKernelModulemgr]].
 
<source lang="C">int SceSysrootForKernel_B171CC2D(SceSysrootModulemgrHandlers *pHandlers);</source>


=== sceKernelSysrootSetIsUserModeThreadFuncForKernel ===
=== sceKernelSysrootGetProcessSyscallInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || 0x5BD911A8
| 3.60 || 0xFF9F80FF
|-
| 2.100.081-3.740.011 || not present
|}
|}


This is a guessed name.
<source lang="c">int sceKernelSysrootGetProcessSyscallInfoForKernel(SceUID pid, const void *PC, SceSyscallInfo *pInfo);</source>


This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].
=== sceKernelSysrootGetVbaseResetVectorForKernel ===
 
<source lang="C">int sceKernelSysrootSetIsUserModeThreadFuncForKernel(void *func);</source>
 
=== sceKernelSysrootIsUserModeThreadForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.011-3.740.011 || 0x7FC7A163
| 0.990-3.60 || 0xCC85905B
|}
|}


=== sceKernelSysrootGetSecureStatusForKernel ===
Returns the exception vectors base address. The address of the exception vectors for the CPU <code>i</code> is: <code>sceKernelSysrootGetVbaseResetVectorForKernel() + 0x40 * i</code>.
 
<source lang="C">void *sceKernelSysrootGetVbaseResetVectorForKernel(void);</source>
 
=== sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940 || 0x0A63CA5E
| 3.60 || 0x71DB83A2
|-
| 3.60 || not present
|}
|}


return *(uint *)some_buf->field_0x28 & 1;
Registers [[SceSblPostSsMgr#sceSblLicMgrGetLicenseStatusForDriver]].


<source lang="C">int sceKernelSysrootGetSecureStatusForKernel(void);</source>
<source lang="c">int sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel(int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)());</source>


=== sceKernelSysrootIsSecureStateForKernel ===
=== sceKernelSysrootLicMgrGetLicenseStatusForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940 || 0x3193DAB2
| 3.60 || 0x377895EB
|-
| 3.60 || not present
|}
|}


return (*(uint *)some_buf->field_0x28 ^ 1) & 1;
Called by [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel|sceSblAuthMgrAuthHeaderForKernel]] before Cmep request.


<source lang="C">SceBool sceKernelSysrootIsSecureStateForKernel(void);</source>
<source lang="C">int sceKernelSysrootLicMgrGetLicenseStatusForKernel(void);</source>


=== sceKernelSysrootIsColdBootForKernel ===
=== sceKernelSysrootGetSysrootForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0xD7198963
| 0.990.000-3.740.011 || 0x3E455842
|}
|}


return (*(uint *)some_buf->field_0x28 & 10; // FW 3.60 in IDA PRO
Temp name was sceKernelGetSysbaseForKernel.


return ((*(uint *)some_buf->field_0x28 ^ 0x10) << 0x1b) >> 0x1f; // FW 0.940 in Ghidra
Returns pointer to SceUIDSysrootObject in SceSysmem.


<source lang="C">int sceKernelSysrootIsColdBootForKernel(void);</source>
<source lang="C">SceUIDSysrootObject *sceKernelSysrootGetSysrootForKernel(void);</source>


== SceSysrootForDriver ==
=== sceKernelSysrootGetKblParamForKernel ===
 
=== SceSysrootForDriver_6219CC14 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.65 || 0x6219CC14
| 0.931-3.740.011 || 0x9DB56D1F
|}
|}


Used in [[SceUlobjMgr#SceUlobjMgrForDriver_332F2E58]].
Temp name was sceKernelGetSysrootBufferForKernel, sceSysrootGetSysrootBufferForKernel.
 
Returns pointer to [[KBL Param]].


<source lang="C">int SceSysrootForDriver_6219CC14(int a1, int a2, int a3, int a4, int a5);</source>
<source lang="C">SceKblParam *sceKernelSysrootGetKblParamForKernel(void);</source>


=== SceSysrootForDriver_F804F761 ===
=== sceKernelSysrootGetSoCRevisionForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.18 || not present
| 0.990.000-3.740.011 || 0xD3872270
|-
| 3.300.041-3.740.011 || 0xF804F761
|}
|}


Official name might be sceKernelSysrootHasSDCardSupportForDriver.
return pSysroot->soc_revision;


This function always returns <code>SCE_FALSE</code> on some release System Software versions, for example 3.500.000 and 3.600.011.
<source lang="C">int sceKernelSysrootGetSoCRevisionForKernel(void);</source>


Used in [[SceSdstor]] and [[SceVshBridge#vshSdGetCardInfo]].
=== sceKernelSysrootGetPervasiveUnkDwordForKernel ===
 
If this function returns <code>SCE_TRUE</code>, then <code>[[SceSdif#get_sd_context_part_validate_sd]](1)</code> is called.
 
<source lang="C">SceBool SceSysrootForDriver_F804F761(void);</source>
 
=== sceKernelSysrootSetVipRpcDebugFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xA6A0A038
| 0.990.000-3.740.011 || 0xFFD6E24D
|}
|}


This is a guessed name.
This is a guessed name.


<source lang="C">void sceKernelSysrootSetVipRpcDebugFuncForDriver(SceKernelSysrootVipRpcDebugFunc func);</source>
Returns value initially read from physical address 0xE3100004 (ScePervasiveMisc + 0x4).
 
return pSysroot->pervasive_unk_dword;
 
<source lang="C">int sceKernelSysrootGetPervasiveUnkDwordForKernel(void);</source>


=== sceKernelSysrootClearVipRpcDebugFuncForDriver ===
=== sceKernelSysrootGetKermitRevisionForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0ECD711E
| 0.990.000-3.740.011 || 0x403B509E
|}
|}


This is a guessed name.
return pSysroot->kermit_revision;
 
Used by [[SceKernelBusError]], [[SceSysStateMgr]].


<source lang="C">void sceKernelSysrootClearVipRpcDebugFuncForDriver();</source>
<source lang="C">
// Return value is 0x1FFFF-masked, at least on recent System Software versions.
SceUInt32 sceKernelSysrootGetKermitRevisionForKernel(void);
</source>


=== sceKernelSysrootGetVipRpcDebugFuncForDriver ===
=== sceKernelSysrootGetErnieSleepFactorForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x483EF108
| 0.996.090-3.740.011 || 0xAB3CC7D0
|}
|}


This is a guessed name.
This is a guessed name.


<source lang="C">SceKernelSysrootVipRpcDebugFunc sceKernelSysrootGetVipRpcDebugFuncForDriver();</source>
See [[KBL Param#Sleep Factor]].
 
return kbl_param->sleep_factor;
 
<source lang="C">int sceKernelSysrootGetErnieSleepFactorForKernel(void);</source>


=== sceKernelSysrootSetVeneziaRpcDebugFuncForDriver ===
=== sceKernelSysrootGetErnieWakeupFactorForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x47F19DD3
| 0.990.000-3.740.011 || 0x2F97041A
|}
|}


This is a guessed name.
This is the official name. Temp name was sceSysrootGetWakeupFactorForKernel.
 
See [[KBL Param#Wakeup Factor]].
 
return kbl_param->wakeup_factor;


<source lang="C">void sceKernelSysrootSetVeneziaRpcDebugFuncForDriver(SceKernelSysrootVeneziaRpcDebugFunc func);</source>
<source lang="C">int sceKernelSysrootGetErnieWakeupFactorForKernel(void);</source>


=== sceKernelSysrootClearVeneziaRpcDebugFuncForDriver ===
=== sceKernelSysrootGetSessionIdForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x5B106EB3
| 0.931.010-1.81 || not present
|-
| 2.000.081-3.740.011 || 0x84783B71
|}
|}


This is a guessed name.
Writes kbl_param->session_id to buffer.
 
pSessionId buffer size is 0x10 bytes.


<source lang="C">void sceKernelSysrootClearVeneziaRpcDebugFuncForDriver();</source>
<source lang="C">int sceKernelSysrootGetSessionIdForKernel(char *pSessionId);</source>


=== sceKernelSysrootGetVeneziaRpcDebugFuncForDriver ===
=== sceKernelSysrootIsExternalBootModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x49843C16
| 0.990.000-3.740.011 || 0x89D19090
|}
|}


This is a guessed name.
return *(int *)(kbl_param->boot_type_indicator_1) & 1;


<source lang="C">SceKernelSysrootVeneziaRpcDebugFunc sceKernelSysrootGetVeneziaRpcDebugFuncForDriver();</source>
<source lang="C">int sceKernelSysrootIsExternalBootModeForKernel(void);</source>


=== sceKernelApiDeclareErrorMsgForDriver ===
=== sceKernelSysrootIsSomeBootModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.65 || 0x8CD02748
| 0.990-0.996.090 || not present
|-
| 1.000.071-3.740.011 || 0x7B7F8171
|}
|}


=== sceKernelApiDeclareTypeRawForDriver ===
This is a guessed name. A possible name is sceKernelIsAllowSdCardFromMgmt.
 
Used by [[SceSdif]], [[SceExfatfs]].
 
[[SceExfatfs]] will mount sd0: instead of gro0:/grw0: when this function returns SCE_TRUE.
 
return (*(int *)(kbl_param->boot_type_indicator_1) >> 19) & 1;
 
Returns true if boot_type_indicator_1 has flag 0x80000 ?sd mode? - (Mgmt bit 1)
 
<source lang="C">int sceKernelSysrootIsSomeBootModeForKernel(void);</source>
 
=== sceKernelSysrootIsExternalBootMode2ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.65 || 0x8A760856
| 0.990.000-3.740.011 || 0x7918D44E
|}
|}


=== sceKernelApiDeclareTypeInt32ForDriver ===
This is a guessed name. Temp name was sceSysrootIsSomeBootMode2ForKernel. A possible name is sceKernelIsAllowFwCheckSkip.
 
return kbl_param->boot_type_indicator_1[2] & 1;
 
Return true if boot_type_indicator_1 has flag 0x10000 but it seems to be never set in external (release) second_loader. It allows to bypass current fw version check for module loading.
 
<source lang="C">int sceKernelSysrootIsExternalBootMode2ForKernel(void);</source>
 
=== sceKernelSysrootIsUartModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.65 || 0xD86BD6DC
| 0.931.010-3.740.011 || 0xAE7A8F1D
|}
|}


=== sceKernelApiDeclareTypeUInt32ForDriver ===
This is a guessed name. Temp name was sceSysrootIsSomeModeForKernel.
 
Returns true if (kbl_param->boot_flags[1] != 0xFF).
 
Used to check if UART must be initialized or not.
 
<source lang="C">int sceKernelSysrootIsUartModeForKernel(void);</source>
 
=== sceKernelSysrootIsSafeModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.65 || 0x6E0BC27C
| 0.990.000-3.740.011 || 0x834439A7
|}
|}


=== sceKernelApiDeclareTypeInt64ForDriver ===
<source lang="C">int sceKernelSysrootIsSafeModeForKernel(void);</source>
 
=== sceKernelSysrootIsUpdateModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.65 || 0x08B8F1D0
| 0.990.000-3.740.011 || 0xB0E1FC67
|}
|}


=== sceKernelApiDeclareTypeUInt64ForDriver ===
<source lang="C">int sceKernelSysrootIsUpdateModeForKernel(void);</source>
 
=== sceKernelSysrootIsBsodRebootForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931.010-2.060.011 || not present
|-
|-
| 3.60-3.65 || 0x2A5DBD38
| 2.100.081-3.740.011 || 0x4373AC96
|}
|}


Sets a value to 3.
return ((pKblParam->wakeup_factor) & 0x7Fu) == 0x17;


<source lang="C">void sceKernelApiDeclareTypeUInt64ForDriver(void);</source>
<source lang="C">int sceKernelSysrootIsBsodRebootForKernel(void);</source>


=== sceKernelSysrootGetTimebaseClockFrequencyForDriver ===
=== sceKernelSysrootIsUsbEnumWakeupForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.996.090-3.740.011 || 0x79C9AE10
|-
| 2.500.071-3.740.011 || 0xBFD8F2A2
|}
|}


Calls a function registered by [[#SceSysrootForDriver_C94C76FA]].
<source lang="C">
 
if ( *(int *)(kbl_param->unk_C0) & 0x90000 )
Used by [[SceGpuEs4]], only on DevKit.
  return 1;
else
  return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) == 0xF;
</source>


<source lang="C">SceUInt32 sceKernelSysrootGetTimebaseClockFrequencyForDriver(void);</source>
<source lang="C">int sceKernelSysrootIsUsbEnumWakeupForKernel(void);</source>


=== SceSysrootForDriver_C94C76FA ===
=== sceKernelSysrootIsUnknownRebootForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.360.011 || not present
| 0.931.010-2.060.011 || not present
|-
|-
| 3.500.011-3.740.011 || 0xC94C76FA
| 2.100.081-3.740.011 || 0xE4EA1960
|}
|}


Registers some Sysroot functions related to clock frequency.
return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) <= 1;


<source lang="C">int SceSysrootForDriver_C94C76FA(SceSysrootForDriver_C94C76FA_struct *pParam);</source>
<source lang="C">int sceKernelSysrootIsUnknownRebootForKernel(void);</source>


=== SceSysrootForDriver_2BE874EF ===
=== sceKernelSysrootIsManufacturingModeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.500.151-3.740.011 || 0x2BE874EF
| 0.940-3.740.011 || 0x55392965
|}
|}


Registers the function called by [[#SceSysrootForKernel_BF82931F]].
This is a guessed name. Temp name was sceSysrootUseExternalStorageForKernel.
 
When returns true it allows loading sd0:psp2config.skprx.
 
Returns true when Manufacturing Mode flag is set:


Used only in [[SceAppMgr]].
return (*(int *)(kbl_param->boot_type_indicator_1) >> 2) & 1;


<source lang="C">int SceSysrootForDriver_2BE874EF(void *func);</source>
<source lang="C">int sceKernelSysrootIsManufacturingModeForKernel(void);</source>


=== SceSysrootForDriver_3B19B06B ===
=== sceKernelSysrootUseInternalStorageForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.500.151-3.740.011 || 0x3B19B06B
| 3.60 || 0x50FE3B4D
|}
|}


Registers the function called by [[#SceSysrootForKernel_6D111FA7]].
Returns true when use internal storage flag is not set:


Used only in [[SceAppMgr]].
return *(char *)(kbl_param->boot_flags[5]) & 1 ^ 1;


<source lang="C">int SceSysrootForDriver_3B19B06B(void *func);</source>
<source lang="C">int sceKernelSysrootUseInternalStorageForKernel(void);</source>


=== SceSysrootForDriver_70AD47A9 ===
=== sceKernelSysrootGetThreadAccessLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.500.151-3.740.011 || 0x70AD47A9
| 3.60 || 0x20009397
|}
|}


Registers the function called by [[#SceSysrootForKernel_2A03DFA1]].
Calls int (__cdecl *GetThreadAccessLevel)(); // 0x344 on 3.60


Used only in [[SceAppMgr]].
<source lang="c">int sceKernelSysrootGetThreadAccessLevelForKernel(void);</source>


<source lang="C">int SceSysrootForDriver_70AD47A9(void *func);</source>
=== sceKernelSysrootAllocRemoteProcessHeapForKernel ===
 
=== SceSysrootForDriver_AA770EF7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.360.011 || not present
| 0.990-3.60 || 0xD351EBC8
|-
| 3.500.011-3.740.011 || 0xAA770EF7
|}
|}


Registers the function called by [[#SceSysrootForDriver_591BB490]].
Temp name was sceKernelAllocHeapMemoryForKernel.
 
Same as <code>sceKernelAllocHeapMemoryWithOptForDriver</code> but does set <code>pid</code> to 0x1000B.


The function is registered from [[SceTty2uart]] only if [[KBL Param|DIP Switch]] 211 is set.
Checks that pid is 0x10013 or 0x10005 (kernel).


<source lang="C">int SceSysrootForDriver_AA770EF7(void *func);</source>
<source lang="C">void* sceKernelSysrootAllocRemoteProcessHeapForKernel(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>


=== SceSysrootForDriver_591BB490 ===
=== sceKernelSysrootGetModulePrivateForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.360.011 || not present
| 0.990-3.60 || 0x37EC12BB
|-
| 3.500.011-3.740.011 || 0x591BB490
|}
|}


Calls the function registered by [[#SceSysrootForDriver_AA770EF7]].
data : 3: system memory (0xDC-bytes), 7: some process data (?-bytes), 9: kbl module cb (0xAC-bytes)


Gets tty2uart information into a 0x1000-sized buffer, similarly to [[#sceKernelGetTtyInfoForDriver]]. Returns some size, maybe size of the written tty2uart buffer.
<source lang="C">void *sceKernelSysrootGetModulePrivateForKernel(int idx);</source>


Used only in [[SceCoredump]].
=== sceKernelSysrootSetModulePrivateForKernel ===
 
<source lang="C">
// size: usually 0x1000
int SceSysrootForDriver_591BB490(int magic_or_size, void *pBuf, SceSize size);
</source>
 
=== SceSysrootForDriver_C5EAF5F7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xC5EAF5F7
| 0.990.000-3.740.011 || 0x7A7E7C0C
|}
|}


Registers the function called by [[#SceSysrootForDriver_47724459]].
<source lang="C">void sceKernelSysrootSetModulePrivateForKernel(int idx, void *data);</source>


<source lang="C">int SceSysrootForDriver_C5EAF5F7(void *func);</source>
=== sceKernelSysrootSetSysrootForKernel ===
 
=== SceSysrootForDriver_47724459 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x47724459
| 0.931.010-3.740.011 || 0x36916C30
|}
|}


Calls the function registered by [[#SceSysrootForDriver_C5EAF5F7]].
<source lang="C">void sceKernelSysrootSetSysrootForKernel(SceUID sysroot_uid);</source>


=== SceSysrootForDriver_D4457D4F ===
=== sceKernelSysrootProcessmgrStart2ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010 || not present
| 0.931.011-3.740.011 || 0x62E8F511
|-
| 0.990.000-3.740.011 || 0xD4457D4F
|}
|}


Registers the function called by [[#SceSysrootForDriver_40F28DC6]].
=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel ===
 
<source lang="C">int SceSysrootForDriver_D4457D4F(void *func);</source>
 
=== SceSysrootForDriver_40F28DC6 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.740.011 || 0x40F28DC6
| 0.940-3.740.011 || 0x256B2394
|}
|}


Calls the function registered by [[#SceSysrootForDriver_D4457D4F]].
<source lang="C">sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel(SceUID pid, SceUID modid, SceUInt32 stopReason, SceUInt64 time);</source>


=== sceKernelSysrootGetCompiledSdkVersionByPidForDriver ===
=== sceKernelSysrootSetIsUserModeThreadFuncForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.692.000 || not present
| 0.931.010-2.060.011 || 0x5BD911A8
|-
|-
| 1.800.071-3.740.011 || 0xCAE820B2
| 2.100.081-3.740.011 || not present
|}
|}


Temp name was sceKernelGetProcessHeapIDForDriver.
This is a guessed name.


Calls a callback registered by [[#SceSysrootForKernel_D29BCA77]].
This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].


Used in [[SceKernelModulemgr]] functions that load modules, for example [[SceKernelModulemgr#sceKernelStartModuleForPidForKernel]].
<source lang="C">int sceKernelSysrootSetIsUserModeThreadFuncForKernel(void *func);</source>


<source lang="C">int sceKernelSysrootGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);</source>
=== sceKernelSysrootIsUserModeThreadForKernel ===
 
=== SceSysrootForDriver_8747D415 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x8747D415
| 0.931.011-3.740.011 || 0x7FC7A163
|}
|}


Used by [[SceDeci4pSDfMgr]].
=== sceKernelSysrootGetSecureStatusForKernel ===
 
Registers the function called by [[#SceSysrootForDriver_B27B7530]].
 
<source lang="C">int SceSysrootForDriver_8747D415(void *func);</source>
 
=== SceSysrootForDriver_B27B7530 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xB27B7530
| 0.940 || 0x0A63CA5E
|-
| 3.60 || not present
|}
|}


Calls the function registered by [[#SceSysrootForDriver_8747D415]].
return *(uint *)some_buf->field_0x28 & 1;
 
<source lang="C">int sceKernelSysrootGetSecureStatusForKernel(void);</source>


=== sceKernelSysrootSetGetBuserrorDataFuncForDriver ===
=== sceKernelSysrootIsSecureStateForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x82FC6405
| 0.940 || 0x3193DAB2
|-
| 3.60 || not present
|}
|}


This is a guessed name.
return (*(uint *)some_buf->field_0x28 ^ 1) & 1;


Registers the function called by [[#sceKernelSysrootGetBuserrorDataForDriver]].
<source lang="C">SceBool sceKernelSysrootIsSecureStateForKernel(void);</source>


<source lang="C">int sceKernelSysrootSetGetBuserrorDataFuncForDriver(void *func);</source>
=== sceKernelSysrootIsColdBootForKernel ===
 
=== sceKernelSysrootGetBuserrorDataForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCD4B84F7
| 0.940-3.60 || 0xD7198963
|}
|}


This is a guessed name.
return (*(uint *)some_buf->field_0x28 & 10; // FW 3.60 in IDA PRO
 
return ((*(uint *)some_buf->field_0x28 ^ 0x10) << 0x1b) >> 0x1f; // FW 0.940 in Ghidra
 
<source lang="C">int sceKernelSysrootIsColdBootForKernel(void);</source>


Calls the function registered by [[#sceKernelSysrootSetGetBuserrorDataFuncForDriver]].
== SceSysrootForDriver ==


=== SceSysrootForDriver_FF2DD7AB ===
=== SceSysrootForDriver_4B8C305A ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFF2DD7AB
| ?3.60? || 0x4B8C305A
|}
|}


Registers something.
Variable of 12 bytes holding the AutoClockDown idle context.
 
Used by [[SceLowio]] for the [[SceLowio#AutoClockDown_idle_loop|AutoClockDown idle loop]].
 
See also: [[SceSysmem#sceKernelSysrootDisableAutoClockDownForDriver]], [[SceSysmem#sceKernelSysrootEnableAutoClockDownForDriver]].
 
<code>num_active_cores</code> is usually initialized to 0x4. However, if the console is in product mode (as per [[KBL_Param#Boot_type_indicator_1]]), then the initialization value is 0x14 instead, which disables the AutoClockDown.


<source lang="C">
<source lang="C">
typedef struct SceSysrootForDriver_FF2DD7AB_struct { // size is 0x1C on FW 3.60
struct low_power_idle_context {
  SceSize size; // Size of this structure
    /* backup of ScePervasiveBaseClk registers */
  char unk_4[0x18];
    uint32_t arm_baseclk_config[2];
} SceSysrootForDriver_FF2DD7AB_struct;
    /* counter used to clock down ARM when all cores are idle */
 
    uint32_t num_active_cores; // default: 4, AutoClockDown disabled: 0x14
int SceSysrootForDriver_FF2DD7AB(SceSysrootForDriver_FF2DD7AB_struct *pData);
};
</source>
</source>


=== SceSysrootForDriver_3AE319DA ===
=== SceSysrootForDriver_6219CC14 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3AE319DA
| 3.60-3.65 || 0x6219CC14
|}
|}


Used by [[SceSyscon]].
Used in [[SceUlobjMgr#SceUlobjMgrForDriver_332F2E58]].


Get something registered by [[#SceSysrootForDriver_FF2DD7AB]].
<source lang="C">int SceSysrootForDriver_6219CC14(int a1, int a2, int a3, int a4, int a5);</source>


<source lang="C">int SceSysrootForDriver_3AE319DA(void);</source>
=== SceSysrootForDriver_F804F761 ===
 
=== sceKernelSysrootGetHardwareFlagsForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x46E72428
| 0.931.010-3.18 || not present
|-
| 3.300.041-3.740.011 || 0xF804F761
|}
|}


This is a guessed name. Temp name was sceSysrootIsAuCodecIcConexantForDriver.
Official name might be sceKernelSysrootHasSDCardSupportForDriver.
 
This function always returns <code>SCE_FALSE</code> on some release System Software versions, for example 3.500.000 and 3.600.011.


Writes kbl_param->hardware_flags to buffer.
Used in [[SceSdstor]] and [[SceVshBridge#vshSdGetCardInfo]].


pFlags buffer size is 0x10 bytes.
If this function returns <code>SCE_TRUE</code>, then <code>[[SceSdif#get_sd_context_part_validate_sd]](1)</code> is called.


<source lang="C">int sceKernelSysrootGetHardwareFlagsForDriver(void *pFlags);</source>
<source lang="C">SceBool SceSysrootForDriver_F804F761(void);</source>


=== sceKernelSysrootGetHardwareInfoForDriver ===
=== sceKernelSysrootSetVipRpcDebugFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x930B1342
| 3.60 || 0xA6A0A038
|}
|}


return kbl_param->hardware_info;
This is a guessed name.


<source lang="C">int sceKernelSysrootGetHardwareInfoForDriver(void);</source>
<source lang="C">void sceKernelSysrootSetVipRpcDebugFuncForDriver(SceKernelSysrootVipRpcDebugFunc func);</source>


=== sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver ===
=== sceKernelSysrootClearVipRpcDebugFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE541959B
| 3.60 || 0x0ECD711E
|}
|}


<source lang="C">int sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver(void *func);</source>
This is a guessed name.


=== sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver ===
<source lang="C">void sceKernelSysrootClearVipRpcDebugFuncForDriver();</source>
 
=== sceKernelSysrootGetVipRpcDebugFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x9421B223
| 3.60 || 0x483EF108
|}
|}


<source lang="C">int sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver(void);</source>
This is a guessed name.
 
<source lang="C">SceKernelSysrootVipRpcDebugFunc sceKernelSysrootGetVipRpcDebugFuncForDriver();</source>


=== sceKernelSysrootSDfCtlSetBootParameterForDriver ===
=== sceKernelSysrootSetVeneziaRpcDebugFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7AAC4EE7
| 3.60 || 0x47F19DD3
|}
|}


<source lang="C">
This is a guessed name.
// bootparam max size is 0x80 bytes
 
int sceKernelSysrootSDfCtlSetBootParameterForDriver(const char *bootparam);
<source lang="C">void sceKernelSysrootSetVeneziaRpcDebugFuncForDriver(SceKernelSysrootVeneziaRpcDebugFunc func);</source>
</source>


=== sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver ===
=== sceKernelSysrootClearVeneziaRpcDebugFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x35875119
| 3.60 || 0x5B106EB3
|}
|}


Registers the function called by [[#sceKernelSysrootUtMgrGetTrilithiumBufferForDriver]].
This is a guessed name.


<source lang="C">int sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver(void *func);</source>
<source lang="C">void sceKernelSysrootClearVeneziaRpcDebugFuncForDriver();</source>


=== sceKernelSysrootUtMgrGetTrilithiumBufferForDriver ===
=== sceKernelSysrootGetVeneziaRpcDebugFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-3.01 || not present
| 3.60 || 0x49843C16
|-
| 3.180.011-3.740.011 || 0xD75D4F37
|}
|}


Used in [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel]] to overwrite fSELF authinfo.
This is a guessed name.


Returns 0 on success, 0x800f1a02 on error.
<source lang="C">SceKernelSysrootVeneziaRpcDebugFunc sceKernelSysrootGetVeneziaRpcDebugFuncForDriver();</source>


<source lang="C">int sceKernelSysrootUtMgrGetTrilithiumBufferForDriver(SceUtokenDecrypted *buffer);</source>
=== sceKernelApiDeclareErrorMsgForDriver ===
 
=== sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-1.06 || not present
| 3.65 || 0x8CD02748
|-
| 1.500.151-3.740.011 || 0xA12C9950
|}
|}


Registers the function called by [[#sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver]].
=== sceKernelApiDeclareTypeRawForDriver ===
 
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].
 
<source lang="C">int sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver(void *func);</source>
 
=== sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x56D85EB0
| 3.65 || 0x8A760856
|}
|}


Used by [[SceSblACMgr]].
=== sceKernelApiDeclareTypeInt32ForDriver ===
 
Calls the function registered by [[#sceKernelSysrootSetSceSblPostSsMgrForDriver_56D85EB0FuncForDriver]].
 
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].
 
=== sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-0.996 || not present
| 3.65 || 0xD86BD6DC
|-
| 1.000.071-3.740.011 || 0xE25D2FD5
|}
|}


Registers the functions called by [[#sceKernelSysrootSblUtMgrHasUNK1FlagForDriver]].
=== sceKernelApiDeclareTypeUInt32ForDriver ===
 
<source lang="C">int sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver(void *func);</source>
 
=== sceKernelSysrootSblUtMgrHasUNK1FlagForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-0.996 || not present
| 3.65 || 0x6E0BC27C
|}
 
=== sceKernelApiDeclareTypeInt64ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
|-
| 1.000.071-3.740.011 || 0x26AA237C
| 3.65 || 0x08B8F1D0
|}
|}


Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver]].
=== sceKernelApiDeclareTypeUInt64ForDriver ===
 
<source lang="C">int sceKernelSysrootSblUtMgrHasUNK1FlagForDriver(void);</source>
 
=== sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE2E88E3E
| 0.931-0.990 || not present
|-
| 3.60-3.65 || 0x2A5DBD38
|}
|}


Registers the function called by [[#sceKernelSysrootSblUtMgrHasUNK2FlagForDriver]].
Sets a value to 3.


<source lang="C">int sceKernelSysrootsceSetSblUtMgrHasUNK2FlagFuncForDriver(void *func);</source>
<source lang="C">void sceKernelApiDeclareTypeUInt64ForDriver(void);</source>


=== sceKernelSysrootSblUtMgrHasUNK2FlagForDriver ===
=== sceKernelSysrootGetTimebaseClockFrequencyForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE2515A08
| 0.931.010-2.060.011 || not present
|-
| 2.500.071-3.740.011 || 0xBFD8F2A2
|}
|}


Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver]].
Calls a function registered by [[#SceSysrootForDriver_C94C76FA]].


Used by [[SceSblACMgr#sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver]].
Used by [[SceGpuEs4]], only on DevKit.


<source lang="C">int sceKernelSysrootSblUtMgrHasUNK2FlagForDriver(void);</source>
<source lang="C">SceUInt32 sceKernelSysrootGetTimebaseClockFrequencyForDriver(void);</source>


=== sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver ===
=== SceSysrootForDriver_C94C76FA ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.18 || not present
| 0.931.010-3.360.011 || not present
|-
|-
| 3.300.041-3.740.011 || 0xEE5D6CE9
| 3.500.011-3.740.011 || 0xC94C76FA
|}
|}


<source lang="C">int sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver(void *func);</source>
Registers some Sysroot functions related to clock frequency.
 
<source lang="C">int SceSysrootForDriver_C94C76FA(SceSysrootForDriver_C94C76FA_struct *pParam);</source>


=== sceKernelSysrootUtMgrHasNpTestFlagForDriver ===
=== SceSysrootForDriver_2BE874EF ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.18 || not present
| 1.500.151-3.740.011 || 0x2BE874EF
|-
| 3.300.041-3.740.011 || 0xA43599E9
|}
|}


<source lang="c">int sceKernelSysrootUtMgrHasNpTestFlagForDriver(void);</source>
Registers the function called by [[#SceSysrootForKernel_BF82931F]].
 
Used only in [[SceAppMgr]].
 
<source lang="C">int SceSysrootForDriver_2BE874EF(void *func);</source>


=== SceSysrootForDriver_2D6B2A79 ===
=== SceSysrootForDriver_3B19B06B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x2D6B2A79
| 1.500.151-3.740.011 || 0x3B19B06B
|}
|}


Registers a function related to kernel panic, called by [[#SceSysrootForDriver_CC7A0E63]] or [[#SceSysrootForKernel_CC7A0E63]].
Registers the function called by [[#SceSysrootForKernel_6D111FA7]].
 
Used only in [[SceAppMgr]].
 
<source lang="C">int SceSysrootForDriver_3B19B06B(void *func);</source>


=== SceSysrootForDriver_CC7A0E63 ===
=== SceSysrootForDriver_70AD47A9 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCC7A0E63
| 1.500.151-3.740.011 || 0x70AD47A9
|}
|}


Calls a function related to kernel panic, registered by [[#SceSysrootForDriver_2D6B2A79]] or [[#SceSysrootForKernel_2D6B2A79]].
Registers the function called by [[#SceSysrootForKernel_2A03DFA1]].


<source lang="C">
Used only in [[SceAppMgr]].
// type: 1: kernel_assertion_or_panic, 3: kernel_exception
 
// size: must be <= 0x1000
<source lang="C">int SceSysrootForDriver_70AD47A9(void *func);</source>
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForDriver_CC7A0E63(int type, SceSize size, const char *pBuf);
</source>


=== sceKernelSysrootDisableAutoClockDownForDriver ===
=== SceSysrootForDriver_AA770EF7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 0.931.010-3.360.011 || not present
|-
|-
| 3.60 || 0xEE934615
| 3.500.011-3.740.011 || 0xAA770EF7
|}
|}


Derived from [[SceVshBridge#vshKernelDisableAutoClockDown]].
Registers the function called by [[#SceSysrootForDriver_591BB490]].


return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0x10);
The function is registered from [[SceTty2uart]] only if [[KBL Param|DIP Switch]] 211 is set.


Adds 0x10 from a SceSysmem global variable and returns it.
<source lang="C">int SceSysrootForDriver_AA770EF7(void *func);</source>


<source lang="C">int sceKernelSysrootDisableAutoClockDownForDriver(void);</source>
=== SceSysrootForDriver_591BB490 ===
 
=== sceKernelSysrootEnableAutoClockDownForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 0.931.010-3.360.011 || not present
|-
|-
| 3.60 || 0xEEF091A7
| 3.500.011-3.740.011 || 0x591BB490
|}
|}


Derived from [[SceVshBridge#vshKernelEnableAutoClockDown]].
Calls the function registered by [[#SceSysrootForDriver_AA770EF7]].


return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0xfffffff0);
Gets tty2uart information into a 0x1000-sized buffer, similarly to [[#sceKernelGetTtyInfoForDriver]]. Returns some size, maybe size of the written tty2uart buffer.


Subtracts 0x10 from a SceSysmem global variable and returns it.
Used only in [[SceCoredump]].


Used by SceCompat, ScePower, SceKernelDmacMgr, SceSblAuthMgr, SceSblSmschedProxy, SceSblSsSmComm.
<source lang="C">
// size: usually 0x1000
int SceSysrootForDriver_591BB490(int magic_or_size, void *pBuf, SceSize size);
</source>


<source lang="C">int sceKernelSysrootEnableAutoClockDownForDriver(void);</source>
=== SceSysrootForDriver_C5EAF5F7 ===
 
=== SceSysrootForDriver_6050A467 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x6050A467
| 0.990.000-3.740.011 || 0xC5EAF5F7
|}
|}


Debug related. Returns an error when called because there is no handler set for retail.
Registers the function called by [[#SceSysrootForDriver_47724459]].


<source lang="C">int SceSysrootForDriver_6050A467(SceUID pid);</source>
<source lang="C">int SceSysrootForDriver_C5EAF5F7(void *func);</source>


=== SceSysrootForDriver_F4340469 ===
=== SceSysrootForDriver_47724459 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF4340469
| 0.990.000-3.740.011 || 0x47724459
|}
|}


Coredump related. Called during process load. Something is same as in [[#SceSysrootForDriver_6050A467]].
Calls the function registered by [[#SceSysrootForDriver_C5EAF5F7]].


<source lang="C">int SceSysrootForDriver_F4340469(int something, SceUID pid, ...);</source>
=== SceSysrootForDriver_D4457D4F ===
 
=== sceKernelSysrootRegisterCoredumpTriggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xDD473B05
| 0.931.010 || not present
|-
| 0.990.000-3.740.011 || 0xD4457D4F
|}
|}


<source lang="C">int sceKernelSysrootRegisterCoredumpTriggerForDriver(void *func);</source>
Registers the function called by [[#SceSysrootForDriver_40F28DC6]].
 
<source lang="C">int SceSysrootForDriver_D4457D4F(void *func);</source>


=== sceKernelSysrootCoredumpTriggerForDriver ===
=== SceSysrootForDriver_40F28DC6 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCD8CD242
| 0.990-3.740.011 || 0x40F28DC6
|}
|}


Used by [[SceDeci4pDbgp]].
Calls the function registered by [[#SceSysrootForDriver_D4457D4F]].


<source lang="C">int sceKernelSysrootCoredumpTriggerForDriver(int a1, int a2, int a3, SceCoredumpForDriver_A7D214A7_Opt *pOpt);</source>
=== sceKernelSysrootGetCompiledSdkVersionByPidForDriver ===
 
=== sceKernelSysrootRegisterCoredumpCancelForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x400B9793
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0xCAE820B2
|}
|}


<source lang="C">int sceKernelSysrootRegisterCoredumpCancelForDriver(void *func);</source>
Temp name was sceKernelGetProcessHeapIDForDriver.
 
Calls a callback registered by [[#SceSysrootForKernel_D29BCA77]].


=== sceKernelSysrootCoredumpCancelForDriver ===
Used in [[SceKernelModulemgr]] functions that load modules, for example [[SceKernelModulemgr#sceKernelStartModuleForPidForKernel]].
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x80FBC69D
|}


<source lang="C">int sceKernelSysrootCoredumpCancelForDriver(int a1);</source>
<source lang="C">int sceKernelSysrootGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);</source>


=== sceKernelSysrootSetProcessHandlerForDriver ===
=== SceSysrootForDriver_8747D415 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.990-3.60 || 0x8747D415
|-
| 3.60 || 0x0F07C3FC
|}
|}


Registers some handlers.
Used by [[SceDeci4pSDfMgr]].
 
Registers the function called by [[#SceSysrootForDriver_B27B7530]].


<source lang="C">int sceKernelSysrootSetProcessHandlerForDriver(SceSysrootProcessHandler *pHandler);</source>
<source lang="C">int SceSysrootForDriver_8747D415(void *func);</source>


=== sceKernelSysrootClearProcessHandlerForDriver ===
=== SceSysrootForDriver_B27B7530 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.990-3.60 || 0xB27B7530
|-
| 3.60 || 0x5A7FFDC1
|}
|}


<source lang="C">void sceKernelSysrootClearProcessHandlerForDriver(void);</source>
Calls the function registered by [[#SceSysrootForDriver_8747D415]].


=== SceSysrootForDriver_421EFC96 ===
=== sceKernelSysrootSetGetBuserrorDataFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.692 || not present
| 0.990-3.60 || 0x82FC6405
|-
| 1.800.071-3.740.011 || 0x421EFC96
|}
|}


Calls SceSysrootProcessHandler's on_process_created.
This is a guessed name.


Used only by [[SceAppMgr]] and called on process creation.
Registers the function called by [[#sceKernelSysrootGetBuserrorDataForDriver]].


Hooked to make it return 0 (success) for example in:
<source lang="C">int sceKernelSysrootSetGetBuserrorDataFuncForDriver(void *func);</source>
* [https://github.com/henkaku/henkaku/blob/master/payload/payload.c#L423 HENkaku payload by Team Molecule]
* [https://github.com/TheOfficialFloW/update365/blob/2d175c3d2cb6618ba048aee5776acace68ac4493/installer/src/kernel.c#L1058 update365 by TheFloW]


<source lang="C">int SceSysrootForDriver_421EFC96(int maybe_pid, int maybe_modid, int a3);</source>
=== sceKernelSysrootGetBuserrorDataForDriver ===
 
=== sceKernelSysrootSWBkptGetOriginalOpcodeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x9CFF80F9
| 0.990-3.60 || 0xCD4B84F7
|}
|}


This is a guessed name.
This is a guessed name.


<source lang="C">int sceKernelSysrootSWBkptGetOriginalOpcodeForDriver(SceUID pid, void *address, SceUInt32 *opcode);</source>
Calls the function registered by [[#sceKernelSysrootSetGetBuserrorDataFuncForDriver]].


=== SceSysrootForDriver_571E5B79 ===
=== SceSysrootForDriver_FF2DD7AB ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x571E5B79
| 3.60 || 0xFF2DD7AB
|}
|}


Calls SceSysrootProcessHandler's unk_4.
Registers something.


=== SceSysrootForDriver_51F9C118 ===
<source lang="C">
{| class="wikitable"
typedef struct SceSysrootForDriver_FF2DD7AB_struct { // size is 0x1C on FW 3.60
|-
  SceSize size; // Size of this structure
! Version !! NID
  char unk_4[0x18];
|-
} SceSysrootForDriver_FF2DD7AB_struct;
| 3.60-3.65 || 0x51F9C118
|}


Calls SceSysrootProcessHandler's unk_18.
int SceSysrootForDriver_FF2DD7AB(SceSysrootForDriver_FF2DD7AB_struct *pData);
 
Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].
 
<source lang="C">
// a3: second argument of SceProcessmgrForKernel_8729DE79
int SceSysrootForDriver_51F9C118(SceUID pid, SceUID modid, int a3, void* maybe_process_info, SceUInt64 time);
</source>
</source>


=== SceSysrootForDriver_582616EC ===
=== SceSysrootForDriver_3AE319DA ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.65 || 0x582616EC
| 3.60 || 0x3AE319DA
|}
|}


Calls SceSysrootProcessHandler's unk_24.
Used by [[SceSyscon]].


Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].
Get something registered by [[#SceSysrootForDriver_FF2DD7AB]].


<source lang="C">
<source lang="C">int SceSysrootForDriver_3AE319DA(void);</source>
// a3: second argument of SceProcessmgrForKernel_8729DE79
int SceSysrootForDriver_582616EC(SceUID pid, SceUID modid, int a3);
</source>


=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForDriver ===
=== sceKernelSysrootGetHardwareFlagsForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x256B2394
| 3.60 || 0x46E72428
|}
|}


=== sceKernelSysrootGetShellPidForDriver ===
This is a guessed name. Temp name was sceSysrootIsAuCodecIcConexantForDriver.
 
Writes kbl_param->hardware_flags to buffer.
 
pFlags buffer size is 0x10 bytes.
 
<source lang="C">int sceKernelSysrootGetHardwareFlagsForDriver(void *pFlags);</source>
 
=== sceKernelSysrootGetHardwareInfoForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x05093E7B
| 3.60 || 0x930B1342
|}
|}


<source lang="C">SceUID sceKernelSysrootGetShellPidForDriver(void);</source>
return kbl_param->hardware_info;
 
<source lang="C">int sceKernelSysrootGetHardwareInfoForDriver(void);</source>


=== sceKernelSysrootAppMgrSpawnProcessForDriver ===
=== sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x3ACACD22
| 3.60 || 0xE541959B
|}
|}


=== sceKernelSysrootInformUpdateStartedForDriver ===
<source lang="C">int sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver(void *func);</source>
 
=== sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x9A486846
| 3.60 || 0x9421B223
|}
|}


<source lang="C">int sceKernelSysrootInformUpdateStartedForDriver(int number1, int number2, const char *str, SceSize len);</source>
<source lang="C">int sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver(void);</source>


=== sceKernelSysrootInformUpdateOngoingForDriver ===
=== sceKernelSysrootSDfCtlSetBootParameterForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x9EC02A41
| 3.60 || 0x7AAC4EE7
|}
|}


<source lang="C">int sceKernelSysrootInformUpdateOngoingForDriver(int number1, int number2);</source>
<source lang="C">
// bootparam max size is 0x80 bytes
int sceKernelSysrootSDfCtlSetBootParameterForDriver(const char *bootparam);
</source>


=== sceKernelSysrootInformUpdateFinishedForDriver ===
=== sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x217B2871
| 3.60 || 0x35875119
|}
|}


<source lang="C">int sceKernelSysrootInformUpdateFinishedForDriver(int number, const char *str, SceSize len);</source>
Registers the function called by [[#sceKernelSysrootUtMgrGetTrilithiumBufferForDriver]].
 
<source lang="C">int sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver(void *func);</source>


=== sceKernelSysrootSetSwInfoIntForDriver ===
=== sceKernelSysrootUtMgrGetTrilithiumBufferForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x631141E2
| 0.931.010-3.01 || not present
|-
| 3.180.011-3.740.011 || 0xD75D4F37
|}
|}


<source lang="C">int sceKernelSysrootSetSwInfoIntForDriver(char *str, SceSize len, SceUInt32 number);</source>
Used in [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel]] to overwrite fSELF authinfo.
 
Returns 0 on success, 0x800f1a02 on error.
 
<source lang="C">int sceKernelSysrootUtMgrGetTrilithiumBufferForDriver(SceUtokenDecrypted *buffer);</source>


=== sceKernelSysrootSetSwInfoStrForDriver ===
=== sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x17DD213C
| 0.931.010-1.06 || not present
|-
| 1.500.151-3.740.011 || 0xA12C9950
|}
|}


<source lang="C">int sceKernelSysrootSetSwInfoStrForDriver(char *str1, SceSize len1, char *str2, SceSize len2);</source>
Registers the function called by [[#sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver]].
 
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].
 
<source lang="C">int sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver(void *func);</source>


=== sceKernelSysrootSetSwInfoBinForDriver ===
=== sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x9E96D990
| 3.60 || 0x56D85EB0
|}
|}


<source lang="C">int sceKernelSysrootSetSwInfoBinForDriver(char *str1, SceSize size1, char *str2, SceSize size2);</source>
Used by [[SceSblACMgr]].
 
Calls the function registered by [[#sceKernelSysrootSetSceSblPostSsMgrForDriver_56D85EB0FuncForDriver]].
 
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].


=== sceKernelSysrootSetGetSystemSwVersionFuncForDriver ===
=== sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3276086B
| 0.931.010-0.996 || not present
|-
| 1.000.071-3.740.011 || 0xE25D2FD5
|}
|}


Temp name was sceKernelSysrootSetSystemSwVersionForDriver.
Registers the functions called by [[#sceKernelSysrootSblUtMgrHasUNK1FlagForDriver]].


Used by [[SceSblUpdateMgr]].
<source lang="C">int sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver(void *func);</source>


<source lang="c">void sceKernelSysrootSetGetSystemSwVersionFuncForDriver(void *func);</source>
=== sceKernelSysrootSblUtMgrHasUNK1FlagForDriver ===
 
=== sceKernelSysrootGetSystemSwVersionForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.65 || 0x67AAB627
| 0.931.010-0.996 || not present
|-
| 1.000.071-3.740.011 || 0x26AA237C
|}
|}


Returns System Software version as int from SceSysmem memory. For exemple: 0x0365000 on 3.65.
Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver]].


<source lang="c">int sceKernelSysrootGetSystemSwVersionForDriver(void);</source>
<source lang="C">int sceKernelSysrootSblUtMgrHasUNK1FlagForDriver(void);</source>


=== sceKernelSysrootIsSafeModeForDriver ===
=== sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x834439A7
| 3.60 || 0xE2E88E3E
|}
|}


<source lang="C">int sceKernelSysrootIsSafeModeForDriver(void);</source>
Registers the function called by [[#sceKernelSysrootSblUtMgrHasUNK2FlagForDriver]].
 
<source lang="C">int sceKernelSysrootsceSetSblUtMgrHasUNK2FlagFuncForDriver(void *func);</source>


=== sceKernelSysrootIsUpdateModeForDriver ===
=== sceKernelSysrootSblUtMgrHasUNK2FlagForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB0E1FC67
| 3.60 || 0xE2515A08
|}
|}


<source lang="C">int sceKernelSysrootIsUpdateModeForDriver(void);</source>
Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver]].
 
Used by [[SceSblACMgr#sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver]].
 
<source lang="C">int sceKernelSysrootSblUtMgrHasUNK2FlagForDriver(void);</source>


=== sceKernelSysrootGetModelInfoForDriver ===
=== sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 0.931-3.18 || not present
|-
|-
| 3.60 || 0x4D98B15B
| 3.300.041-3.740.011 || 0xEE5D6CE9
|}
|}


This is a guessed name, based on "sysroot->model_info".
<source lang="C">int sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver(void *func);</source>


Returns sysroot->model_info.
=== sceKernelSysrootUtMgrHasNpTestFlagForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.18 || not present
|-
| 3.300.041-3.740.011 || 0xA43599E9
|}


Used only in [[SceProcessmgr]] initializeBudget() on module start. According to model_info, ScePhyMemPartShell is allocated with different parameters.
<source lang="c">int sceKernelSysrootUtMgrHasNpTestFlagForDriver(void);</source>


<source lang="C">SceUInt32 sceKernelSysrootGetModelInfoForDriver(void);</source>
=== SceSysrootForDriver_2D6B2A79 ===
 
=== SceSysrootForDriver_ED688AEE ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.990-3.60 || 0x2D6B2A79
|-
| 2.100.081-3.740.011 || 0xED688AEE
|}
|}


Registers the callback called by [[#SceSysrootForDriver_F404026C]].
Registers a function related to kernel panic, called by [[#SceSysrootForDriver_CC7A0E63]] or [[#SceSysrootForKernel_CC7A0E63]].


<source lang="C">SceSysrootForDriver_ED688AEE(void* cb);</source>
=== SceSysrootForDriver_CC7A0E63 ===
 
=== SceSysrootForDriver_F404026C ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.990-3.60 || 0xCC7A0E63
|-
| 2.100.081-3.740.011 || 0xF404026C
|}
|}


Calls the callback registered by [[#SceSysrootForDriver_ED688AEE]].
Calls a function related to kernel panic, registered by [[#SceSysrootForDriver_2D6B2A79]] or [[#SceSysrootForKernel_2D6B2A79]].
 
<source lang="C">
// type: 1: kernel_assertion_or_panic, 3: kernel_exception
// size: must be <= 0x1000
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForDriver_CC7A0E63(int type, SceSize size, const char *pBuf);
</source>


=== sceKernelSysrootCheckModelCapabilityForDriver ===
=== sceKernelSysrootDisableAutoClockDownForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.931 || not present
|-
|-
| 2.100.081-3.740.011 || 0x8AA268D6
| 3.60 || 0xEE934615
|}
|}


This is an official name. Name derived from [[#sceKernelSysrootCheckModelCapability]].
Derived from [[SceVshBridge#vshKernelDisableAutoClockDown]].
 
Atomically adds 0x10 to [[SceSysmem#SceSysrootForDriver_4B8C305A|<code>SceSysrootForDriver_4B8C305A.num_active_cores</code>]].


Each model capability corresponds to a bit in a Sysroot field derived from Syscon [[KBL_Param#Hardware_Info|Hardware Info]] and [[KBL_Param#Hardware_Info_2|Hardware Info 2]].
The correct return type may be <code>void</code> instead (currently, return value is the incremented <code>num_active_cores</code>).


Model capabilities:
<source lang="C">int sceKernelSysrootDisableAutoClockDownForDriver(void);</source>
* 0: unknown
* 1: Multi-controllers support
* 2: unknown
* 4: unknown
* 5: unknown
* 6: unknown
* 7: unknown, ?OLED display?
* 8: unknown, ?LCD display?
* 9: unknown, set on almost all models
* 10: unknown
* 11: SD card support
* 12: unknown
* 13: unknown


=== sceKernelSysrootEnableAutoClockDownForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Case !! Model !! Model capabilities (raw) !! Model capabilities (bits set)
! Version !! NID
|-
|-
| ErnieHwInfo & 0xFF0000 <= 0x410000 / Unknown Model || 0x10100 || 0x604 || 2, 9, 10
| 0.931 || not present
|-
|-
| ErnieHwInfo & 0xFF0000 == 0x510000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12
| 3.60 || 0xEEF091A7
|-
| ErnieHwInfo & 0xFF0000 == 0x600000 || 0x10150 || 0x604 || 2, 9, 10
|-
| ErnieHwInfo & 0xFF0000 == 0x700000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12
|-
| ErnieHwInfo & 0xFF0000 == 0x720000 || 0x20110 || 0x232 || 1, 4, 5, 9
|-
| ErnieHwInfo & 0xFF0000 == 0x800000 || 0x10200 || 0x604 || 2, 9, 10
|-
| ErnieHwInfo & 0xFF0000 == 0x820000 || 0x10220 || 0x604 || 2, 9, 10
|-
| PDEL-10xx in PS TV Emulation mode || 0x20101 || 0x252 || 1, 4, 6, 9
|-
| (ErnieHwInfo2 & 0x9 == 0) && PSTV or PSTVEmu || - || 0x80 || 7
|-
| ErnieHwInfo2 & 0x9 != 0 || - || 0x100 || 8
|-
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 != 0) || - || 0x1000 || 12
|-
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 == 0) || - || & ~0x1000 || UNSET 12
|-
| ErnieHwInfo2 & 0x200 != 0 || - || 0x2000 || 13
|}
|}


Used in [[SceCtrl]], [[SceSdstor]], [[SceUsbEtherRtl]] and [[SceVshBridge]].
Derived from [[SceVshBridge#vshKernelEnableAutoClockDown]].
 
Atomically substracts 0x10 from [[SceSysmem#SceSysrootForDriver_4B8C305A|<code>SceSysrootForDriver_4B8C305A.num_active_cores</code>]].
 
The correct return type may be <code>void</code> instead (currently, return value is the decremented <code>num_active_cores</code>).
 
Used by [[SceCompat]], [[ScePower]], [[SceKernelDmacMgr]], [[SceSblAuthMgr]], [[SceSblSmschedProxy]], [[SceSblSsSmComm]].


<source lang="C">int sceKernelSysrootCheckModelCapabilityForDriver(int capability);</source>
<source lang="C">int sceKernelSysrootEnableAutoClockDownForDriver(void);</source>


=== sceKernelSysrootGetSyscallFrameForDriver ===
=== SceSysrootForDriver_6050A467 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60-3.65 || 0x44EA3197
| 3.60 || 0x6050A467
|}
|}


<source lang="C">SceSyscallFrame *sceKernelSysrootGetSyscallFrameForDriver(void);</source>
Debug related. Returns an error when called because there is no handler set for retail.
 
<source lang="C">int SceSysrootForDriver_6050A467(SceUID pid);</source>


=== sceKernelSysrootRegisterInitCallbackForDriver ===
=== SceSysrootForDriver_F4340469 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x778D0966
| 3.60 || 0xF4340469
|}
|}


<source lang="C">
Coredump related. Called during process load. Something is same as in [[#SceSysrootForDriver_6050A467]].
// idx: 0-8
 
// idx 8: func = ScePower/SceMsif functions
<source lang="C">int SceSysrootForDriver_F4340469(int something, SceUID pid, ...);</source>
int sceKernelSysrootRegisterInitCallbackForDriver(const void *func, SceUInt32 idx, SceUInt32 arg, SceUInt32 *ret);
</source>


=== sceKernelSysrootInvokeInitCallbackForDriver ===
=== sceKernelSysrootRegisterCoredumpTriggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x93CD44CD
| 0.990-3.60 || 0xDD473B05
|}
|}


<source lang="C">
<source lang="C">int sceKernelSysrootRegisterCoredumpTriggerForDriver(void *func);</source>
// idx: 0-8, 5: disable NSKBL, more...?
int sceKernelSysrootInvokeInitCallbackForDriver(int idx);
</source>


=== sceKernelSysrootInvokeInitCallbackExForDriver ===
=== sceKernelSysrootCoredumpTriggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.990-3.60 || 0xCD8CD242
|-
| 0.990-3.60 || 0x7C2C10E2
|}
|}


This is a guessed name.
Used by [[SceDeci4pDbgp]].
 
<source lang="C">int sceKernelSysrootCoredumpTriggerForDriver(int a1, int a2, int a3, SceCoredumpForDriver_A7D214A7_Opt *pOpt);</source>


<source lang="C">
=== sceKernelSysrootRegisterCoredumpCancelForDriver ===
// idx: 0-8, 5: disable NSKBL, more...?
// unk: argument passed to the init callback
int sceKernelSysrootInvokeInitCallbackExForDriver(int idx, int unk);
</source>
 
== SceKernelUtilsForDriver ==
 
=== sceAesDecrypt1ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xD8678061
| 0.990-3.60 || 0x400B9793
|}
|}


Perform normal AES decrypt.
<source lang="C">int sceKernelSysrootRegisterCoredumpCancelForDriver(void *func);</source>


<source lang="c">int sceAesDecrypt1ForDriver(void *ctx, const void *src, void *dst);</source>
=== sceKernelSysrootCoredumpCancelForDriver ===
 
=== sceAesDecrypt2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE39CD272
| 0.990-3.60 || 0x80FBC69D
|}
|}


Perform AES decrypt using encryption round key.
<source lang="C">int sceKernelSysrootCoredumpCancelForDriver(int a1);</source>


<source lang="c">int sceAesDecrypt2ForDriver(void *ctx, const void *src, void *dst);</source>
=== sceKernelSysrootSetProcessHandlerForDriver ===
 
=== sceAesEncrypt1ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xC2A61770
| 0.931-0.990 || not present
|-
| 3.60 || 0x0F07C3FC
|}
|}


Perform AES encrypt. There are two functions that are the same on 1.69.
Registers some handlers.


<source lang="c">int sceAesEncrypt1ForDriver(void *ctx, const void *src, void *dst);</source>
<source lang="C">int sceKernelSysrootSetProcessHandlerForDriver(SceSysrootProcessHandler *pHandler);</source>


=== sceAesEncrypt2ForDriver ===
=== sceKernelSysrootClearProcessHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x302947B6
| 0.931-0.990 || not present
|-
| 3.60 || 0x5A7FFDC1
|}
|}


Perform AES encrypt. Similar to sceAesEncrypt1ForDriver.
<source lang="C">void sceKernelSysrootClearProcessHandlerForDriver(void);</source>


<source lang="c">int sceAesEncrypt2ForDriver(void *ctx, const void *src, void *dst);</source>
=== SceSysrootForDriver_421EFC96 ===
 
=== sceAesInit1ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xF12B6451
| 0.931-1.692 || not present
|-
| 1.800.071-3.740.011 || 0x421EFC96
|}
|}


This sets up the AES engine. <code>ctx</code> is a 0x3C0 byte buffer (on FW 1.69). <code>blocksize</code> and <code>keysize</code> values are in bits. 128/196/256 are supported values.
Calls SceSysrootProcessHandler's on_process_created.
 
Used only by [[SceAppMgr]] and called on process creation.


last arg to subroutine is 0
Hooked to make it return 0 (success) for example in:
* [https://github.com/henkaku/henkaku/blob/master/payload/payload.c#L423 HENkaku payload by Team Molecule]
* [https://github.com/TheOfficialFloW/update365/blob/2d175c3d2cb6618ba048aee5776acace68ac4493/installer/src/kernel.c#L1058 update365 by TheFloW]


<source lang="c">int sceAesInit1ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source>
<source lang="C">int SceSysrootForDriver_421EFC96(int maybe_pid, int maybe_modid, int a3);</source>


=== sceAesInit2ForDriver ===
=== sceKernelSysrootSWBkptGetOriginalOpcodeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEDA97D6D
| 0.990.000-3.740.011 || 0x9CFF80F9
|}
|}


last arg to subroutine is 1
This is a guessed name.


<source lang="c">int sceAesInit2ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source>
<source lang="C">int sceKernelSysrootSWBkptGetOriginalOpcodeForDriver(SceUID pid, void *address, SceUInt32 *opcode);</source>


=== sceAesInit3ForDriver ===
=== SceSysrootForDriver_571E5B79 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x72408E29
| 0.990.000-3.740.011 || 0x571E5B79
|}
|}


last arg to subroutine is 2
Calls SceSysrootProcessHandler's unk_4.


<source lang="c">int sceAesInit3ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source>
=== SceSysrootForDriver_51F9C118 ===
 
{| class="wikitable"
=== SceKernelUtilsForDriver_C76A7685 ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC76A7685
| 3.60-3.65 || 0x51F9C118
|}
|}


Looks like it relates to AES InvMixColumns.
Calls SceSysrootProcessHandler's unk_18.
 
Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].
 
<source lang="C">
// a3: second argument of SceProcessmgrForKernel_8729DE79
int SceSysrootForDriver_51F9C118(SceUID pid, SceUID modid, int a3, void* maybe_process_info, SceUInt64 time);
</source>


=== SceKernelUtilsForDriver_60ED6EA9 ===
=== SceSysrootForDriver_582616EC ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x60ED6EA9
| 3.60-3.65 || 0x582616EC
|}
|}


Equivalent to AES getSBox32Value
Calls SceSysrootProcessHandler's unk_24.
 
Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].
 
<source lang="C">
// a3: second argument of SceProcessmgrForKernel_8729DE79
int SceSysrootForDriver_582616EC(SceUID pid, SceUID modid, int a3);
</source>


=== sceDeflateDecompressForDriver ===
=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x8AF1FAD4
| 0.990-3.60 || 0x256B2394
|}
|}


=== sceDeflateDecompressPartialForDriver ===
=== sceKernelSysrootGetShellPidForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3D74CCDF
| 0.990-3.60 || 0x05093E7B
|}
|}


=== sceGzipDecompressForDriver ===
<source lang="C">SceUID sceKernelSysrootGetShellPidForDriver(void);</source>
 
=== sceKernelSysrootAppMgrSpawnProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x367EE3DF
| 0.990-3.60 || 0x3ACACD22
|}
|}


=== sceGzipGetCommentForDriver ===
=== sceKernelSysrootInformUpdateStartedForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xCD3AE08F
| 0.990-3.60 || 0x9A486846
|}
|}


=== sceGzipGetCompressedDataForDriver ===
<source lang="C">int sceKernelSysrootInformUpdateStartedForDriver(int number1, int number2, const char *str, SceSize len);</source>
 
=== sceKernelSysrootInformUpdateOngoingForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x63619124
| 0.990-3.60 || 0x9EC02A41
|}
|}


=== sceGzipGetInfoForDriver ===
<source lang="C">int sceKernelSysrootInformUpdateOngoingForDriver(int number1, int number2);</source>
 
=== sceKernelSysrootInformUpdateFinishedForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFFC6A10F
| 0.990-3.60 || 0x217B2871
|}
|}


=== sceGzipGetNameForDriver ===
<source lang="C">int sceKernelSysrootInformUpdateFinishedForDriver(int number, const char *str, SceSize len);</source>
 
=== sceKernelSysrootSetSwInfoIntForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF901FD3E
| 0.990-3.60 || 0x631141E2
|}
|}


=== sceGzipIsValidForDriver ===
<source lang="C">int sceKernelSysrootSetSwInfoIntForDriver(char *str, SceSize len, SceUInt32 number);</source>
 
=== sceKernelSysrootSetSwInfoStrForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD8FAEFD4
| 0.990-3.60 || 0x17DD213C
|}
|}


=== sceHmacSha1DigestForDriver ===
<source lang="C">int sceKernelSysrootSetSwInfoStrForDriver(char *str1, SceSize len1, char *str2, SceSize len2);</source>
 
=== sceKernelSysrootSetSwInfoBinForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x29A28957
| 0.990-3.60 || 0x9E96D990
|}
|}


<source lang="C">int sceHmacSha1DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source>
<source lang="C">int sceKernelSysrootSetSwInfoBinForDriver(char *str1, SceSize size1, char *str2, SceSize size2);</source>


=== sceHmacSha224DigestForDriver ===
=== sceKernelSysrootSetGetSystemSwVersionFuncForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7F2A7B99
| 3.60 || 0x3276086B
|}
|}


<source lang="C">int sceHmacSha224DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source>
Temp name was sceKernelSysrootSetSystemSwVersionForDriver.
 
Used by [[SceSblUpdateMgr]].
 
<source lang="c">void sceKernelSysrootSetGetSystemSwVersionFuncForDriver(void *func);</source>


=== sceHmacSha256DigestForDriver ===
=== sceKernelSysrootGetSystemSwVersionForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x83EFA1CC
| 3.60-3.65 || 0x67AAB627
|}
|}


<source lang="C">int sceHmacSha256DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source>
Returns System Software version as int from SceSysmem memory. For exemple: 0x0365000 on 3.65.
 
<source lang="c">int sceKernelSysrootGetSystemSwVersionForDriver(void);</source>


=== sceMt19937GlobalInitForDriver ===
=== sceKernelSysrootIsSafeModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD428CC2A
| 0.990-3.60 || 0x834439A7
|}
|}


cp_timestamp_2 is gotten from SceKblParam.
<source lang="C">int sceKernelSysrootIsSafeModeForDriver(void);</source>


<source lang="C">int sceMt19937GlobalInitForDriver(uint32_t cp_timestamp_2);</source>
=== sceKernelSysrootIsUpdateModeForDriver ===
 
=== sceMt19937GlobalUIntInRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x875B2A1C
| 3.60 || 0xB0E1FC67
|}
|}


Temp name was sceMt19937GlobalUninitForDriver.
<source lang="C">int sceKernelSysrootIsUpdateModeForDriver(void);</source>


<source lang="C">
=== sceKernelSysrootGetModelInfoForDriver ===
// Both the address and size must be aligned on four bytes.
int sceMt19937GlobalUIntInRangeForDriver(void *pBase, SceSize length);
</source>
 
=== sceMt19937InitForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4C9A5730
| 0.931 || not present
|-
| 3.60 || 0x4D98B15B
|}
|}


=== sceMt19937UIntForDriver ===
This is a guessed name, based on "sysroot->model_info".
 
Returns sysroot->model_info.
 
Used only in [[SceProcessmgr]] initializeBudget() on module start. According to model_info, ScePhyMemPartShell is allocated with different parameters.
 
<source lang="C">SceUInt32 sceKernelSysrootGetModelInfoForDriver(void);</source>
 
=== SceSysrootForDriver_ED688AEE ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x92AEDFBC
| 0.931.010-2.060.011 || not present
|-
| 2.100.081-3.740.011 || 0xED688AEE
|}
|}


=== sceSfmt19937FillArray32ForDriver ===
Registers the callback called by [[#SceSysrootForDriver_F404026C]].
 
<source lang="C">SceSysrootForDriver_ED688AEE(void* cb);</source>
 
=== SceSysrootForDriver_F404026C ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2B30548B
| 0.931.010-2.060.011 || not present
|-
| 2.100.081-3.740.011 || 0xF404026C
|}
|}


=== sceSfmt19937FillArray64ForDriver ===
Calls the callback registered by [[#SceSysrootForDriver_ED688AEE]].
 
=== sceKernelSysrootCheckModelCapabilityForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x49B41540
| 0.931.010-2.060.011 || not present
|-
| 2.100.081-3.740.011 || 0x8AA268D6
|}
|}


=== sceSfmt19937GenRand32ForDriver ===
This is an official name. Name derived from [[#sceKernelSysrootCheckModelCapability]].
 
Each model capability corresponds to a bit in a Sysroot field derived from Syscon [[KBL_Param#Hardware_Info|Hardware Info]] and [[KBL_Param#Hardware_Info_2|Hardware Info 2]].
 
Model capabilities:
* 0: unknown
* 1: Multi-controllers support
* 2: unknown
* 4: unknown
* 5: unknown
* 6: unknown
* 7: unknown, ?OLED display?
* 8: unknown, ?LCD display?
* 9: unknown, set on almost all models
* 10: unknown
* 11: SD card support
* 12: unknown
* 13: unknown
 
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Case !! Model !! Model capabilities (raw) !! Model capabilities (bits set)
|-
| ErnieHwInfo & 0xFF0000 <= 0x410000 / Unknown Model || 0x10100 || 0x604 || 2, 9, 10
|-
| ErnieHwInfo & 0xFF0000 == 0x510000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12
|-
| ErnieHwInfo & 0xFF0000 == 0x600000 || 0x10150 || 0x604 || 2, 9, 10
|-
| ErnieHwInfo & 0xFF0000 == 0x700000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12
|-
| ErnieHwInfo & 0xFF0000 == 0x720000 || 0x20110 || 0x232 || 1, 4, 5, 9
|-
| ErnieHwInfo & 0xFF0000 == 0x800000 || 0x10200 || 0x604 || 2, 9, 10
|-
| ErnieHwInfo & 0xFF0000 == 0x820000 || 0x10220 || 0x604 || 2, 9, 10
|-
| PDEL-10xx in PS TV Emulation mode || 0x20101 || 0x252 || 1, 4, 6, 9
|-
| (ErnieHwInfo2 & 0x9 == 0) && PSTV or PSTVEmu || - || 0x80 || 7
|-
| ErnieHwInfo2 & 0x9 != 0 || - || 0x100 || 8
|-
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 != 0) || - || 0x1000 || 12
|-
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 == 0) || - || & ~0x1000 || UNSET 12
|-
|-
| 3.60 || 0xBBE4701A
| ErnieHwInfo2 & 0x200 != 0 || - || 0x2000 || 13
|}
|}


=== sceSfmt19937GenRand64ForDriver ===
Used in [[SceCtrl]], [[SceSdstor]], [[SceUsbEtherRtl]] and [[SceVshBridge]].
 
<source lang="C">int sceKernelSysrootCheckModelCapabilityForDriver(int capability);</source>
 
=== sceKernelSysrootGetSyscallFrameForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x45DEAAD6
| 3.60-3.65 || 0x44EA3197
|}
|}


=== sceSfmt19937InitByArrayForDriver ===
<source lang="C">SceSyscallFrame *sceKernelSysrootGetSyscallFrameForDriver(void);</source>
 
=== sceKernelSysrootRegisterInitCallbackForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x33AE1203
| 0.990-3.60 || 0x778D0966
|}
|}


=== sceSfmt19937InitGenRandForDriver ===
<source lang="C">
// idx: 0-8
// idx 8: func = ScePower/SceMsif functions
int sceKernelSysrootRegisterInitCallbackForDriver(const void *func, SceUInt32 idx, SceUInt32 arg, SceUInt32 *ret);
</source>
 
=== sceKernelSysrootInvokeInitCallbackForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xAB48C3CA
| 0.990-3.60 || 0x93CD44CD
|}
|}


=== sceSha1BlockInitForDriver ===
<source lang="C">
// idx: 0-8, 5: disable NSKBL, more...?
int sceKernelSysrootInvokeInitCallbackForDriver(int idx);
</source>
 
=== sceKernelSysrootInvokeInitCallbackExForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE4390FFA
| 0.931-0.990 || not present
|-
| 0.990-3.60 || 0x7C2C10E2
|}
|}


<source lang="C">int sceSha1BlockInitForDriver(void* ctx);</source>
This is a guessed name.
 
<source lang="C">
// idx: 0-8, 5: disable NSKBL, more...?
// unk: argument passed to the init callback
int sceKernelSysrootInvokeInitCallbackExForDriver(int idx, int unk);
</source>
 
== SceKernelUtilsForDriver ==


=== sceSha1BlockResultForDriver ===
=== sceAesDecrypt1ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x48F24106
| 0.990-3.60 || 0xD8678061
|}
|}


<source lang="C">int sceSha1BlockResultForDriver(void* ctx, void *digest);</source>
Perform normal AES decrypt.
 
<source lang="c">int sceAesDecrypt1ForDriver(void *ctx, const void *src, void *dst);</source>


=== sceSha1BlockUpdateForDriver ===
=== sceAesDecrypt2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x478A6F3C
| 3.60 || 0xE39CD272
|}
|}


<source lang="C">int sceSha1BlockUpdateForDriver(void* ctx, const void *data, int size);</source>
Perform AES decrypt using encryption round key.
 
<source lang="c">int sceAesDecrypt2ForDriver(void *ctx, const void *src, void *dst);</source>


=== sceSha1DigestForDriver ===
=== sceAesEncrypt1ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x87DC7F2F
| 0.990-3.60 || 0xC2A61770
|}
|}


<source lang="C">int sceSha1DigestForDriver(const void *data, int size, void *digest);</source>
Perform AES encrypt. There are two functions that are the same on 1.69.
 
<source lang="c">int sceAesEncrypt1ForDriver(void *ctx, const void *src, void *dst);</source>


=== sceSha224BlockInitForDriver ===
=== sceAesEncrypt2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC762EA6D
| 1.69-3.60 || 0x302947B6
|}
|}


<source lang="C">int sceSha224BlockInitForDriver(void* ctx);</source>
Perform AES encrypt. Similar to sceAesEncrypt1ForDriver.
 
<source lang="c">int sceAesEncrypt2ForDriver(void *ctx, const void *src, void *dst);</source>


=== sceSha224BlockResultForDriver ===
=== sceAesInit1ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFBF2A442
| 1.69-3.60 || 0xF12B6451
|}
|}


<source lang="C">int sceSha224BlockResultForDriver(void* ctx, void *digest);</source>
This sets up the AES engine. <code>ctx</code> is a 0x3C0 byte buffer (on FW 1.69). <code>blocksize</code> and <code>keysize</code> values are in bits. 128/196/256 are supported values.
 
last arg to subroutine is 0
 
<source lang="c">int sceAesInit1ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source>


=== sceSha224BlockUpdateForDriver ===
=== sceAesInit2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7556E611
| 3.60 || 0xEDA97D6D
|}
|}


<source lang="C">int sceSha224BlockUpdateForDriver(void* ctx, const void *data, int size);</source>
last arg to subroutine is 1
 
<source lang="c">int sceAesInit2ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source>


=== sceSha224DigestForDriver ===
=== sceAesInit3ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x9EA9D4DC
| 3.60 || 0x72408E29
|}
|}


<source lang="C">int sceSha224DigestForDriver(const void *data, int size, void *digest);</source>
last arg to subroutine is 2
 
<source lang="c">int sceAesInit3ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source>


=== sceSha256BlockInitForDriver ===
=== SceKernelUtilsForDriver_C76A7685 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD909FA2C
| 3.60 || 0xC76A7685
|}
|}


<source lang="C">int sceSha256BlockInitForDriver(void* ctx);</source>
Looks like it relates to AES InvMixColumns.


=== sceSha256BlockResultForDriver ===
=== SceKernelUtilsForDriver_60ED6EA9 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4899CD4B
| 3.60 || 0x60ED6EA9
|}
|}


<source lang="C">int sceSha256BlockResultForDriver(void* ctx, void *digest);</source>
Equivalent to AES getSBox32Value


=== sceSha256BlockUpdateForDriver ===
=== sceDeflateDecompressForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x236A9097
| 3.60 || 0x8AF1FAD4
|}
|}


<source lang="C">int sceSha256BlockUpdateForDriver(void* ctx, const void *data, int size);</source>
=== sceDeflateDecompressPartialForDriver ===
 
=== sceSha256DigestForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xA773A6A8
| 3.60 || 0x3D74CCDF
|}
|}


<source lang="C">int sceSha256DigestForDriver(const void *data, SceSize size, void *digest);</source>
=== sceGzipDecompressForDriver ===
 
=== sceZlibDecompressForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x900148DB
| 3.60 || 0x367EE3DF
|}
|}


=== sceZlibGetCompressedDataForDriver ===
=== sceGzipGetCommentForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x01EB6C45
| 3.60 || 0xCD3AE08F
|}
|}


=== sceZlibGetInfoForDriver ===
=== sceGzipGetCompressedDataForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x5B9BCD75
| 3.60 || 0x63619124
|}
|}


=== sceXorshift128ForDriver ===
=== sceGzipGetInfoForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || not present
| 3.60 || 0xFFC6A10F
|-
| 3.60 || 0x335AF34D
|}
|}


Similar implementation as [https://github.com/RIOT-OS/RIOT/blob/master/sys/random/xorshift.c#L41 xorshift128].
=== sceGzipGetNameForDriver ===
 
<source lang="C">int sceXorshift128ForDriver(SceUInt32 *state);</source>
 
=== SceKernelUtilsForDriver_B55C69B7 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB55C69B7
| 3.60 || 0xF901FD3E
|}
|}


If buffer is full of zeroes, then each of the four dwords of buffer are set to 1. Always success and always return 0.
=== sceGzipIsValidForDriver ===
 
Used in [[SceProcessmgr]].
 
<source lang="C">int SceKernelUtilsForDriver_B55C69B7(SceUInt32 *buffer);</source>
 
== SceZlibForDriver ==
 
This library was moved to [[SceSblPostSsMgr#SceZlibForDriver]] on FW 1.800.071.
 
[http://www.zlib.net/ zlib] compression library.
 
=== zlibVersion ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x517BC5F7
| 3.60 || 0xD8FAEFD4
|}
|}


<source lang="C">const char *zlibVersion(void);</source>
=== sceHmacSha1DigestForDriver ===
 
=== inflateInit ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x81D0667B
| 3.60 || 0x29A28957
|}
|}


This function have [[SceSysmem#SceZlibForDriver_723495A5|alias]].
<source lang="C">int sceHmacSha1DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source>


<source lang="C">int inflateInit(SceZlibStream *strm, const char *version, int stream_size);</source>
=== sceHmacSha224DigestForDriver ===
 
=== SceZlibForDriver_723495A5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0x723495A5
| 3.60 || 0x7F2A7B99
|}
|}


<source lang="C">int SceZlibForDriver_723495A5(SceZlibStream *strm, const char *version, int stream_size);</source>
<source lang="C">int sceHmacSha224DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source>


=== inflateInit2_ ===
=== sceHmacSha256DigestForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x0BDDF66A
| 3.60 || 0x83EFA1CC
|}
|}


This function have [[SceSysmem#SceZlibForDriver_21A03034|alias]].
<source lang="C">int sceHmacSha256DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source>


<source lang="C">int inflateInit2_(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source>
=== sceMt19937GlobalInitForDriver ===
 
=== SceZlibForDriver_21A03034 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x21A03034
| 3.60 || 0xD428CC2A
|}
|}


<source lang="C">int SceZlibForDriver_21A03034(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source>
cp_timestamp_2 is gotten from SceKblParam.
 
<source lang="C">int sceMt19937GlobalInitForDriver(uint32_t cp_timestamp_2);</source>


=== inflateInit_2 ===
=== sceMt19937GlobalUIntInRangeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x44DA19D2
| 0.990-3.60 || 0x875B2A1C
|}
|}


This function have [[SceSysmem#SceZlibForDriver_B03E109B|alias]].
Temp name was sceMt19937GlobalUninitForDriver.


<source lang="C">int inflateInit_2(SceZlibStream *strm, const char *version, int stream_size);</source>
<source lang="C">
// Both the address and size must be aligned on four bytes.
int sceMt19937GlobalUIntInRangeForDriver(void *pBase, SceSize length);
</source>


=== SceZlibForDriver_B03E109B ===
=== sceMt19937InitForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xB03E109B
| 3.60 || 0x4C9A5730
|}
|}


<source lang="C">int SceZlibForDriver_B03E109B(SceZlibStream *strm, const char *version, int stream_size);</source>
=== sceMt19937UIntForDriver ===
 
=== inflateInit2_2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xA1E7E8B3
| 3.60 || 0x92AEDFBC
|}
|}


This function have [[SceSysmem#SceZlibForDriver_AC2F8437|alias]].
=== sceSfmt19937FillArray32ForDriver ===
 
<source lang="C">int inflateInit2_2(SceZlibStream *strm, int a2, const char *version, int stream_size);</source>
 
=== SceZlibForDriver_AC2F8437 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xAC2F8437
| 3.60 || 0x2B30548B
|}
|}


<source lang="C">int SceZlibForDriver_AC2F8437(SceZlibStream *strm, int a2, const char *version, int stream_size);</source>
=== sceSfmt19937FillArray64ForDriver ===
 
=== inflate ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xD4A85178
| 3.60 || 0x49B41540
|}
|}


This function have [[SceSysmem#SceZlibForDriver_E4F34A68|alias]].
=== sceSfmt19937GenRand32ForDriver ===
 
<source lang="C">int inflate(SceZlibStream *strm, int flush);</source>
 
=== SceZlibForDriver_E4F34A68 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0xE4F34A68
| 3.60 || 0xBBE4701A
|}
|}


=== inflateSetDictionary ===
=== sceSfmt19937GenRand64ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0x7B16DBD6
| 3.60 || 0x45DEAAD6
|}
|}


This function have [[SceSysmem#SceZlibForDriver_00561385|alias]].
=== sceSfmt19937InitByArrayForDriver ===
 
<source lang="C">int inflateSetDictionary(SceZlibStream *strm, const void *dictionary, int dictLength);</source>
 
=== SceZlibForDriver_00561385 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x00561385
| 3.60 || 0x33AE1203
|}
|}


<source lang="C">int SceZlibForDriver_00561385(SceZlibStream *strm, const void *dictionary, int dictLength);</source>
=== sceSfmt19937InitGenRandForDriver ===
 
=== inflateEnd ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x9030BAE4
| 3.60 || 0xAB48C3CA
|}
|}


This function have [[SceSysmem#SceZlibForDriver_134E91EA|alias]].
=== sceSha1BlockInitForDriver ===
 
<source lang="C">int inflateEnd(SceZlibStream *strm);</source>
 
=== SceZlibForDriver_134E91EA ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x134E91EA
| 3.60 || 0xE4390FFA
|}
|}


<source lang="C">int SceZlibForDriver_134E91EA(SceZlibStream *strm);</source>
<source lang="C">int sceSha1BlockInitForDriver(void* ctx);</source>


=== inflateCopy ===
=== sceSha1BlockResultForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x4C27A382
| 3.60 || 0x48F24106
|}
|}


This function have [[SceSysmem#SceZlibForDriver_89B30588|alias]].
<source lang="C">int sceSha1BlockResultForDriver(void* ctx, void *digest);</source>


<source lang="C">int inflateCopy(SceZlibStream *dst, SceZlibStream *src);</source>
=== sceSha1BlockUpdateForDriver ===
 
=== SceZlibForDriver_89B30588 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x89B30588
| 3.60 || 0x478A6F3C
|}
|}


<source lang="C">int SceZlibForDriver_89B30588(SceZlibStream *dst, SceZlibStream *src);</source>
<source lang="C">int sceSha1BlockUpdateForDriver(void* ctx, const void *data, int size);</source>


=== inflateSyncPoint ===
=== sceSha1DigestForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x4CB63BCD
| 3.60 || 0x87DC7F2F
|}
|}


This function have [[SceSysmem#SceZlibForDriver_834CC4A2|alias]].
<source lang="C">int sceSha1DigestForDriver(const void *data, int size, void *digest);</source>


<source lang="C">int inflateSyncPoint(SceZlibStream *strm);</source>
=== sceSha224BlockInitForDriver ===
 
=== SceZlibForDriver_834CC4A2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x834CC4A2
| 3.60 || 0xC762EA6D
|}
|}


<source lang="C">int SceZlibForDriver_834CC4A2(SceZlibStream *strm);</source>
<source lang="C">int sceSha224BlockInitForDriver(void* ctx);</source>


=== deflate ===
=== sceSha224BlockResultForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0xE859D60F
| 3.60 || 0xFBF2A442
|}
|}


This function have [[SceSysmem#SceZlibForDriver_5B718E55|alias]].
<source lang="C">int sceSha224BlockResultForDriver(void* ctx, void *digest);</source>


<source lang="C">int deflate(SceZlibStream *strm, int flush);</source>
=== sceSha224BlockUpdateForDriver ===
 
=== SceZlibForDriver_5B718E55 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010-3.60 || 0x5B718E55
| 3.60 || 0x7556E611
|}
|}


Used by [[SceCoredump]].
<source lang="C">int sceSha224BlockUpdateForDriver(void* ctx, const void *data, int size);</source>


<source lang="C">int SceZlibForDriver_5B718E55(SceZlibStream *strm, int flush);</source>
=== sceSha224DigestForDriver ===
 
=== deflateReset ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0x68CFEA45
| 3.60 || 0x9EA9D4DC
|}
|}


This function have [[SceSysmem#SceZlibForDriver_211D25F5|alias]].
<source lang="C">int sceSha224DigestForDriver(const void *data, int size, void *digest);</source>


This function could be deflateResetKeep.
=== sceSha256BlockInitForDriver ===
 
<source lang="C">int deflateReset(SceZlibStream *strm);</source>
 
=== SceZlibForDriver_211D25F5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x211D25F5
| 3.60 || 0xD909FA2C
|}
|}


<source lang="C">int SceZlibForDriver_211D25F5(SceZlibStream *strm);</source>
<source lang="C">int sceSha256BlockInitForDriver(void* ctx);</source>


=== crc32 ===
=== sceSha256BlockResultForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0xE0CE06C0
| 3.60 || 0x4899CD4B
|}
|}


This function have [[SceSysmem#SceZlibForDriver_3370B9AD|alias]].
<source lang="C">int sceSha256BlockResultForDriver(void* ctx, void *digest);</source>


<source lang="C">unsigned long crc32(unsigned long crc, const unsigned char *buf, z_size_t len);</source>
=== sceSha256BlockUpdateForDriver ===
 
=== SceZlibForDriver_3370B9AD ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x3370B9AD
| 3.60 || 0x236A9097
|}
|}


<source lang="C">unsigned long SceZlibForDriver_3370B9AD(unsigned long crc, const unsigned char *buf, z_size_t len);</source>
<source lang="C">int sceSha256BlockUpdateForDriver(void* ctx, const void *data, int size);</source>


=== adler32 ===
=== sceSha256DigestForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.60-3.60 || 0x98619620
| 0.931-3.60 || 0xA773A6A8
|}
|}


This function have [[SceSysmem#SceZlibForDriver_7E823337|alias]].
<source lang="C">int sceSha256DigestForDriver(const void *data, SceSize size, void *digest);</source>


=== SceZlibForDriver_7E823337 ===
=== sceZlibDecompressForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x7E823337
| 3.60 || 0x900148DB
|}
|}


=== deflateInit2_2 ===
=== sceZlibGetCompressedDataForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x20A122F8
| 3.60 || 0x01EB6C45
|}
|}


May be an initialization function.
=== sceZlibGetInfoForDriver ===
 
Used by [[SceCoredump]].
 
This function have [[SceSysmem#SceZlibForDriver_BE5CE88A|alias]].
 
<source lang="C">int deflateInit2_2(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>
 
=== SceZlibForDriver_BE5CE88A ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xBE5CE88A
| 3.60 || 0x5B9BCD75
|}
|}


<source lang="C">int SceZlibForDriver_BE5CE88A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>
=== sceXorshift128ForDriver ===
 
=== deflateEnd ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x5492B3F2
| 0.990 || not present
|-
| 3.60 || 0x335AF34D
|}
|}


Used by [[SceCoredump]].
Similar implementation as [https://github.com/RIOT-OS/RIOT/blob/master/sys/random/xorshift.c#L41 xorshift128].


This function have [[SceSysmem#SceZlibForDriver_A5D70E95|alias]].
<source lang="C">int sceXorshift128ForDriver(SceUInt32 *state);</source>


<source lang="C">int deflateEnd(SceZlibStream *strm);</source>
=== SceKernelUtilsForDriver_B55C69B7 ===
 
=== SceZlibForDriver_A5D70E95 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xA5D70E95
| 3.60 || 0xB55C69B7
|}
|}


<source lang="C">int SceZlibForDriver_A5D70E95(SceZlibStream *strm);</source>
If buffer is full of zeroes, then each of the four dwords of buffer are set to 1. Always success and always return 0.


=== deflateInit_ ===
Used in [[SceProcessmgr]].
{| class="wikitable"
 
|-
<source lang="C">int SceKernelUtilsForDriver_B55C69B7(SceUInt32 *buffer);</source>
! Version !! NID
 
|-
== SceZlibForDriver ==
| 3.60 || 0x25F28DA7
|}


This function have [[SceSysmem#SceZlibForDriver_520CAA7F|alias]].
This library was moved to [[SceSblPostSsMgr#SceZlibForDriver]] on FW 1.800.071.


<source lang="C">int deflateInit_(SceZlibStream *strm, int level, const char *version, int stream_size);</source>
[http://www.zlib.net/ zlib] compression library.


=== SceZlibForDriver_520CAA7F ===
=== zlibVersion ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x520CAA7F
| 3.200.010 || 0x517BC5F7
|}
|}


<source lang="C">int SceZlibForDriver_520CAA7F(SceZlibStream *strm, int level, const char *version, int stream_size);</source>
<source lang="C">const char *zlibVersion(void);</source>


=== SceZlibForDriver_05F712FE ===
=== inflateInit ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x05F712FE
| 3.200.010 || 0x81D0667B
|}
|}


This function have [[SceSysmem#SceZlibForDriver_67A085C4|alias]].
This function have [[SceSysmem#SceZlibForDriver_723495A5|alias]].
 
<source lang="C">int inflateInit(SceZlibStream *strm, const char *version, int stream_size);</source>


=== SceZlibForDriver_67A085C4 ===
=== SceZlibForDriver_723495A5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x67A085C4
| 0.940-3.60 || 0x723495A5
|}
|}


=== SceZlibForDriver_0FA805A3 ===
<source lang="C">int SceZlibForDriver_723495A5(SceZlibStream *strm, const char *version, int stream_size);</source>
 
=== inflateInit2_ ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x0FA805A3
| 3.200.010 || 0x0BDDF66A
|}
|}


This function have [[SceSysmem#SceZlibForDriver_1C344E27|alias]].
This function have [[SceSysmem#SceZlibForDriver_21A03034|alias]].


<source lang="C">int SceZlibForDriver_0FA805A3(SceZlibStream *strm, int a2, SceUInt16 a3);</source>
<source lang="C">int inflateInit2_(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source>


=== SceZlibForDriver_1C344E27 ===
=== SceZlibForDriver_21A03034 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x1C344E27
| 3.200.010 || 0x21A03034
|}
|}


<source lang="C">int SceZlibForDriver_1C344E27(SceZlibStream *strm, int a2, SceUInt16 a3);</source>
<source lang="C">int SceZlibForDriver_21A03034(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source>


=== deflateCopy ===
=== inflateInit_2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x1E135CC1
| 3.200.010 || 0x44DA19D2
|}
|}


This function have [[SceSysmem#SceZlibForDriver_3252D28C|alias]].
This function have [[SceSysmem#SceZlibForDriver_B03E109B|alias]].


<source lang="C">int deflateCopy(SceZlibStream *dst, SceZlibStream *src);</source>
<source lang="C">int inflateInit_2(SceZlibStream *strm, const char *version, int stream_size);</source>


=== SceZlibForDriver_3252D28C ===
=== SceZlibForDriver_B03E109B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x3252D28C
| 3.200.010 || 0xB03E109B
|}
|}


<source lang="C">int SceZlibForDriver_3252D28C(SceZlibStream *dst, SceZlibStream *src);</source>
<source lang="C">int SceZlibForDriver_B03E109B(SceZlibStream *strm, const char *version, int stream_size);</source>


=== SceZlibForDriver_35E0108C ===
=== inflateInit2_2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x35E0108C
| 3.200.010 || 0xA1E7E8B3
|}
|}


This function have [[SceSysmem#SceZlibForDriver_E2DF5A8B|alias]].
This function have [[SceSysmem#SceZlibForDriver_AC2F8437|alias]].


<source lang="C">int SceZlibForDriver_35E0108C(SceZlibStream *strm);</source>
<source lang="C">int inflateInit2_2(SceZlibStream *strm, int a2, const char *version, int stream_size);</source>


=== SceZlibForDriver_E2DF5A8B ===
=== SceZlibForDriver_AC2F8437 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xE2DF5A8B
| 3.200.010 || 0xAC2F8437
|}
|}


<source lang="C">int SceZlibForDriver_E2DF5A8B(SceZlibStream *strm);</source>
<source lang="C">int SceZlibForDriver_AC2F8437(SceZlibStream *strm, int a2, const char *version, int stream_size);</source>


=== zError ===
=== inflate ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x3B4466F4
| 3.200.010 || 0xD4A85178
|}
|}


This function have [[SceSysmem#SceZlibForDriver_3F33F55F|alias]].
This function have [[SceSysmem#SceZlibForDriver_E4F34A68|alias]].


<source lang="C">const char *zError(int err);</source>
<source lang="C">int inflate(SceZlibStream *strm, int flush);</source>


=== SceZlibForDriver_3F33F55F ===
=== SceZlibForDriver_E4F34A68 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x3F33F55F
| 1.60-3.60 || 0xE4F34A68
|}
|}


<source lang="C">const char *SceZlibForDriver_3F33F55F(int err);</source>
=== inflateSetDictionary ===
 
=== inflateReset ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x408311E8
| 1.60-3.60 || 0x7B16DBD6
|}
|}


This function have [[SceSysmem#SceZlibForDriver_EEC6D267|alias]].
This function have [[SceSysmem#SceZlibForDriver_00561385|alias]].


<source lang="C">int inflateReset(SceZlibStream *strm);</source>
<source lang="C">int inflateSetDictionary(SceZlibStream *strm, const void *dictionary, int dictLength);</source>


=== SceZlibForDriver_EEC6D267 ===
=== SceZlibForDriver_00561385 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xEEC6D267
| 3.200.010 || 0x00561385
|}
|}


<source lang="C">int SceZlibForDriver_EEC6D267(SceZlibStream *strm);</source>
<source lang="C">int SceZlibForDriver_00561385(SceZlibStream *strm, const void *dictionary, int dictLength);</source>


=== SceZlibForDriver_4EE6C080 ===
=== inflateEnd ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x4EE6C080
| 3.200.010 || 0x9030BAE4
|}
|}


This function have [[SceSysmem#SceZlibForDriver_93168F72|alias]].
This function have [[SceSysmem#SceZlibForDriver_134E91EA|alias]].
 
<source lang="C">int inflateEnd(SceZlibStream *strm);</source>


=== SceZlibForDriver_93168F72 ===
=== SceZlibForDriver_134E91EA ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x93168F72
| 3.200.010 || 0x134E91EA
|}
|}


=== SceZlibForDriver_5377643A ===
<source lang="C">int SceZlibForDriver_134E91EA(SceZlibStream *strm);</source>
 
=== inflateCopy ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x5377643A
| 3.200.010 || 0x4C27A382
|}
|}


This function have [[SceSysmem#SceZlibForDriver_7C40CC39|alias]].
This function have [[SceSysmem#SceZlibForDriver_89B30588|alias]].
 
<source lang="C">int inflateCopy(SceZlibStream *dst, SceZlibStream *src);</source>


=== SceZlibForDriver_7C40CC39 ===
=== SceZlibForDriver_89B30588 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x7C40CC39
| 3.200.010 || 0x89B30588
|}
|}


=== deflateInit_2 ===
<source lang="C">int SceZlibForDriver_89B30588(SceZlibStream *dst, SceZlibStream *src);</source>
 
=== inflateSyncPoint ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x5A0078D6
| 3.200.010 || 0x4CB63BCD
|}
|}


This function have [[SceSysmem#SceZlibForDriver_AD23EEBB|alias]].
This function have [[SceSysmem#SceZlibForDriver_834CC4A2|alias]].


<source lang="C">int deflateInit_2(SceZlibStream *strm, int level, const char *version, int stream_size);</source>
<source lang="C">int inflateSyncPoint(SceZlibStream *strm);</source>


=== SceZlibForDriver_AD23EEBB ===
=== SceZlibForDriver_834CC4A2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xAD23EEBB
| 3.200.010 || 0x834CC4A2
|}
|}


<source lang="C">int SceZlibForDriver_AD23EEBB(SceZlibStream *strm, int level, const char *version, int stream_size);</source>
<source lang="C">int SceZlibForDriver_834CC4A2(SceZlibStream *strm);</source>


=== SceZlibForDriver_6ED5B677 ===
=== deflate ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x6ED5B677
| 1.60-3.60 || 0xE859D60F
|}
|}


This function have [[SceSysmem#SceZlibForDriver_7993ADAB|alias]].
This function have [[SceSysmem#SceZlibForDriver_5B718E55|alias]].
 
<source lang="C">int deflate(SceZlibStream *strm, int flush);</source>


=== SceZlibForDriver_7993ADAB ===
=== SceZlibForDriver_5B718E55 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x7993ADAB
| 3.200.010-3.60 || 0x5B718E55
|}
|}


=== SceZlibForDriver_7048F14C ===
Used by [[SceCoredump]].
 
<source lang="C">int SceZlibForDriver_5B718E55(SceZlibStream *strm, int flush);</source>
 
=== deflateReset ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x7048F14C
| 1.60-3.60 || 0x68CFEA45
|}
|}


This function have [[SceSysmem#SceZlibForDriver_E323828B|alias]].
This function have [[SceSysmem#SceZlibForDriver_211D25F5|alias]].
 
This function could be deflateResetKeep.
 
<source lang="C">int deflateReset(SceZlibStream *strm);</source>


=== SceZlibForDriver_E323828B ===
=== SceZlibForDriver_211D25F5 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xE323828B
| 3.200.010 || 0x211D25F5
|}
|}


=== SceZlibForDriver_82167CD9 ===
<source lang="C">int SceZlibForDriver_211D25F5(SceZlibStream *strm);</source>
 
=== crc32 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x82167CD9
| 1.60-3.60 || 0xE0CE06C0
|}
|}


This function have [[SceSysmem#SceZlibForDriver_E94663DD|alias]].
This function have [[SceSysmem#SceZlibForDriver_3370B9AD|alias]].
 
<source lang="C">unsigned long crc32(unsigned long crc, const unsigned char *buf, z_size_t len);</source>


=== SceZlibForDriver_E94663DD ===
=== SceZlibForDriver_3370B9AD ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xE94663DD
| 3.200.010 || 0x3370B9AD
|}
|}


=== SceZlibForDriver_86FF6C8B ===
<source lang="C">unsigned long SceZlibForDriver_3370B9AD(unsigned long crc, const unsigned char *buf, z_size_t len);</source>
 
=== adler32 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x86FF6C8B
| 1.60-3.60 || 0x98619620
|}
|}


This function have [[SceSysmem#SceZlibForDriver_904AA7AE|alias]].
This function have [[SceSysmem#SceZlibForDriver_7E823337|alias]].


=== SceZlibForDriver_904AA7AE ===
=== SceZlibForDriver_7E823337 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x904AA7AE
| 3.200.010 || 0x7E823337
|}
|}


=== SceZlibForDriver_89A13883 ===
=== deflateInit2_2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x89A13883
| 3.60 || 0x20A122F8
|}
|}


This function have [[SceSysmem#SceZlibForDriver_D9BDC778|alias]].
May be an initialization function.
 
Used by [[SceCoredump]].
 
This function have [[SceSysmem#SceZlibForDriver_BE5CE88A|alias]].
 
<source lang="C">int deflateInit2_2(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>


=== SceZlibForDriver_D9BDC778 ===
=== SceZlibForDriver_BE5CE88A ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xD9BDC778
| 3.200.010 || 0xBE5CE88A
|}
|}


=== SceZlibForDriver_938F34FA ===
<source lang="C">int SceZlibForDriver_BE5CE88A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>
 
=== deflateEnd ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0x938F34FA
| 3.60 || 0x5492B3F2
|}
|}


This function have [[SceSysmem#SceZlibForDriver_BC022D38|alias]].
Used by [[SceCoredump]].
 
This function have [[SceSysmem#SceZlibForDriver_A5D70E95|alias]].
 
<source lang="C">int deflateEnd(SceZlibStream *strm);</source>


=== SceZlibForDriver_BC022D38 ===
=== SceZlibForDriver_A5D70E95 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xBC022D38
| 3.200.010 || 0xA5D70E95
|}
|}


=== deflateInit2_ ===
<source lang="C">int SceZlibForDriver_A5D70E95(SceZlibStream *strm);</source>
 
=== deflateInit_ ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xE6EB524C
| 3.60 || 0x25F28DA7
|}
|}


This function have [[SceSysmem#SceZlibForDriver_F2D8FC1A|alias]].
This function have [[SceSysmem#SceZlibForDriver_520CAA7F|alias]].


<source lang="C">int deflateInit2_(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>
<source lang="C">int deflateInit_(SceZlibStream *strm, int level, const char *version, int stream_size);</source>


=== SceZlibForDriver_F2D8FC1A ===
=== SceZlibForDriver_520CAA7F ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.200.010 || 0xF2D8FC1A
| 3.200.010 || 0x520CAA7F
|}
|}


<source lang="C">int SceZlibForDriver_F2D8FC1A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>
<source lang="C">int SceZlibForDriver_520CAA7F(SceZlibStream *strm, int level, const char *version, int stream_size);</source>


== SceKernelSuspendForDriver ==
=== SceZlibForDriver_05F712FE ===
 
Used to register handlers for handling suspend/resume related events.
 
=== sceKernelPowerLockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0x254525F8
| 3.200.010 || 0x05F712FE
|}
|}


This is a guessed name.
This function have [[SceSysmem#SceZlibForDriver_67A085C4|alias]].


Used in [[SceProcessmgr#sceKernelPowerLock]].
=== SceZlibForDriver_67A085C4 ===
 
<source lang="C">int sceKernelPowerLockForDriver(SceKernelPowerTickType type);</source>
 
=== sceKernelPowerUnlockForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.740.011 || 0x230495ED
| 3.200.010 || 0x67A085C4
|}
|}


This is a guessed name.
=== SceZlibForDriver_0FA805A3 ===
 
Used in [[SceProcessmgr#sceKernelPowerUnlock]].
 
<source lang="C">int sceKernelPowerUnlockForDriver(SceKernelPowerTickType type);</source>
 
=== SceKernelSuspendForDriver_FE2118BD ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xFE2118BD
| 3.200.010 || 0x0FA805A3
|}
|}


=== SceKernelSuspendForDriver_E677B343 ===
This function have [[SceSysmem#SceZlibForDriver_1C344E27|alias]].
 
<source lang="C">int SceZlibForDriver_0FA805A3(SceZlibStream *strm, int a2, SceUInt16 a3);</source>
 
=== SceZlibForDriver_1C344E27 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xE677B343
| 3.200.010 || 0x1C344E27
|}
|}


=== SceKernelSuspendForDriver_B4B13615 ===
<source lang="C">int SceZlibForDriver_1C344E27(SceZlibStream *strm, int a2, SceUInt16 a3);</source>
 
=== deflateCopy ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xB4B13615
| 3.200.010 || 0x1E135CC1
|}
|}


=== SceKernelSuspendForDriver_AEA9440D ===
This function have [[SceSysmem#SceZlibForDriver_3252D28C|alias]].
 
<source lang="C">int deflateCopy(SceZlibStream *dst, SceZlibStream *src);</source>
 
=== SceZlibForDriver_3252D28C ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xAEA9440D
| 3.200.010 || 0x3252D28C
|}
|}


=== SceKernelSuspendForDriver_81D9E41C ===
<source lang="C">int SceZlibForDriver_3252D28C(SceZlibStream *dst, SceZlibStream *src);</source>
 
=== SceZlibForDriver_35E0108C ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x81D9E41C
| 3.200.010 || 0x35E0108C
|}
|}


=== SceKernelSuspendForDriver_6A503956 ===
This function have [[SceSysmem#SceZlibForDriver_E2DF5A8B|alias]].
 
<source lang="C">int SceZlibForDriver_35E0108C(SceZlibStream *strm);</source>
 
=== SceZlibForDriver_E2DF5A8B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x6A503956
| 3.200.010 || 0xE2DF5A8B
|}
|}


=== SceKernelSuspendForDriver_250ACD90 ===
<source lang="C">int SceZlibForDriver_E2DF5A8B(SceZlibStream *strm);</source>
 
=== zError ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x250ACD90
| 3.200.010 || 0x3B4466F4
|}
|}


=== SceKernelSuspendForDriver_0A6CA124 ===
This function have [[SceSysmem#SceZlibForDriver_3F33F55F|alias]].
 
<source lang="C">const char *zError(int err);</source>
 
=== SceZlibForDriver_3F33F55F ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x0A6CA124
| 3.200.010 || 0x3F33F55F
|}
|}


=== SceKernelSuspendForDriver_0106C0F0 ===
<source lang="C">const char *SceZlibForDriver_3F33F55F(int err);</source>
 
=== inflateReset ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x0106C0F0
| 3.200.010 || 0x408311E8
|}
|}


=== SceKernelSuspendForDriver_4DF40893 ===
This function have [[SceSysmem#SceZlibForDriver_EEC6D267|alias]].
 
<source lang="C">int inflateReset(SceZlibStream *strm);</source>
 
=== SceZlibForDriver_EEC6D267 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x4DF40893
| 3.200.010 || 0xEEC6D267
|}
|}


Locks something.
<source lang="C">int SceZlibForDriver_EEC6D267(SceZlibStream *strm);</source>


Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just before starting a process.
=== SceZlibForDriver_4EE6C080 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.200.010 || 0x4EE6C080
|}


Called just before NVS write.
This function have [[SceSysmem#SceZlibForDriver_93168F72|alias]].


<source lang="C">
=== SceZlibForDriver_93168F72 ===
// maybe pid: usually 0
int SceKernelSuspendForDriver_4DF40893(int maybe_pid);
</source>
 
=== SceKernelSuspendForDriver_2BB92967 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x2BB92967
| 3.200.010 || 0x93168F72
|}
|}


Unlocks something.
=== SceZlibForDriver_5377643A ===
 
Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just after starting a process.
 
Called just after NVS write.
 
<source lang="C">
// maybe pid: usually 0
int SceKernelSuspendForDriver_2BB92967(int maybe_pid);
</source>
 
=== sceKernelRegisterSysEventHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x04C05D10
| 3.200.010 || 0x5377643A
|}
|}


Temp name was sceKernelSuspendRegisterCallbackForDriver.
This function have [[SceSysmem#SceZlibForDriver_7C40CC39|alias]].


Registers a function for handling suspend/resume. <code>resume</code> is 0 if we are currently suspending and 1 if we are currently resuming. <code>opt</code> is passed from the registration. Registration adds an entry to a linked list and returns the block id for the new entry.
=== SceZlibForDriver_7C40CC39 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.200.010 || 0x7C40CC39
|}


Returns the suspend_handler_id.
=== deflateInit_2 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.200.010 || 0x5A0078D6
|}


<source lang="c">
This function have [[SceSysmem#SceZlibForDriver_AD23EEBB|alias]].
// used in register function or in handler prototypes?
typedef struct suspend_args1_t {
    SceSize size; // 0x18
    uint32_t unk1;
    uint32_t unk2;
    uint32_t unk3;
    uint32_t unk4;
    uint32_t unk5;
} suspend_args1_t;


typedef int (* SceSysEventHandler)(int resume, int eventid, void *args, void *opt);
<source lang="C">int deflateInit_2(SceZlibStream *strm, int level, const char *version, int stream_size);</source>


SceUID sceKernelRegisterSysEventHandlerForDriver(const char *name, SceSysEventHandler *handler, void *pOpt);
=== SceZlibForDriver_AD23EEBB ===
</source>
 
=== SceKernelSuspendForDriver_CE7A2207 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xCE7A2207
| 3.200.010 || 0xAD23EEBB
|}
|}


Registers a handler for a suspend event.
<source lang="C">int SceZlibForDriver_AD23EEBB(SceZlibStream *strm, int level, const char *version, int stream_size);</source>


<source lang="c">
=== SceZlibForDriver_6ED5B677 ===
// idx: ex: 0x15
// args: can be 0
SceUID SceKernelSuspendForDriver_CE7A2207(SceUInt idx, void *handler, void *args);
</source>
 
=== SceKernelSuspendForDriver_105C5752 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0x105C5752
| 3.200.010 || 0x6ED5B677
|}
|}


Registers a handler for a resume event.
This function have [[SceSysmem#SceZlibForDriver_7993ADAB|alias]].


<source lang="c">
=== SceZlibForDriver_7993ADAB ===
// idx: ex: 0x15
// args: can be 0
SceUID SceKernelSuspendForDriver_105C5752(SceUInt idx, void *handler, void *args);
</source>
 
=== SceKernelSuspendForDriver_D4958E6F ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xD4958E6F
| 3.200.010 || 0x7993ADAB
|}
|}


Dispatch handler registered by [[#SceKernelSuspendForDriver_CE7A2207]].
=== SceZlibForDriver_7048F14C ===
 
<source lang="c">SceUID SceKernelSuspendForDriver_D4958E6F(void *args);</source>
 
=== sceKernelUnregisterSysEventHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xDD61D621
| 3.200.010 || 0x7048F14C
|}
|}


Call with the id returned from <code>suspend_register_handler</code> to remove the entry from the linked list and free the memory.
This function have [[SceSysmem#SceZlibForDriver_E323828B|alias]].


<source lang="c">int sceKernelUnregisterSysEventHandlerForDriver(SceUID id);</source>
=== SceZlibForDriver_E323828B ===
 
=== sceKernelSysEventDispatchForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xD4622EA8
| 3.200.010 || 0xE323828B
|}
|}


This function goes through the linked list and calls each handler. If <code>stop_on_error</code> is set, then the first handler that returns a negative value stops the call chain and returns the block id of the handler that broke the chain. Otherwise, this function invokes each handler and returns 0.
=== SceZlibForDriver_82167CD9 ===
 
<source lang="c">int sceKernelSysEventDispatchForDriver(int resume, int eventid, void *args, int stop_on_error);</source>
 
=== sceKernelPowerTickForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990.000-3.740.011 || 0xE0489831
| 3.200.010 || 0x82167CD9
|}
|}


Cancel specified idle timers to prevent entering in power save processing.
This function have [[SceSysmem#SceZlibForDriver_E94663DD|alias]].


Returns 0 on success.
=== SceZlibForDriver_E94663DD ===
 
<source lang="c">
typedef enum SceKernelPowerTickType {
/** Cancel all timers */
SCE_KERNEL_POWER_TICK_DEFAULT = 0,
/** Cancel automatic suspension timer */
SCE_KERNEL_POWER_TICK_DISABLE_AUTO_SUSPEND = 1,
/** Cancel OLED-off timer */
SCE_KERNEL_POWER_TICK_DISABLE_OLED_OFF = 4,
/** Cancel OLED dimming timer */
SCE_KERNEL_POWER_TICK_DISABLE_OLED_DIMMING = 6
} SceKernelPowerTickType;
 
int sceKernelPowerTickForDriver(int type);
</source>
 
=== SceKernelSuspendForDriver_1FA2F8F1 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.000.071-3.740.011 || 0x1FA2F8F1
| 3.200.010 || 0xE94663DD
|}
|}


Calls a power handler.
=== SceZlibForDriver_86FF6C8B ===
 
<source lang="C">int SceKernelSuspendForDriver_1FA2F8F1(int a1, int a2);</source>
 
=== SceKernelSuspendForDriver_F2B07167 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.100.081-3.740.011 || 0xF2B07167
| 3.200.010 || 0x86FF6C8B
|}
|}


Registers a global variable used by [[#sceKernelPowerTickForDriver]].
This function have [[SceSysmem#SceZlibForDriver_904AA7AE|alias]].


<source lang="C">int SceKernelSuspendForDriver_F2B07167(int a1);</source>
=== SceZlibForDriver_904AA7AE ===
 
=== SceKernelSuspendForDriver_B5C58EE8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.100.081-3.740.011 || 0xB5C58EE8
| 3.200.010 || 0x904AA7AE
|}
|}


Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].
=== SceZlibForDriver_89A13883 ===
 
<source lang="C">int SceKernelSuspendForDriver_B5C58EE8(int a1);</source>
 
=== SceKernelSuspendForDriver_D6124071 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.100.081-3.740.011 || 0xD6124071
| 3.200.010 || 0x89A13883
|}
|}


Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].
This function have [[SceSysmem#SceZlibForDriver_D9BDC778|alias]].


<source lang="C">int SceKernelSuspendForDriver_D6124071(int a1);</source>
=== SceZlibForDriver_D9BDC778 ===
 
=== SceKernelSuspendForDriver_0DE3CC02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.100.081-3.740.011 || 0x0DE3CC02
| 3.200.010 || 0xD9BDC778
|}
|}


Registers a global variable used by [[#SceKernelSuspendForDriver_2BB92967]].
=== SceZlibForDriver_938F34FA ===
 
<source lang="C">int SceKernelSuspendForDriver_0DE3CC02(int a1);</source>
 
=== SceKernelSuspendForDriver_4E5A3A23 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.100.081-3.740.011 || 0x4E5A3A23
| 3.200.010 || 0x938F34FA
|}
|}


Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].
This function have [[SceSysmem#SceZlibForDriver_BC022D38|alias]].


<source lang="C">int SceKernelSuspendForDriver_4E5A3A23(int a1);</source>
=== SceZlibForDriver_BC022D38 ===
 
=== SceKernelSuspendForDriver_C00826AC ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.100.081-3.740.011 || 0xC00826AC
| 3.200.010 || 0xBC022D38
|}
|}


Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].
=== deflateInit2_ ===
 
<source lang="C">int SceKernelSuspendForDriver_C00826AC(int a1);</source>
 
=== SceKernelSuspendForDriver_8B3F02B8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.100.081-3.740.011 || 0x8B3F02B8
| 3.200.010 || 0xE6EB524C
|}
|}


Registers a global variable used by [[#SceKernelSuspendForDriver_1FA2F8F1]].
This function have [[SceSysmem#SceZlibForDriver_F2D8FC1A|alias]].


<source lang="C">int SceKernelSuspendForDriver_8B3F02B8(int a1);</source>
<source lang="C">int deflateInit2_(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>


== SceQafMgrForDriver ==
=== SceZlibForDriver_F2D8FC1A ===
 
Provides many device permission checks including running app privilege checks, debugging enabled checks, and so on.
 
=== SceQafMgrForDriver_41E04800 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x4F20A014
| 3.200.010 || 0xF2D8FC1A
|-
| 3.60 || not present
|}
|}


=== SceQafMgrForDriver_082A4FC2 ===
<source lang="C">int SceZlibForDriver_F2D8FC1A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source>
 
== SceKernelSuspendForDriver ==
 
Used to register handlers for handling suspend/resume related events.
 
=== sceKernelLockSuspendForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x082A4FC2
| 0.990.000-3.740.011 || 0x4DF40893
|}
|}


Temp name was sceSblQafMgrIsAllowHost0AccessForDriver. A potential name could be sceSblQafMgrIsAllowRemoteLoadForDriver.
This is a guessed name.


Used by [[SceSblFwLoader#sceSblFwLoaderLockForDriver|sceSblFwLoaderLockForDriver]], [[SceKernelModulemgr]], [[SceSysStateMgr]] and [[SceSblPostSsMgr]].
Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just before starting a process.


Used by [[SceSblPostSsMgr#sceSblSpsfoMgrOpenForDriver|sceSblSpsfoMgrOpenForDriver]].
Called just before NVS write.


When this flag is set, it allows for example to load some files from host0:, for example SPSFO and psp2config.skprx.
<source lang="C">int sceKernelLockSuspendForDriver(SceUInt32 a1);</source>


<source lang="C">
=== sceKernelUnlockSuspendForDriver ===
// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_082A4FC2(void);
</source>
 
=== sceSblQafMgrIsAllowGameDebugForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x694D1096
| 0.990.000-3.740.011 || 0x2BB92967
|}
|}


This is a guessed name.
This is a guessed name.


Only used by [[SceSblACMgr]].
Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just after starting a process.


Might be something like sceSblQafMgrIsAllowUserAppDebug.
Called just after NVS write.


<source lang="C">
<source lang="C">int sceKernelUnlockSuspendForDriver(SceUInt32 a1);</source>
// (*(uint8_t *)(qaf + 0xB) & 4)
int sceSblQafMgrIsAllowGameDebugForDriver(void);
</source>


=== SceQafMgrForDriver_0E588747 ===
=== sceKernelLockSuspendProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x0E588747
| 0.931-3.740.011 || 0x254525F8
|}
|}


Only used by [[SceRegistryMgr]].
This is a guessed name.
 
Temp name was sceKernelPowerLockForDriver.


Returns true if the PSVita is an "Internal system".
Used in [[SceProcessmgr#sceKernelPowerLock]].


<source lang="C">
<source lang="C">int sceKernelPowerLockForDriver(SceUInt32 a1);</source>
// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_0E588747(void);
</source>


=== SceSblQafMgrForDriver_4BC1883F ===
=== sceKernelUnlockSuspendProcForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x4BC1883F
| 0.931-3.740.011 || 0x230495ED
|}
|}


Like a sceSblQafMgrIsAllowPSPEmuDevelopmentForDriver.
This is a guessed name.
 
Temp name was sceKernelPowerUnlockForDriver.
 
Used in [[SceProcessmgr#sceKernelPowerUnlock]].


<source lang="C">
<source lang="C">int sceKernelPowerUnlockForDriver(SceUInt32 a1);</source>
// (*(uint8_t *)(qaf + 0x6) & 2)
int SceSblQafMgrForDriver_4BC1883F(void);
</source>


=== sceSblQafMgrIsAllowSystemAppDebugForDriver ===
=== SceKernelSuspendForDriver_FE2118BD ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xCAD47130
| 0.990.000-3.740.011 || 0xFE2118BD
|}
|}


Used by [[SceDeci4pDtracep]] and [[SceSblACMgr]].
=== sceKernelPowerSetIdleCallbackForDriver ===
 
If it returns false, syscalls debug trace printf is disabled.
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 2)
int sceSblQafMgrIsAllowSystemAppDebugForDriver(void);
</source>
 
=== sceSblQafMgrIsAllowKernelDebugForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x382C71E8
| 0.990.000-3.740.011 || 0xE677B343
|}
|}


Used by [[SceKernelModulemgr]], [[SceExcpmgr]], [[SceCrashDump]], [[SceHdmi]], [[SceKernelBlueScreenOfDeath]].
This is guessed name.


<source lang="C">
=== SceKernelSuspendForDriver_B4B13615 ===
// (*(uint8_t *)(qaf + 0xD) & 1)
int sceSblQafMgrIsAllowKernelDebugForDriver(void);
</source>
 
=== sceSblQafMgrIsAllowQAUpdateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x3CB55F98
| 0.990.000-3.740.011 || 0xB4B13615
|}
|}


Only used by [[SceSblUpdateMgr]].
=== SceKernelSuspendForDriver_AEA9440D ===
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowQAUpdateForDriver(void);
</source>
 
=== sceSblQafMgrIsAllowForceUpdateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x8C423C18
| 0.990.000-3.740.011 || 0xAEA9440D
|}
|}


Only used by [[SceSblUpdateMgr]].
=== SceKernelSuspendForDriver_81D9E41C ===
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xF) & 2)
int sceSblQafMgrIsAllowForceUpdateForDriver(void);
</source>
 
=== SceQafMgrForDriver_52B4E164 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x52B4E164
| 0.990.000-3.740.011 || 0x81D9E41C
|}
|}


Only used by [[SceWlanBt]] and [[SceEnumWakeUp]].
=== SceKernelSuspendForDriver_6A503956 ===
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 1)
int SceQafMgrForDriver_52B4E164(void);
</source>
 
=== SceQafMgrForDriver_883E9465 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x883E9465
| 0.990.000-3.740.011 || 0x6A503956
|}
|}


Temp name was sceSblQafMgrIsAllowDecryptedBootConfigLoadForDriver.
=== SceKernelSuspendForDriver_250ACD90 ===
 
Used by [[SceSysStateMgr]] only.
 
Allows loading psp2config.skprx as plaintext format.
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_883E9465(void);
</source>
 
=== SceQafMgrForDriver_B9770A13 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xB9770A13
| 0.990.000-3.740.011 || 0x250ACD90
|}
|}


Needed to be enabled to work with DIPSW 251 (Enable "dummytty0:"). Needed by [[SceSysStateMgr]] to allow loading <code>host0:psp2config.rpath</code>.
<source lang="C">int SceKernelSuspendForDriver_250ACD90(const SceKernelSuspendPowerCallback *pPowerCallback);</source>


Used by [[SceKernelModulemgr]] and [[SceSysmodule]].
=== SceKernelSuspendForDriver_0A6CA124 ===
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_B9770A13(void);
</source>
 
=== sceSblQafMgrIsAllowRemotePlayDebugForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xBFD5E463
| 0.990.000-3.740.011 || 0x0A6CA124
|}
|}


<source lang="C">
=== SceKernelSuspendForDriver_0106C0F0 ===
// (*(uint8_t *)(qaf + 0xC) & 2)
int sceSblQafMgrIsAllowRemotePlayDebugForDriver(void);
</source>
 
=== SceQafMgrForDriver_E573F124 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xE573F124
| 0.990.000-3.740.011 || 0x0106C0F0
|}
|}


<source lang="C">
=== sceKernelRegisterSysEventHandlerForDriver ===
// (*(uint8_t *)(qaf + 0x0) & 0x10)
int SceQafMgrForDriver_E573F124(void);
</source>
 
=== sceSblQafMgrIsAllowMarlinTestForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.03-3.60 || 0x10283EB8
| 0.990.000-3.740.011 || 0x04C05D10
|}
|}
Temp name was sceKernelSuspendRegisterCallbackForDriver.
Registers a function for handling suspend/resume. <code>resume</code> is 0 if we are currently suspending and 1 if we are currently resuming. <code>opt</code> is passed from the registration. Registration adds an entry to a linked list and returns the block id for the new entry.
Returns the suspend_handler_id.


<source lang="C">
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 2)
typedef int (* SceKernelSysEventHandler)(int resume, int event, void *param, void *argp);
int sceSblQafMgrIsAllowMarlinTestForDriver(void);
 
SceUID sceKernelRegisterSysEventHandlerForDriver(const char *name, SceKernelSysEventHandler handler, void *argp);
</source>
</source>


=== sceSblQafMgrIsAllowNearTestForDriver ===
=== SceKernelSuspendForDriver_CE7A2207 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.03-3.60 || 0x9644171D
| 0.990.000-3.740.011 || 0xCE7A2207
|}
|}


<source lang="C">
Registers a handler for a suspend event.
// (*(uint8_t *)(qaf + 0x6) & 2)
 
int sceSblQafMgrIsAllowNearTestForDriver(void);
<source lang="c">
// idx: ex: 0x15
// args: can be 0
SceUID SceKernelSuspendForDriver_CE7A2207(SceUInt idx, void *handler, void *args);
</source>
</source>


=== SceQafMgrForDriver_AE033133 ===
=== SceKernelSuspendForDriver_105C5752 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xAE033133
| 0.990.000-3.740.011 || 0x105C5752
|}
|}


Only used by [[SceNpDrm]].
Registers a handler for a resume event.


<source lang="C">
<source lang="c">
// (*(uint8_t *)(qaf + 0x0) & 0x10)
// idx: ex: 0x15
int SceQafMgrForDriver_AE033133(void);
// args: can be 0
SceUID SceKernelSuspendForDriver_105C5752(SceUInt idx, void *handler, void *args);
</source>
</source>


=== SceQafMgrForDriver_DEC6DF4E ===
=== SceKernelSuspendForDriver_D4958E6F ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xDEC6DF4E
| 0.990.000-3.740.011 || 0xD4958E6F
|}
|}


Only used by [[SceNpDrm]].
Dispatch handler registered by [[#SceKernelSuspendForDriver_CE7A2207]].


<source lang="C">
<source lang="c">SceUID SceKernelSuspendForDriver_D4958E6F(void *args);</source>
// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_DEC6DF4E(void);
</source>


=== sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver ===
=== sceKernelUnregisterSysEventHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB7B195B2
| 0.990.000-3.740.011 || 0xDD61D621
|}
|}


<source lang="C">
Call with the id returned from <code>suspend_register_handler</code> to remove the entry from the linked list and free the memory.
// (*(uint8_t *)(qaf + 0xF) & 1)
 
int sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver(void);
<source lang="c">int sceKernelUnregisterSysEventHandlerForDriver(SceUID id);</source>
</source>


=== sceSblQafMgrIsAllowLoadMagicGateForDriver ===
=== sceKernelSysEventDispatchForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x36E5312E
| 0.990.000-3.740.011 || 0xD4622EA8
|}
|}
This function goes through the linked list and calls each handler. If <code>ppFailed</code> is set, then the first handler that returns a negative value stops the call chain and returns the block id of the handler that broke the chain. Otherwise, this function invokes each handler and returns 0.


<source lang="C">
<source lang="C">
// (*(uint8_t *)(qaf + 0xB) & 0x10)
typedef struct _SceKernelSysEventDispatchSuspendParam {
int sceSblQafMgrIsAllowLoadMagicGateForDriver(void);
SceSize size;
SceUInt32 unk_0x04;
SceUInt32 unk_0x08;
SceUInt32 unk_0x0C;
void *pSuspendContextBuffer;
SceUInt32 unk_0x14;
} SceKernelSysEventDispatchSuspendParam;
 
typedef struct _SceKernelSysEventDispatchResumeParam {
SceSize size;
SceUInt32 unk_0x04;
} SceKernelSysEventDispatchResumeParam;
 
int sceKernelSysEventDispatchForDriver(SceUInt32 resume, SceUInt32 eventid, void *param, void **ppFailed);
</source>
</source>


=== sceSblQafMgrIsAllowDtcpIpResetForDriver ===
=== sceKernelPowerTickForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE8B8F31F
| 0.990.000-3.740.011 || 0xE0489831
|}
|}


<source lang="C">
Cancel specified idle timers to prevent entering in power save processing.
// (*(uint8_t *)(qaf + 0x6) & 2)
 
int sceSblQafMgrIsAllowDtcpIpResetForDriver(void);
Returns 0 on success.
 
<source lang="c">
typedef enum SceKernelPowerTickType {
/** Cancel all timers */
SCE_KERNEL_POWER_TICK_DEFAULT = 0,
/** Cancel automatic suspension timer */
SCE_KERNEL_POWER_TICK_DISABLE_AUTO_SUSPEND = 1,
/** Cancel OLED-off timer */
SCE_KERNEL_POWER_TICK_DISABLE_OLED_OFF = 4,
/** Cancel OLED dimming timer */
SCE_KERNEL_POWER_TICK_DISABLE_OLED_DIMMING = 6
} SceKernelPowerTickType;
 
int sceKernelPowerTickForDriver(int type);
</source>
</source>


=== sceSblQafMgrIsAllowControlIduAutoUpdateForDriver ===
=== SceKernelSuspendForDriver_1FA2F8F1 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF8BFEE48
| 1.000.071-3.740.011 || 0x1FA2F8F1
|}
|}


<source lang="C">
Calls a power handler.
// (*(uint8_t *)(qaf + 0x6) & 2)
 
int sceSblQafMgrIsAllowControlIduAutoUpdateForDriver(void);
<source lang="C">int SceKernelSuspendForDriver_1FA2F8F1(int a1, int a2);</source>
</source>


=== sceSblQafMgrIsAllowKeepCoreFileForDriver ===
=== SceKernelSuspendForDriver_F2B07167 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC1EA75C8
| 2.100.081-3.740.011 || 0xF2B07167
|}
|}


<source lang="C">
Registers a global variable used by [[#sceKernelPowerTickForDriver]].
// (*(uint8_t *)(qaf + 0xF) & 1)
 
int sceSblQafMgrIsAllowKeepCoreFileForDriver(void);
<source lang="C">int SceKernelSuspendForDriver_F2B07167(int a1);</source>
</source>


=== SceQafMgrForDriver_70A67A4B ===
=== SceKernelSuspendForDriver_B5C58EE8 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x70A67A4B
| 2.100.081-3.740.011 || 0xB5C58EE8
|}
|}


<source lang="C">
Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].
// (*(uint8_t *)(qaf + 0xF) & 1)
 
int SceQafMgrForDriver_70A67A4B(void);
<source lang="C">int SceKernelSuspendForDriver_B5C58EE8(int a1);</source>
</source>


=== SceQafMgrForDriver_41E04800 ===
=== SceKernelSuspendForDriver_D6124071 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x41E04800
| 2.100.081-3.740.011 || 0xD6124071
|}
|}


Only used by [[SceAppMgr]].
Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].


<source lang="C">
<source lang="C">int SceKernelSuspendForDriver_D6124071(int a1);</source>
// (*(uint8_t *)(qaf + 0xB) & 4)
int SceQafMgrForDriver_41E04800(void);
</source>


=== SceQafMgrForDriver_7B14DC45 ===
=== SceKernelSuspendForDriver_0DE3CC02 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x7B14DC45
| 2.100.081-3.740.011 || 0x0DE3CC02
|}
|}


Only used by [[SceAppMgr]].
Registers a global variable used by [[#SceKernelSuspendForDriver_2BB92967]].


<source lang="C">
<source lang="C">int SceKernelSuspendForDriver_0DE3CC02(int a1);</source>
// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_7B14DC45(void);
</source>


== ScePmMgrForDriver ==
=== SceKernelSuspendForDriver_4E5A3A23 ===
 
=== scePmMgrGetProductModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x2AC815A2
| 2.100.081-3.740.011 || 0x4E5A3A23
|}
|}


Returns 0 on success, 0x800f0a29 on failure.
Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].


Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].
<source lang="C">int SceKernelSuspendForDriver_4E5A3A23(int a1);</source>


result = ((int *)(kbl_param->boot_type_indicator_1) >> 2) & 1; // manufacturing mode flag
=== SceKernelSuspendForDriver_C00826AC ===
 
<source lang="C">int scePmMgrGetProductModeForDriver(char* result);</source>
 
=== scePmMgrIsExternalBootModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBD1F193B
| 2.100.081-3.740.011 || 0xC00826AC
|}
|}


Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].
Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].


return (int *)(kbl_param->boot_type_indicator_1) & 1; // external boot mode flag
<source lang="C">int SceKernelSuspendForDriver_C00826AC(int a1);</source>


<source lang="C">int scePmMgrIsExternalBootModeForDriver(void);</source>
=== SceKernelSuspendForDriver_8B3F02B8 ===
 
== SceSblAIMgrForDriver ==
 
=== sceSblAIMgrGetSMIForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x47D9CF13
| 2.100.081-3.740.011 || 0x8B3F02B8
|}
|}


SMI means Service / Manufacturing Information.
Registers a global variable used by [[#SceKernelSuspendForDriver_1FA2F8F1]].
 
<source lang="C">int SceKernelSuspendForDriver_8B3F02B8(int a1);</source>


SMI is read from SceKblParam->min_fw_version.
== SceQafMgrForDriver ==


<source lang="C">int sceSblAIMgrGetSMIForDriver(SceUInt32 *pSMI);</source>
Provides many device permission checks including running app privilege checks, debugging enabled checks, and so on.


=== sceSblAIMgrGetProductCodeForDriver ===
=== SceQafMgrForDriver_41E04800 ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x14345161
| 0.931 || 0x4F20A014
|-
| 3.60 || not present
|}
|}


Temp name was sceSblAIMgrGetTargetIdForDriver.
=== SceQafMgrForDriver_082A4FC2 ===
 
Product Code = Target Id
 
<source lang="C">int sceSblAIMgrGetProductCodeForDriver(void);</source>
 
=== sceSblAIMgrGetProductSubCodeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xB33CEC8F
| 0.931-3.60 || 0x082A4FC2
|}
|}


Product Sub Code = model revision
Temp name was sceSblQafMgrIsAllowHost0AccessForDriver. A potential name could be sceSblQafMgrIsAllowRemoteLoadForDriver.
 
Used by [[SceSblFwLoader#sceSblFwLoaderLockForDriver|sceSblFwLoaderLockForDriver]], [[SceKernelModulemgr]], [[SceSysStateMgr]] and [[SceSblPostSsMgr]].
 
Used by [[SceSblPostSsMgr#sceSblSpsfoMgrOpenForDriver|sceSblSpsfoMgrOpenForDriver]].
 
When this flag is set, it allows for example to load some files from host0:, for example SPSFO and psp2config.skprx.


<source lang="C">int sceSblAIMgrGetProductSubCodeForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_082A4FC2(void);
</source>


=== sceSblAIMgrIsTestForDriver ===
=== sceSblQafMgrIsAllowGameDebugForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3B638885
| 0.931-3.60 || 0x694D1096
|}
|}


TEST = Internal Test Unit
This is a guessed name.
 
Only used by [[SceSblACMgr]].


Returns true if PsCode Product Code == 0x100.
Might be something like sceSblQafMgrIsAllowUserAppDebug.


<source lang="C">int sceSblAIMgrIsTestForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xB) & 4)
int sceSblQafMgrIsAllowGameDebugForDriver(void);
</source>


=== sceSblAIMgrIsToolForDriver ===
=== SceQafMgrForDriver_0E588747 ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x274663A0
| 0.931-3.60 || 0x0E588747
|}
|}


TOOL = DevKit
Only used by [[SceRegistryMgr]].


Returns true if PsCode Product Code == 0x101.
Returns true if the PSVita is an "Internal system".


<source lang="C">int sceSblAIMgrIsToolForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_0E588747(void);
</source>


=== sceSblAIMgrIsDEXForDriver ===
=== SceSblQafMgrForDriver_4BC1883F ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF4B98F66
| 0.931-3.60 || 0x4BC1883F
|}
|}


Returns true if PsCode Product Code == 0x102.
Like a sceSblQafMgrIsAllowPSPEmuDevelopmentForDriver.


<source lang="C">int sceSblAIMgrIsDEXForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0x6) & 2)
int SceSblQafMgrForDriver_4BC1883F(void);
</source>


=== sceSblAIMgrIsCEXForDriver ===
=== sceSblQafMgrIsAllowSystemAppDebugForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD78B04A2
| 0.931-3.60 || 0xCAD47130
|}
|}


Returns true if PsCode Product Code 0x103-0x111 AND sceSblAIMgrIsSpecialCEXForDriver returns false.
Used by [[SceDeci4pDtracep]] and [[SceSblACMgr]].


<source lang="C">int sceSblAIMgrIsCEXForDriver(void);</source>
If it returns false, syscalls debug trace printf is disabled.


=== sceSblAIMgrIsVITAForDriver ===
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 2)
int sceSblQafMgrIsAllowSystemAppDebugForDriver(void);
</source>
 
=== sceSblQafMgrIsAllowKernelDebugForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.931-3.60 || 0x382C71E8
|-
| 2.100.081-3.740.011 || 0x4273B97B
|}
|}


Returns sceSblAIMgrIsGenuineVITAForDriver. If the console is a PS TV, it returns false.
Used by [[SceKernelModulemgr]], [[SceExcpmgr]], [[SceCrashDump]], [[SceHdmi]], [[SceKernelBlueScreenOfDeath]].


<source lang="C">int sceSblAIMgrIsVITAForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 1)
int sceSblQafMgrIsAllowKernelDebugForDriver(void);
</source>


=== sceSblAIMgrIsDolceForDriver ===
=== sceSblQafMgrIsAllowQAUpdateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931.010-2.060.011 || not present
| 0.931-3.60 || 0x3CB55F98
|-
| 2.100.081-3.740.011 || 0x71608CA3
|}
|}


Returns sceSblAIMgrIsGenuineDolceForDriver if returns true else returns sceKernelCheckDipswForDriver(0x98).
Only used by [[SceSblUpdateMgr]].


<source lang="C">int sceSblAIMgrIsDolceForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowQAUpdateForDriver(void);
</source>


=== sceSblAIMgrIsGenuineVITAForDriver ===
=== sceSblQafMgrIsAllowForceUpdateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x963CA644
| 0.931-3.60 || 0x8C423C18
|}
|}


Returns true if:
Only used by [[SceSblUpdateMgr]].
*PsCode Product Code <= 0x111 AND sceSblAIMgrIsGenuineDolceForDriver returns false
*sceSblAIMgrIsSpecialCEXForDriver returns true AND HardwareInfo != 0x700000 != 0x720000 != 0x510000


<source lang="C">int sceSblAIMgrIsGenuineVITAForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xF) & 2)
int sceSblQafMgrIsAllowForceUpdateForDriver(void);
</source>


=== sceSblAIMgrIsGenuineDolceForDriver ===
=== SceQafMgrForDriver_52B4E164 ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC6E83F34
| 0.931-3.60 || 0x52B4E164
|}
|}


<source lang="C">int sceSblAIMgrIsGenuineDolceForDriver(void);</source>
Only used by [[SceWlanBt]] and [[SceEnumWakeUp]].
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 1)
int SceQafMgrForDriver_52B4E164(void);
</source>


=== sceSblAIMgrIsDiagForDriver ===
=== SceQafMgrForDriver_883E9465 ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x6D5A3FC9
| 0.931-3.60 || 0x883E9465
|}
|}


Temp name was sceSblAIMgrIsSpecialCEXForDriver, sceSblAIMgrIsCEXJpFatForDriver.
Temp name was sceSblQafMgrIsAllowDecryptedBootConfigLoadForDriver.


Returns true if PsCode Product Code == 0x103 (Japan), PsCode Product Sub Code == 0x10 (FAT chassis) and PsCode Factory Code == 0x24 (SCE labs).
Used by [[SceSysStateMgr]] only.


<source lang="C">int sceSblAIMgrIsDiagForDriver(void);</source>
Allows loading psp2config.skprx as plaintext format.


=== sceSblAIMgrIsToolDVT1ForDriver ===
<source lang="C">
{| class="wikitable"
// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_883E9465(void);
</source>
 
=== SceQafMgrForDriver_B9770A13 ===
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xBB9D146B
| 0.931-3.60 || 0xB9770A13
|}
|}


Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 3.
Needed to be enabled to work with DIPSW 251 (Enable "dummytty0:"). Needed by [[SceSysStateMgr]] to allow loading <code>host0:psp2config.rpath</code>.
 
Used by [[SceKernelModulemgr]] and [[SceSysmodule]].


<source lang="C">int sceSblAIMgrIsToolDVT1ForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_B9770A13(void);
</source>


=== sceSblAIMgrIsToolRev4ForDriver ===
=== sceSblQafMgrIsAllowRemotePlayDebugForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x37A79140
| 0.931-3.60 || 0xBFD5E463
|}
|}


Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 4.
<source lang="C">
// (*(uint8_t *)(qaf + 0xC) & 2)
int sceSblQafMgrIsAllowRemotePlayDebugForDriver(void);
</source>


<source lang="C">int sceSblAIMgrIsToolRev4ForDriver(void);</source>
=== SceQafMgrForDriver_E573F124 ===
 
=== sceSblAIMgrIsToolDVT2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE5E47FF7
| 0.931-3.60 || 0xE573F124
|}
|}


Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 5.
<source lang="C">
// (*(uint8_t *)(qaf + 0x0) & 0x10)
int SceQafMgrForDriver_E573F124(void);
</source>


<source lang="C">int sceSblAIMgrIsToolDVT2ForDriver(void);</source>
=== sceSblQafMgrIsAllowMarlinTestForDriver ===
 
=== sceSblAIMgrIsCEXPrototypeRev2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xFF5784B9
| 1.03-3.60 || 0x10283EB8
|}
|}


Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 2.
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 2)
int sceSblQafMgrIsAllowMarlinTestForDriver(void);
</source>


<source lang="C">int sceSblAIMgrIsCEXPrototypeRev2ForDriver(void);</source>
=== sceSblQafMgrIsAllowNearTestForDriver ===
 
=== sceSblAIMgrIsCEXPrototypeRev7ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x05F79D4A
| 1.03-3.60 || 0x9644171D
|}
|}


Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 7.
<source lang="C">
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowNearTestForDriver(void);
</source>


<source lang="C">int sceSblAIMgrIsCEXPrototypeRev7ForDriver(void);</source>
=== SceQafMgrForDriver_AE033133 ===
 
== SceProcEventForDriver ==
 
=== sceKernelUnregisterProcEventHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3DED57CC
| 3.60 || 0xAE033133
|}
|}


Temp name was sceProcEventDeleteUidForDriver.
Only used by [[SceNpDrm]].


Wrapper to [[SceSysmem#sceGUIDCloseForDriver|sceGUIDCloseForDriver]].
<source lang="C">
// (*(uint8_t *)(qaf + 0x0) & 0x10)
int SceQafMgrForDriver_AE033133(void);
</source>


<source lang="C">int sceKernelUnregisterProcEventHandlerForDriver(int uid);</source>
=== SceQafMgrForDriver_DEC6DF4E ===
 
=== sceKernelRegisterProcEventHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x2A43912D
| 3.60 || 0xDEC6DF4E
|}
|}


Temp name was sceProcEventCreateEventForDriver.
Only used by [[SceNpDrm]].


Uses [[SceSysmem#sceKernelCreateEventForDriver|sceKernelCreateEventForDriver]].
<source lang="C">
// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_DEC6DF4E(void);
</source>


Returns uid.
=== sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xB7B195B2
|}


<source lang="C">
<source lang="C">
typedef struct SceProcEventInvokeParam1 {
// (*(uint8_t *)(qaf + 0xF) & 1)
SceSize size;                                    // SceProcEventInvokeParam1 struct size : 0x10
int sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver(void);
int unk_0x04;
int unk_0x08;
int unk_0x0C;
} SceProcEventInvokeParam1;
 
typedef struct SceProcEventInvokeParam2 {
SceSize size;                                    // SceProcEventInvokeParam2 struct size : 0x14
SceUID pid;
int unk_0x08;
int unk_0x0C;
int unk_0x10;
} SceProcEventInvokeParam2;
 
typedef struct SceProcEventHandler {
SceSize size;                                                                              // SceProcEventHandler struct size : 0x1C
int (* create)(SceUID pid, SceProcEventInvokeParam2 *pParam, void *pCommon);
int (* exit)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon);                            // current process exit
int (* kill)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon);                            // by SceShell
int (* suspend)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);
int (* resume)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);
int (* event_notify)(int evtype, int phase, SceProcEventInvokeParam2 *pParam, void *pCommon);          //for arbitrary event types
} SceProcEventHandler;
 
/***
* Registers a process event handler
*
* @param[in] name    - Name of the event handler
* @param[in] pHandler - Pointer to the handler structure
* @param[in] pCommon  - Arbitrary data passed to handlers
*
* @return Positive on success, < 0 on error.
* @note Event handler pointers in pHandler may be NULL.
*/
SceUID sceKernelRegisterProcEventHandlerForDriver(const char *name, SceProcEventHandler *pHandler, void *pCommon);
</source>
</source>


=== sceKernelInvokeProcEventHandlerForDriver ===
=== sceSblQafMgrIsAllowLoadMagicGateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x414CC813
| 3.60 || 0x36E5312E
|}
|}
Walks the list of registered process event handlers and invokes the ones related to the signaled event.


<source lang="C">
<source lang="C">
//Event type constants (for evtype parameter)
// (*(uint8_t *)(qaf + 0xB) & 0x10)
#define CREATE_EVENT  1  //<! Call create() handlers
int sceSblQafMgrIsAllowLoadMagicGateForDriver(void);
#define EXIT_EVENT    2  //<! Call exit() handlers
#define KILL_EVENT    3  //<! Call kill() handlers
#define SUSPEND_EVENT 4  //<! Call suspend() handlers
#define RESUME_EVENT  5  //<! Call resume() handlers
//All other values result in event_notify() handlers being called
 
/***
* Invoke process event handlers
*
* @param[in]  process - PID of the process for which event happened
* @param[in]  evtype  - Event type
* @param[in]  phase  - Unknown
* @param[in]  pParam  - Pointer to handler parameter
* @param[out] pFailer - Pointer to a variable that receives UID of a failing handler. May be NULL.
* @param[in]  stop    - GUID of a handler that should stop execution
*
* @return Positive number on success, < 0 on error.
* Corresponds to the last executed handler's return value (or SCE_OK if none were executed).
*
* @note process, pFailer and stop are unofficial argument names
*
* Invocation is performed by walking the list in order (from first to last registered handler):
*  - If the GUID of the handler matches the "stop" parameter, the handle is NOT executed and the function returns.
*    This can be used to ensure only process event handlers registered before a specific one are executed.
*  - If the handler has no function pointer corresponding to the evtype, execution continues with the next handler.
*  - If the handler has a function pointer corresponding to the evtype, the function is called with the appropriate
*    arguments. If the return value is positive, execution continues with the next handler. If the return value is
*    negative, the handler has failed, the GUID of the failing handler is saved in *pFailer if non-NULL and the function
*    returns directly.
*/
int sceKernelInvokeProcEventHandlerForDriver(ScePID pid, int evtype, int phase, void* pParam, SceUID *pFailer, SceUID stop);
</source>
</source>


== SceDebugLed ==
=== sceSblQafMgrIsAllowDtcpIpResetForDriver ===
 
=== sceKernelGetGPI ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x14F582CF
| 3.60 || 0xE8B8F31F
|}
|}


<source lang="C">int sceKernelGetGPI(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowDtcpIpResetForDriver(void);
</source>


=== sceKernelSetGPO ===
=== sceSblQafMgrIsAllowControlIduAutoUpdateForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x78E702D3
| 3.60 || 0xF8BFEE48
|}
|}


<source lang="C">
<source lang="C">
/**
// (*(uint8_t *)(qaf + 0x6) & 2)
* @brief Output to LED
int sceSblQafMgrIsAllowControlIduAutoUpdateForDriver(void);
*
* This sets the content displayed on the DevKit LED.
* @param[in] uiBitd Bit pattern. only low-order 8 bits are valid.
*/
int sceKernelSetGPO(SceUInt32 uiBits);
</source>
</source>


=== call_cb74 ===
=== sceSblQafMgrIsAllowKeepCoreFileForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2B6EABAD
| 3.60 || 0xC1EA75C8
|}
|}


<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowKeepCoreFileForDriver(void);
</source>


=== call_cb78 ===
=== SceQafMgrForDriver_70A67A4B ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0E6B9890
| 3.60 || 0x70A67A4B
|}
|}


<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source>
<source lang="C">
 
// (*(uint8_t *)(qaf + 0xF) & 1)
== SceDebugLedForDriver ==
int SceQafMgrForDriver_70A67A4B(void);
</source>


GPI stands for General Purpose Input, and GPO stands for General Purpose Output.
=== SceQafMgrForDriver_41E04800 ===
 
=== sceKernelGetGPIForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x14F582CF
| 3.60 || 0x41E04800
|}
|}


Only SceDebugLedForDriver function used by SceCoredump.
Only used by [[SceAppMgr]].


<source lang="C">int sceKernelGetGPIForDriver(void);</source>
<source lang="C">
// (*(uint8_t *)(qaf + 0xB) & 4)
int SceQafMgrForDriver_41E04800(void);
</source>


=== sceKernelSetGPIForDriver ===
=== SceQafMgrForDriver_7B14DC45 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x51C5325A
| 3.60 || 0x7B14DC45
|}
|}


<source lang="C">int sceKernelSetGPIForDriver(int value);</source>
Only used by [[SceAppMgr]].
 
<source lang="C">
// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_7B14DC45(void);
</source>
 
== ScePmMgrForDriver ==


=== sceKernelGetGPOForDriver ===
=== scePmMgrGetProductModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3BB289F7
| 0.931-3.60 || 0x2AC815A2
|}
|}


<source lang="C">int sceKernelGetGPOForDriver(void);</source>
Returns 0 on success, 0x800f0a29 on failure.
 
Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].
 
result = ((int *)(kbl_param->boot_type_indicator_1) >> 2) & 1; // manufacturing mode flag
 
<source lang="C">int scePmMgrGetProductModeForDriver(char* result);</source>


=== sceKernelSetGPOForDriver ===
=== scePmMgrIsExternalBootModeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x78E702D3
| 3.60 || 0xBD1F193B
|}
|}


<source lang="C">int sceKernelSetGPOForDriver(SceUInt32 uiBits);</source>
Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].
 
return (int *)(kbl_param->boot_type_indicator_1) & 1; // external boot mode flag
 
<source lang="C">int scePmMgrIsExternalBootModeForDriver(void);</source>
 
== SceSblAIMgrForDriver ==


=== sceKernelSetGPOMaskForDriver ===
=== sceSblAIMgrGetSMIForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x098473B0
| 3.60 || 0x47D9CF13
|}
|}


<source lang="C">sceKernelSetGPOMaskForDriver(int a1, int a2);</source>
SMI means Service / Manufacturing Information.
 
SMI is read from SceKblParam->min_fw_version.
 
<source lang="C">int sceSblAIMgrGetSMIForDriver(SceUInt32 *pSMI);</source>


=== call_cb74 ===
=== sceSblAIMgrGetProductCodeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2B6EABAD
| 3.60 || 0x14345161
|}
|}


<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source>
Temp name was sceSblAIMgrGetTargetIdForDriver.


=== set_cb74 ===
Product Code = Target Id
 
<source lang="C">int sceSblAIMgrGetProductCodeForDriver(void);</source>
 
=== sceSblAIMgrGetProductSubCodeForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x24173819
| 3.60 || 0xB33CEC8F
|}
|}


<source lang="C">int set_cb74(void *cb);</source>
Product Sub Code = model revision
 
<source lang="C">int sceSblAIMgrGetProductSubCodeForDriver(void);</source>


=== call_cb78 ===
=== sceSblAIMgrIsTestForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0E6B9890
| 3.60 || 0x3B638885
|}
|}


<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source>
TEST = Internal Test Unit
 
Returns true if PsCode Product Code == 0x100.
 
<source lang="C">int sceSblAIMgrIsTestForDriver(void);</source>


=== set_cb78 ===
=== sceSblAIMgrIsToolForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF62154E7
| 3.60 || 0x274663A0
|}
|}


<source lang="C">int set_cb78(void *cb);</source>
TOOL = DevKit
 
Returns true if PsCode Product Code == 0x101.


== SceDebugForKernel ==
<source lang="C">int sceSblAIMgrIsToolForDriver(void);</source>


=== sceKernelDebugModuleStart2ForKernel ===
=== sceSblAIMgrIsDEXForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xF624CE22
| 3.60 || 0xF4B98F66
|}
|}


<source lang="C">int sceKernelDebugModuleStart2ForKernel(void);</source>
Returns true if PsCode Product Code == 0x102.
 
<source lang="C">int sceSblAIMgrIsDEXForDriver(void);</source>


=== sceKernelRegisterKprintfHandlerForKernel ===
=== sceSblAIMgrIsCEXForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x10067B7B
| 3.60 || 0xD78B04A2
|}
|}


Temp name was sceDebugSetHandlersForKernel.
Returns true if PsCode Product Code 0x103-0x111 AND sceSblAIMgrIsSpecialCEXForDriver returns false.


<source lang="c">int sceKernelRegisterKprintfHandlerForKernel(int (*kprintf)(const char *fmt, ...), const void *args);</source>
<source lang="C">int sceSblAIMgrIsCEXForDriver(void);</source>


=== sceKernelGetDebugPutcharForKernel ===
=== sceSblAIMgrIsVITAForDriver ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931.010-2.060.011 || not present
|-
|-
| 3.60 || 0xE783518C
| 2.100.081-3.740.011 || 0x4273B97B
|}
|}


Temp name was sceDebugGetPutcharHandlerForKernel.
Returns sceSblAIMgrIsGenuineVITAForDriver. If the console is a PS TV, it returns false.


Returns pointer to current debug putchar handler.
<source lang="C">int sceSblAIMgrIsVITAForDriver(void);</source>


<source lang="c">void *sceKernelGetDebugPutcharForKernel(void);</source>
=== sceSblAIMgrIsDolceForDriver ===
 
=== sceKernelRegisterDebugPutcharForKernel ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931.010-2.060.011 || not present
|-
|-
| 3.60 || 0xE6115A72
| 2.100.081-3.740.011 || 0x71608CA3
|}
|}


Temp name was sceDebugRegisterPutcharHandlerForKernel.
Returns sceSblAIMgrIsGenuineDolceForDriver if returns true else returns sceKernelCheckDipswForDriver(0x98).


Set debug print char handler.
<source lang="C">int sceSblAIMgrIsDolceForDriver(void);</source>


<source lang="c">int sceKernelRegisterDebugPutcharForKernel(int (*debug_putchar)(const void *args, char c), const void *args);</source>
=== sceSblAIMgrIsGenuineVITAForDriver ===
 
=== sceKernelDebugPutcharForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x82D2EDCE
| 3.60 || 0x963CA644
|}
|}


Temp name was sceDebugPutcharForKernel.
Returns true if:
*PsCode Product Code <= 0x111 AND sceSblAIMgrIsGenuineDolceForDriver returns false
*sceSblAIMgrIsSpecialCEXForDriver returns true AND HardwareInfo != 0x700000 != 0x720000 != 0x510000


Print character.
<source lang="C">int sceSblAIMgrIsGenuineVITAForDriver(void);</source>


Return 1.
=== sceSblAIMgrIsGenuineDolceForDriver ===
{| class="wikitable"
! Version !! NID
|-
| 3.60 || 0xC6E83F34
|}


<source lang="c">int sceKernelDebugPutcharForKernel(char c);</source>
<source lang="C">int sceSblAIMgrIsGenuineDolceForDriver(void);</source>


=== sceKernelTtyPutcharForKernel ===
=== sceSblAIMgrIsDiagForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 3.60 || 0x6D5A3FC9
|-
| 3.60 || 0x254A4997
|}
|}


This is a guessed name.
Temp name was sceSblAIMgrIsSpecialCEXForDriver, sceSblAIMgrIsCEXJpFatForDriver.


Prints a character to the 0x1000-byte buffer returned by [[SceSysmem#sceKernelGetTtyInfoForDriver]].
Returns true if PsCode Product Code == 0x103 (Japan), PsCode Product Sub Code == 0x10 (FAT chassis) and PsCode Factory Code == 0x24 (SCE labs).


On success, returns printed size (always 1).
<source lang="C">int sceSblAIMgrIsDiagForDriver(void);</source>


<source lang="c">int sceKernelTtyPutcharForKernel(char c);</source>
=== sceSblAIMgrIsToolDVT1ForDriver ===
 
=== sceKernelStoppedForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xF1F0C365
| 0.931-3.60 || 0xBB9D146B
|-
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelStoppedForKernel(const char *pFile, const char *pFunc, int line);</source>
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 3.
 
<source lang="C">int sceSblAIMgrIsToolDVT1ForDriver(void);</source>


=== panic_on_kernel_exception ===
=== sceSblAIMgrIsToolRev4ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 3.60 || 0x37A79140
|-
| 3.60 || 0x082B8D6A
|-
| 3.65 || 0xCCABDD98
|}
|}


Prints information about a Kernel Exception, ?and certainly calls [[SceCoredump]]?, then calls SceSysrootForKernel_0DF574A9 in an infinite loop.
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 4.


This function doesn't return.
<source lang="C">int sceSblAIMgrIsToolRev4ForDriver(void);</source>


See [[SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel]] for the meaning of excpcode.
=== sceSblAIMgrIsToolDVT2ForDriver ===
 
<source lang="C">
// excp_name can be:
// UNDEF - Undefined instruction
// PABT - Prefetch Abort
// DABT - Data Abort
// NEST - Nested? Same excpcode as UNDEF
void panic_on_kernel_exception(kernel_message_ctx *msg_ctx, SceExcpmgrExceptionContext *excp_ctx, int excpcode, const char *excp_name);
</source>
 
=== register_unk_handler ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 3.60 || 0xE5E47FF7
|-
| 3.60 || 0x66D82EC8
|}
|}


used by [[SceDeci4pSDbgp]].
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 5.


handler definition:
<source lang="C">int sceSblAIMgrIsToolDVT2ForDriver(void);</source>
<source lang="C">handler(int some_level, void *unk, const void *buf);</source>


<source lang="C">int register_unk_handler(void *handler);</source>
=== sceSblAIMgrIsCEXPrototypeRev2ForDriver ===
 
=== set_info_dump_flag ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 3.60 || 0xFF5784B9
|-
| 3.60 || 0xF857CDD6
|-
| 3.71 || 0xA465A31A
|}
|}


Temp name was sceDebugDisableInfoDumpForKernel.
Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 2.


Returns previous info dump flag.
<source lang="C">int sceSblAIMgrIsCEXPrototypeRev2ForDriver(void);</source>


<source lang="C">
=== sceSblAIMgrIsCEXPrototypeRev7ForDriver ===
// ex: set_info_dump_flag(0); as used in henkaku/payload.c
// flag: 0: disable, 1: enable
int set_info_dump_flag(int flag);
</source>
 
=== register_log_buffer ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x4703ECC4
| 3.60 || 0x05F79D4A
|-
| 3.60 || not present
|}
|}


<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source>
Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 7.


=== start_logging ===
<source lang="C">int sceSblAIMgrIsCEXPrototypeRev7ForDriver(void);</source>
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x4C377B11
|-
| 3.60 || not present
|}


Returns 1 if logging has been started successfully, -1 else.
== SceProcEventForDriver ==


<source lang="C">int start_logging(int state);</source>
=== sceKernelUnregisterProcEventHandlerForDriver ===
 
=== stop_logging ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x604F56AE
| 3.60 || 0x3DED57CC
|-
| 3.60 || not present
|}
|}


If state is not zero, stops logging and return 1, else does nothing and return 0.
Temp name was sceProcEventDeleteUidForDriver.


Returns 1 if logging has been stopped, 0 else.
Wrapper to [[SceSysmem#sceGUIDCloseForDriver|sceGUIDCloseForDriver]].


<source lang="C">int stop_logging(void);</source>
<source lang="C">int sceKernelUnregisterProcEventHandlerForDriver(int uid);</source>


=== refresh_logs ===
=== sceKernelRegisterProcEventHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x04A3046D
| 0.990-3.60 || 0x2A43912D
|-
| 3.60 || not present
|}
|}


<source lang="C">int refresh_logs(void);</source>
Temp name was sceProcEventCreateEventForDriver.


=== _sceKernelPrintDebugLogForKernel ===
Uses [[SceSysmem#sceKernelCreateEventForDriver|sceKernelCreateEventForDriver]].
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0xEFDE973B
|-
| 3.60 || not present
|}


If a2 is not zero, the current log buffer address is updated, else it is unchanged.
Returns uid.


maxNum is guessed to be either the number of entries or the index of the chosen entry. Entry size is 0x40 bytes.
<source lang="C">
typedef struct SceProcEventInvokeParam1 {
SceSize size;                                    // SceProcEventInvokeParam1 struct size : 0x10
int unk_0x04;
int unk_0x08;
int unk_0x0C;
} SceProcEventInvokeParam1;
 
typedef struct SceProcEventInvokeParam2 {
SceSize size;                                    // SceProcEventInvokeParam2 struct size : 0x14
SceUID pid;
int unk_0x08;
int unk_0x0C;
int unk_0x10;
} SceProcEventInvokeParam2;


Uses sceKernelPrintfLevelForDriver to print.
typedef struct SceProcEventHandler {
SceSize size;                                                                              // SceProcEventHandler struct size : 0x1C
int (* create)(SceUID pid, SceProcEventInvokeParam2 *pParam, void *pCommon);
int (* exit)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon);                            // current process exit
int (* kill)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon);                            // by SceShell
int (* suspend)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);
int (* resume)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);
int (* event_notify)(int evtype, int phase, SceProcEventInvokeParam2 *pParam, void *pCommon);          //for arbitrary event types
} SceProcEventHandler;


<source lang="C">int _sceKernelPrintDebugLogForKernel(int a1, int a2, int maxNum);</source>
/***
* Registers a process event handler
*
* @param[in] name    - Name of the event handler
* @param[in] pHandler - Pointer to the handler structure
* @param[in] pCommon  - Arbitrary data passed to handlers
*
* @return Positive on success, < 0 on error.
* @note Event handler pointers in pHandler may be NULL.
*/
SceUID sceKernelRegisterProcEventHandlerForDriver(const char *name, SceProcEventHandler *pHandler, void *pCommon);
</source>


=== sceKernelPrintDebugLogForKernel ===
=== sceKernelInvokeProcEventHandlerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xBD5D0BB0
| 3.60 || 0x414CC813
|-
| 3.60 || not present
|}
|}


Calls _sceKernelPrintDebugLogForKernel with maxNum = (log_buf_end - log_buf_start) / 0x40.
Walks the list of registered process event handlers and invokes the ones related to the signaled event.


<source lang="C">int sceKernelPrintDebugLogForKernel(int a1, int a2);</source>
<source lang="C">
//Event type constants (for evtype parameter)
#define CREATE_EVENT  1  //<! Call create() handlers
#define EXIT_EVENT    2  //<! Call exit() handlers
#define KILL_EVENT    3  //<! Call kill() handlers
#define SUSPEND_EVENT 4  //<! Call suspend() handlers
#define RESUME_EVENT  5  //<! Call resume() handlers
//All other values result in event_notify() handlers being called


=== print_with_log_buffer ===
/***
{| class="wikitable"
* Invoke process event handlers
|-
*
! Version !! NID
* @param[in]  process - PID of the process for which event happened
|-
* @param[in]  evtype  - Event type
| 0.931 || 0x904FF72D
* @param[in]  phase  - Unknown
|-
* @param[in]  pParam  - Pointer to handler parameter
| 3.60 || not present
* @param[out] pFailer - Pointer to a variable that receives UID of a failing handler. May be NULL.
|}
* @param[in]  stop    - GUID of a handler that should stop execution
 
*
<source lang="C">int print_with_log_buffer(const char *string, SceSize maxlen);</source>
* @return Positive number on success, < 0 on error.  
 
* Corresponds to the last executed handler's return value (or SCE_OK if none were executed).
=== sceKernelPrintfCore0ForKernel ===
*
{| class="wikitable"
* @note process, pFailer and stop are unofficial argument names
|-
*
! Version !! NID
* Invocation is performed by walking the list in order (from first to last registered handler):
|-
*  - If the GUID of the handler matches the "stop" parameter, the handle is NOT executed and the function returns.
| 0.931 || 0x2D7380FE
*    This can be used to ensure only process event handlers registered before a specific one are executed.
|-
- If the handler has no function pointer corresponding to the evtype, execution continues with the next handler.
| 3.60 || not present
- If the handler has a function pointer corresponding to the evtype, the function is called with the appropriate
|}
*    arguments. If the return value is positive, execution continues with the next handler. If the return value is
*    negative, the handler has failed, the GUID of the failing handler is saved in *pFailer if non-NULL and the function
*    returns directly.
*/
int sceKernelInvokeProcEventHandlerForDriver(ScePID pid, int evtype, int phase, void* pParam, SceUID *pFailer, SceUID stop);
</source>


Same as sceKernelPrintfForDriver but only prints if CPU ID is 0.
== SceDebugLed ==


<source lang="C">int sceKernelPrintfCore0ForKernel(const char *fmt, ...);</source>
=== sceKernelGetGPI ===
 
=== sceKernelPrintfLevelCore0ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x14241F51
| 3.60 || 0x14F582CF
|-
| 3.60 || not present
|}
|}


Same as sceKernelPrintfLevelForDriver but only prints if CPU ID is 0.
<source lang="C">int sceKernelGetGPI(void);</source>


<source lang="C">int sceKernelPrintfLevelCore0ForKernel(int level, const char *fmt, ...);</source>
=== sceKernelSetGPO ===
 
=== sceKernelSetMinimumLogLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xBE2C05A2
| 3.60 || 0x78E702D3
|}
|}


<source lang="C">
<source lang="C">
/**
/**
  * @brief Specifies the minimum severity level for the output of logging information.
  * @brief Output to LED
  *
  *
  * Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.
  * This sets the content displayed on the DevKit LED.
*
  * @param[in] uiBitd Bit pattern. only low-order 8 bits are valid.
  * @param minimumLogLevel The minimum severity at which debugging messages should be output.
* @retval SCE_OK          The operation was completed successfully.
* @retval Negative value Error code
  */
  */
int sceKernelSetMinimumLogLevelForKernel(SceInt32 minimumLogLevel);
int sceKernelSetGPO(SceUInt32 uiBits);
</source>
</source>


=== sceKernelGetMinimumLogLevelForKernel ===
=== call_cb74 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xDA6B6770
| 3.60 || 0x2B6EABAD
|-
| 3.60 || not present
|}
|}


Returns the minimumLogLevel set by sceKernelSetMinimumLogLevelForKernel.
<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source>


<source lang="C">SceInt32 sceKernelGetMinimumLogLevelForKernel(void);</source>
=== call_cb78 ===
 
=== sceKernelSetAssertLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xCE9060F1
| 3.60 || 0x0E6B9890
|}
|}


Temp name was sceKernelSetMinimumAssertionLevelForKernel.
<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source>


Overrides in memory g_assertLevel set by DIP switches 201 and 202.
== SceDebugLedForDriver ==


Returns the previous assert level.
GPI stands for General Purpose Input, and GPO stands for General Purpose Output.


<source lang="C">SceInt32 sceKernelSetAssertLevelForKernel(SceUInt32 assertLevel);</source>
=== sceKernelGetGPIForDriver ===
 
=== sceKernelGetAssertLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x374B7868
| 3.60 || 0x14F582CF
|-
| 0.990-3.60 || not present. Present in [[#SceDebugForDriver]].
|}
|}


Temp name was sceKernelGetMinimumAssertionLevelForKernel.
Only SceDebugLedForDriver function used by SceCoredump.


Returns g_assertLevel from memory.
<source lang="C">int sceKernelGetGPIForDriver(void);</source>


<source lang="C">SceInt32 sceKernelGetAssertLevelForKernel(void);</source>
=== sceKernelSetGPIForDriver ===
 
=== SceDebugForKernel_BEF921A2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 3.60 || 0x51C5325A
|-
| 3.60-3.61 || 0xBEF921A2
|-
| 3.63 || 0x5D6F0CFC
|}
|}


<source lang="C">
<source lang="C">int sceKernelSetGPIForDriver(int value);</source>
// buf size is 0x1000 bytes
// buf_400 size is 0x400 bytes
SceSSize SceDebugForKernel_BEF921A2(void *dst, int cpuId, SceUInt64 time, kernel_message_ctx *msg_ctx, const void *excp_info_buf_0x400, int excpcode);
</source>


=== add_entry ===
=== sceKernelGetGPOForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x1208240D
| 3.60 || 0x3BB289F7
|-
| 3.60 || not present
|}
|}


<source lang="C">
<source lang="C">int sceKernelGetGPOForDriver(void);</source>
// ex: add_entry(0xA1, in_lr, 3, name); in SceSysmem
// ex: add_entry(0xAB, in_lr, 1, uid); in SceSysmem
// ex: add_entry(0xBB, in_lr, 0, param_4); in SceProcessmgr
int add_entry(SceSize maxlen, int a2, int a3, void *log_buffer_start);
</source>


=== add_entry2 ===
=== sceKernelSetGPOForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x061A4657
| 3.60 || 0x78E702D3
|-
| 3.60 || not present
|}
|}


<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source>
<source lang="C">int sceKernelSetGPOForDriver(SceUInt32 uiBits);</source>


=== sceDebugRegisterBacktraceInternalForKernel ===
=== sceKernelSetGPOMaskForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.610.011 || 0xEFF9962B
| 3.60 || 0x098473B0
|-
| 3.630.011-3.740.011 || 0x91E7D24F
|}
|}


This is a guessed name.
<source lang="C">sceKernelSetGPOMaskForDriver(int a1, int a2);</source>


Registers a callback for [[SceKernelModulemgr#sceKernelBacktraceInternalForDriver]].
=== call_cb74 ===
 
If callback runs successfully (returns >= 0), value of pNumReturn is used as third argument of PrintBacktrace, else PrintBacktrace is not called at all.
 
<source lang="C">int sceDebugRegisterBacktraceInternalForKernel(int (* callback)(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode));</source>
 
=== sceDebugRegisterPrintBacktraceForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xB5943011
| 3.60 || 0x2B6EABAD
|}
|}


This is a guessed name.
<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source>


Registers a callback for [[SceKernelModulemgr#sceKernelPrintBacktraceForDriver]].
=== set_cb74 ===
 
<source lang="C">int sceDebugRegisterPrintBacktraceForKernel(int (* callback)(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames));</source>
 
=== sceKernelPrintSyscallFrameForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x25E31E18
| 3.60 || 0x24173819
|-
| 3.65 || 0xBCC8D0B2
|}
|}


<source lang="C">
<source lang="C">int set_cb74(void *cb);</source>
// if pSyscallFrame is NULL, it will use the current syscall frame
// pResult is a pointer to a 0x10 bytes buffer and may be NULL
void sceKernelPrintSyscallFrameForKernel(SceUID pid, SceSyscallFrame *pSyscallFrame, SceUInt32 *pResult);
</source>


=== SceDebugForKernel_F1F861CF ===
=== call_cb78 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 2.00-3.60 || 0xF1F861CF
| 3.60 || 0x0E6B9890
|}
|}


Registers a callback that is called when a crash occur.
<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source>


Used by [[SceKernelBlueScreenOfDeath]].
=== set_cb78 ===
 
<source lang="C">int SceDebugForKernel_F1F861CF(void *cb);</source>
 
== SceDebugForDriver ==
 
If AllowKernelDebug QA flag is not set, calls to functions with non-zero SceKernelDebugLevel are ignored.
 
=== sceKernelPrintfForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x391B74B7
| 3.60 || 0xF62154E7
|}
|}


Temp name was sceDebugPrintfForDriver.
<source lang="C">int set_cb78(void *cb);</source>


<source lang="C">int sceKernelPrintfForDriver(const char *fmt, ...);</source>
== SceDebugForKernel ==


=== sceKernelVprintfForDriver ===
=== sceKernelDebugModuleStart2ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x411C0733
| 0.931-3.60 || 0xF624CE22
|}
|}


<source lang="C">int sceKernelVprintfForDriver(const char *fmt, va_list arg);</source>
<source lang="C">int sceKernelDebugModuleStart2ForKernel(void);</source>


=== sceKernelPrintfLevelForDriver ===
=== sceKernelRegisterKprintfHandlerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x1A3F2AA4
| 0.931-3.60 || 0x10067B7B
|}
|}


<source lang="C">int sceKernelPrintfLevelForDriver(SceUInt32 level, const char *fmt, ...);</source>
Temp name was sceDebugSetHandlersForKernel.
 
<source lang="c">int sceKernelRegisterKprintfHandlerForKernel(int (* handler)(int unk, const char *format, va_list args), void *argp);</source>


=== sceKernelVprintfLevelForDriver ===
=== sceKernelGetDebugPutcharHandlerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 3.60 || 0xE783518C
|-
| 3.60 || 0x611A158B
|}
|}


<source lang="C">int sceKernelVprintfLevelForDriver(SceUInt32 level, const char *fmt, va_list arg);</source>
This is guessed name.
 
Temp name was sceDebugGetPutcharHandlerForKernel, sceKernelGetDebugPutcharForKernel.
 
Returns pointer to current debug putchar handler.
 
<source lang="c">void *sceKernelGetDebugPutcharHandlerForKernel(void);</source>


=== sceKernelPrintfLevelWithInfoForDriver ===
=== sceKernelRegisterDebugPutcharHandlerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 3.60 || 0xE6115A72
|-
| 3.60 || 0xD9703808
|}
|}


This is a guessed name.
Temp name was sceDebugRegisterPutcharHandlerForKernel, sceKernelRegisterDebugPutcharForKernel.


Temp name was sceKernelPrintfLevelWithCtxForDriver.
Set debug print char handler.


<source lang="C">int sceKernelPrintfLevelWithInfoForDriver(SceUInt32 level, int flags, kernel_message_ctx *msg_ctx, const char *fmt, ...);</source>
<source lang="c">int sceKernelRegisterDebugPutcharHandlerForKernel(int (* handler)(void *args, char c), void *args);</source>


=== sceKernelPrintfWithInfoForDriver ===
=== sceKernelDebugPutcharForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931-3.60 || 0x82D2EDCE
|-
| 3.60 || 0x02B04343
|}
|}


This is a guessed name.
Temp name was sceDebugPutcharForKernel.
 
Print character to uart.


Temp name was sceDebugPrintf2ForDriver, sceKernelVprintfLevelWithCtxForDriver.
Return 1.


<source lang="C">int sceKernelPrintfWithInfoForDriver(SceUInt32 flags, kernel_message_ctx *msg_ctx, const char *fmt, ...);</source>
<source lang="c">int sceKernelDebugPutcharForKernel(char c);</source>


=== sceKernelAssertForDriver ===
=== sceKernelTtyPutcharForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x35A35322
| 0.931-0.990 || not present
|-
| 3.60 || 0x254A4997
|}
|}


Temp name was sceDebugPrintKernelAssertionForDriver.
This is a guessed name.


Condition 0 can trigger "kernel stopped".
Prints a character to the 0x1000-byte buffer returned by [[SceSysmem#sceKernelGetTtyInfoForDriver]].


<source lang="C">
On success, returns printed size (always 1).
// 0.931-0.990:
// addr is maybe not an argument but the stack pointer got within the function
int sceKernelAssertForDriver(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);


// 3.60:
<source lang="c">int sceKernelTtyPutcharForKernel(char c);</source>
int sceKernelAssertForDriver(SceBool condition, kernel_message_ctx *msg_ctx, const void *addr);
</source>


=== sceKernelAssertLevelForDriver ===
=== sceKernelStoppedForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xFD753E7A
| 0.931-0.990 || 0xF1F0C365
|-
| 3.60 || not present
|}
|}


<source lang="C">
<source lang="C">int sceKernelStoppedForKernel(const char *pFile, const char *pFunc, int line);</source>
// 0.931-0.990:
int sceKernelAssertLevelForDriver(int level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);


// 3.60:
=== panic_on_kernel_exception ===
int sceKernelAssertLevelForDriver(int level, SceBool condition, kernel_message_ctx *msg_ctx, const void *addr);
</source>
 
=== sceKernelPrintfAssertLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 0.931 || not present
|-
|-
| 0.990-3.60 || 0x821A2D59
| 3.60 || 0x082B8D6A
|-
| 3.65 || 0xCCABDD98
|}
|}


This is a guessed name.
Prints information about a Kernel Exception, ?and certainly calls [[SceCoredump]]?, then calls SceSysrootForKernel_0DF574A9 in an infinite loop.
 
This function doesn't return.


Temp name was sceDebugPrintfKernelAssertionForDriver, sceKernelVprintfAssertLevelForDriver.
See [[SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel]] for the meaning of excpcode.


<source lang="C">
<source lang="C">
// 0.990:
// excp_name can be:
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr, const char *fmt, va_list arg);
// UNDEF - Undefined instruction
 
// PABT - Prefetch Abort
// 3.50-3.60:
// DABT - Data Abort
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, kernel_message_ctx *msg_ctx, const void *lr, const char *fmt, ...);
// NEST - Nested? Same excpcode as UNDEF
void panic_on_kernel_exception(SceKernelDebugInfo *dbginfo, SceExcpmgrExceptionContext *excp_ctx, int excpcode, const char *excp_name);
</source>
</source>


=== sceKernelGetAssertLevelForDriver ===
=== register_unk_handler ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present. Present in [[#SceDebugForKernel]].
| 0.931 || not present
|-
|-
| 0.990-3.60 || 0x374B7868
| 3.60 || 0x66D82EC8
|}
|}


Temp name was sceKernelGetMinimumAssertionLevelForDriver.
used by [[SceDeci4pSDbgp]].


Returns g_assertLevel from memory.
handler definition:
<source lang="C">handler(int some_level, void *unk, const void *buf);</source>


<source lang="C">SceInt32 sceKernelGetAssertLevelForDriver(void);</source>
<source lang="C">int register_unk_handler(void *handler);</source>


=== sceKernelPanicForDriver ===
=== sceKernelEnableCrashDumpForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931.010-1.81 || not present
|-
| 2.000.081-3.610.011 || 0xF857CDD6
|-
|-
| 3.60 || 0x391B5B74
| 3.630.011-3.740.011 || 0xA465A31A
|}
|}


Temp name was sceDebugPrintKernelPanicForDriver.
This is a guessed name. Temp name was sceDebugDisableInfoDumpForKernel, sceKernelEnableInfoDumpForKernel.
 
Returns previous crash dump state.


<source lang="C">int sceKernelPanicForDriver(kernel_message_ctx *msg_ctx, const void *addr);</source>
<source lang="C">int sceKernelEnableCrashDumpForKernel(SceBool enable);</source>


=== sceKernelPrintfPanicForDriver ===
=== register_log_buffer ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931 || 0x4703ECC4
|-
|-
| 3.60 || 0x00CCE39C
| 3.60 || not present
|}
|}


<source lang="C">void sceKernelPrintfPanicForDriver(kernel_message_ctx *msg_ctx, const void *addr, const char *fmt, ...);</source>
<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source>


=== sceKernelGetDebugTailLogForDriver ===
=== start_logging ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931 || 0x4C377B11
|-
|-
| 3.60 || 0x62466B0A
| 3.60 || not present
|}
|}


Temp name was sceKernelGetTtyInfoForDriver.
Returns 1 if logging has been started successfully, -1 else.


Gets tty tail log.
<source lang="C">int start_logging(int state);</source>


<source lang="C">
=== stop_logging ===
// max bufSize is 0x1000
int sceKernelGetDebugTailLogForDriver(void *pBuf, SceSize bufSize);
</source>
 
=== _sceEventLogPutForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931 || 0x604F56AE
|-
|-
| 3.60 || 0x95B38C6C
| 3.60 || not present
|}
|}


Derived from [[SceVshBridge#_vshEventLogPut]].
If state is not zero, stops logging and return 1, else does nothing and return 0.


Calls [[SceSysmem#sceEventLogPutForDriver]] with KERNEL PID and [[SceSysmem#SceSysrootForKernel_D441DC34]] return value as second argument.
Returns 1 if logging has been stopped, 0 else.


<source lang="C">
<source lang="C">int stop_logging(void);</source>
// id: 10001 (SceProcessmgr), 20001 (SceWlanBt)
// index: 1, 2, 3, 4, 5 (SceProcessmgr), 1, 2, 3, 4 (SceWlanBt)
// a3: 0 (SceProcessmgr, SceWlanBt)
// bufSize: 0x1C (SceProcessmgr), 4 (SceWlanBt)
// max bufSize is 0x80
int _sceEventLogPutForDriver(int id, int index, int a3, void *pBuf, SceSize bufSize);
</source>


=== sceEventLogPutForDriver ===
=== refresh_logs ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931 || 0x04A3046D
|-
|-
| 3.60 || 0x912CF2BA
| 3.60 || not present
|}
|}


This is a guessed name.
<source lang="C">int refresh_logs(void);</source>


<source lang="C">
=== _sceKernelPrintDebugLogForKernel ===
// max bufSize is 0x80
int sceEventLogPutForDriver(SceUInt32 pid, int a2, int id, int index, int a5, void *pBuf, SceSize bufSize);
</source>
 
=== sceKernelGetEventLogForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931 || 0xEFDE973B
|-
|-
| 3.60 || 0xCC5365D3
| 3.60 || not present
|}
|}


Temp name was sceEventLogGetInfoForDriver.
If a2 is not zero, the current log buffer address is updated, else it is unchanged.


Copy by blocks of 0x30 bytes (or maybe 0xC0 bytes).
maxNum is guessed to be either the number of entries or the index of the chosen entry. Entry size is 0x40 bytes.


<source lang="C">
Uses sceKernelPrintfLevelForDriver to print.
// max bufSize is 0xC00 (0x40 blocks of size 0x30)
int sceKernelGetEventLogForDriver(SceKernelDebugEventLog *pBuf, SceSize bufSize, SceSize *pReadBlocks);
</source>


== SceSysmemForTZS ==
<source lang="C">int _sceKernelPrintDebugLogForKernel(int a1, int a2, int maxNum);</source>


=== sceKernelProcModeVAtoPAForTZS ===
=== sceKernelPrintDebugLogForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x119B9547
| 0.931 || 0xBD5D0BB0
|-
|-
| 0.990-3.73 || not present
| 3.60 || not present
|}
|}


<source lang="C">int sceKernelProcModeVAtoPAForTZS(SceUID pid, uint32_t mode, void *pVA, void **pPA);</source>
Calls _sceKernelPrintDebugLogForKernel with maxNum = (log_buf_end - log_buf_start) / 0x40.
 
<source lang="C">int sceKernelPrintDebugLogForKernel(int a1, int a2);</source>


=== sceKernelAllocPartitionStackMemBlockForTZS ===
=== print_with_log_buffer ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x69022B7F
| 0.931 || 0x904FF72D
|-
|-
| 0.990-3.73 || not present
| 3.60 || not present
|}
|}


=== sceKernelGetPhyPageResetForTZS ===
<source lang="C">int print_with_log_buffer(const char *string, SceSize maxlen);</source>
 
=== sceKernelPrintfCore0ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.80 || 0x3FEF6B39
| 0.931 || 0x2D7380FE
|-
|-
| 3.60-3.73 || not present
| 3.60 || not present
|}
|}


=== sceKernelDeleteHeapForTZS ===
Same as sceKernelPrintfForDriver but only prints if CPU ID is 0.
 
<source lang="C">int sceKernelPrintfCore0ForKernel(const char *fmt, ...);</source>
 
=== sceKernelPrintfLevelCore0ForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x624454BC
| 0.931 || 0x14241F51
|-
| 3.60 || not present
|}
|}


=== sceKernelCreateHeapForTZS ===
Same as sceKernelPrintfLevelForDriver but only prints if CPU ID is 0.
 
<source lang="C">int sceKernelPrintfLevelCore0ForKernel(int level, const char *fmt, ...);</source>
 
=== sceKernelSetDebugLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x56A16D84
| 0.931-3.60 || 0xBE2C05A2
|}
|}


=== sceKernelAllocHeapMemoryWithOptionForTZS ===
Temp name was sceKernelSetMinimumLogLevelForKernel.
 
<source lang="C">SceUInt32 sceKernelSetDebugLevelForKernel(SceUInt32 dbgLevel);</source>
 
=== sceKernelGetDebugLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xEA712806
| 0.931 || 0xDA6B6770
|-
| 3.60 || not present
|}
|}


=== sceKernelAllocHeapMemoryForTZS ===
Temp name was sceKernelGetMinimumLogLevelForKernel.
 
Returns the dbgLevel set by sceKernelSetDebugLevelForKernel.
 
<source lang="C">SceUInt32 sceKernelGetDebugLevelForKernel(void);</source>
 
=== sceKernelSetAssertLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x473871D8
| 0.931-3.60 || 0xCE9060F1
|}
|}


=== sceKernelAllocHeapMemoryFromGlobalHeapForTZS ===
Temp name was sceKernelSetMinimumAssertionLevelForKernel.
 
Overrides in memory g_assertLevel set by DIP switches 201 and 202.
 
Returns the previous assert level.
 
<source lang="C">SceInt32 sceKernelSetAssertLevelForKernel(SceUInt32 assertLevel);</source>
 
=== sceKernelGetAssertLevelForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0x29DE887D
| 0.931 || 0x374B7868
|-
| 0.990-3.60 || not present. Present in [[#SceDebugForDriver]].
|}
|}


=== sceKernelFreeHeapMemoryForTZS ===
Temp name was sceKernelGetMinimumAssertionLevelForKernel.
 
Returns g_assertLevel from memory.
 
<source lang="C">SceInt32 sceKernelGetAssertLevelForKernel(void);</source>
 
=== SceDebugForKernel_BEF921A2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x42FB5B12
| 0.931 || not present
|-
| 3.60-3.61 || 0xBEF921A2
|-
| 3.63 || 0x5D6F0CFC
|}
|}


=== sceKernelAllocUncacheHeapMemoryWithOptionForTZS ===
<source lang="C">
// buf size is 0x1000 bytes
// buf_400 size is 0x400 bytes
SceSSize SceDebugForKernel_BEF921A2(void *dst, int cpuId, SceUInt64 time, SceKernelDebugInfo *dbginfo, const void *excp_info_buf_0x400, int excpcode);
</source>
 
=== add_entry ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x6A3FBAF0
| 0.931-0.990 || 0x1208240D
|-
| 3.60 || not present
|}
|}


=== sceKernelFreeUncacheHeapMemoryForTZS ===
<source lang="C">
// ex: add_entry(0xA1, in_lr, 3, name); in SceSysmem
// ex: add_entry(0xAB, in_lr, 1, uid); in SceSysmem
// ex: add_entry(0xBB, in_lr, 0, param_4); in SceProcessmgr
int add_entry(SceSize maxlen, int a2, int a3, void *log_buffer_start);
</source>
 
=== add_entry2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x2F18E288
| 0.931 || 0x061A4657
|-
| 3.60 || not present
|}
|}


=== sceKernelNameHeapDeleteForTZS ===
<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source>
 
=== sceDebugRegisterBacktraceInternalForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xF459D09D
| 0.931-3.610.011 || 0xEFF9962B
|-
| 3.630.011-3.740.011 || 0x91E7D24F
|}
|}


=== sceKernelNameHeapInsertForTZS ===
This is a guessed name.
 
Registers a callback for [[SceKernelModulemgr#sceKernelBacktraceInternalForDriver]].
 
If callback runs successfully (returns >= 0), value of pNumReturn is used as third argument of PrintBacktrace, else PrintBacktrace is not called at all.
 
<source lang="C">int sceDebugRegisterBacktraceInternalForKernel(int (* callback)(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode));</source>
 
=== sceDebugRegisterPrintBacktraceForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x42AD34AB
| 0.931-3.60 || 0xB5943011
|}
|}


=== sceKernelSetSuspendIntrFuncForTZS ===
This is a guessed name.
 
Registers a callback for [[SceKernelModulemgr#sceKernelPrintBacktraceForDriver]].
 
<source lang="C">int sceDebugRegisterPrintBacktraceForKernel(int (* callback)(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames));</source>
 
=== sceKernelPrintSyscallFrameForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.80 || 0xB4306D21
| 3.60 || 0x25E31E18
|-
|-
| 3.60-3.73 || not present
| 3.65 || 0xBCC8D0B2
|}
|}


=== sceKernelSetResumeIntrFuncForTZS ===
<source lang="C">
{| class="wikitable"
// if pSyscallFrame is NULL, it will use the current syscall frame
// pResult is a pointer to a 0x10 bytes buffer and may be NULL
void sceKernelPrintSyscallFrameForKernel(SceUID pid, SceSyscallFrame *pSyscallFrame, SceUInt32 *pResult);
</source>
 
=== SceDebugForKernel_F1F861CF ===
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.80 || 0x418111B0
| 2.00-3.60 || 0xF1F861CF
|-
| 3.60-3.73 || not present
|}
|}


=== sceKernelAddressSpaceUnmapForTZS ===
Registers a callback that is called when a crash occur.
 
Used by [[SceKernelBlueScreenOfDeath]].
 
<source lang="C">int SceDebugForKernel_F1F861CF(void *cb);</source>
 
=== SceDebugForKernel_1526DD83 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0x31273DC7
| 3.20 || 0x1526DD83
|}
|}


=== sceKernelGetMemBlockBaseForTZS ===
Register [[SceSysmem#sceEventLogPutForDriver|sceEventLogPutForDriver]] internal callback.
 
== SceDebugForDriver ==
 
If AllowKernelDebug QA flag is not set, calls to functions with non-zero SceKernelDebugLevel are ignored.
 
=== sceKernelPrintfForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xE1DEDFF4
| 0.931-3.60 || 0x391B74B7
|}
|}


<source lang="C">
Temp name was sceDebugPrintfForDriver.
/**
 
* @brief Get mapped base address of memory block.
<source lang="C">int sceKernelPrintfForDriver(const char *fmt, ...);</source>
*
* Get base address of memory block.
* @param[in] uid block id
* @param[out] ppBase base address of memory block
* @retval SCE_OK success
* @retval <SCE_OK Error
*/
int sceKernelGetMemBlockBaseForTZS(SceUID uid, void **ppBase);
</source>


=== sceKernelFreeMemBlockForTZS ===
=== sceKernelVprintfForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0x658EACE3
| 0.931-3.60 || 0x411C0733
|}
|}


=== sceKernelAllocMemBlockForTZS ===
<source lang="C">int sceKernelVprintfForDriver(const char *fmt, va_list arg);</source>
 
=== sceKernelPrintfLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0x402EB970
| 0.931-3.60 || 0x1A3F2AA4
|}
|}


<source lang="c">
<source lang="C">int sceKernelPrintfLevelForDriver(SceUInt32 level, const char *fmt, ...);</source>
SceUID sceKernelAllocMemBlockForTZS(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);
</source>


=== sceKernelAllocPartitionMemBlockForTZS ===
=== sceKernelVprintfLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931-0.990 || not present
|-
|-
| 0.940-3.60 || 0x0028E26C
| 3.60 || 0x611A158B
|}
|}


Temp name was sceKernelAllocMemBlockForPidForTZS.
<source lang="C">int sceKernelVprintfLevelForDriver(SceUInt32 level, const char *fmt, va_list arg);</source>


<source lang="c">SceUID sceKernelAllocPartitionMemBlockForTZS(SceUID pid, const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source>
=== sceKernelPrintfLevelWithInfoForDriver ===
 
=== sceKernelVAtoPAForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x1DEADF6C
| 0.931-0.990 || not present
|-
| 3.60 || 0xD9703808
|}
|}


This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>ppPA</code>.
This is a guessed name.


Returns <0 on error, values >=0 indicate success.
Temp name was sceKernelPrintfLevelWithCtxForDriver.


<source lang="c">int sceKernelVAtoPAForTZS(void *pVA, void **ppPA);</source>
<source lang="C">int sceKernelPrintfLevelWithInfoForDriver(SceUInt32 level, int flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);</source>


=== sceKernelVARangeToPAVectorForTZS ===
=== sceKernelPrintfWithInfoForDriver ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931-0.990 || not present
|-
|-
| 0.931-3.60 || 0x9D43E416
| 3.60 || 0x02B04343
|}
|}


=== sceKernelCreateAddressSpaceForTZS ===
This is a guessed name.
 
Temp name was sceDebugPrintf2ForDriver, sceKernelVprintfLevelWithCtxForDriver.
 
<source lang="C">int sceKernelPrintfWithInfoForDriver(SceUInt32 flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);</source>
 
=== sceKernelAssertForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x21906368
| 0.931-3.60 || 0x35A35322
|-
| 0.990-3.73 || not present
|}
|}


=== SceSysmemForTZS_038EAEEE ===
Temp name was sceDebugPrintKernelAssertionForDriver.
 
Condition 0 can trigger "kernel stopped".
 
<source lang="C">
// 0.931-0.990:
// addr is maybe not an argument but the stack pointer got within the function
int sceKernelAssertForDriver(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);
 
// 3.60:
int sceKernelAssertForDriver(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);
</source>
 
=== sceKernelAssertLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931-3.60 || 0xFD753E7A
|-
| 3.60 || 0x038EAEEE
|}
|}


== SceDipswForTZS ==
<source lang="C">
// 0.931-0.990:
int sceKernelAssertLevelForDriver(int level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);
 
// 3.60:
int sceKernelAssertLevelForDriver(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);
</source>


=== sceKernelCheckDipswForTZS ===
=== sceKernelPrintfAssertLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931 || not present
|-
|-
| 0.940-3.60 || 0xA98FC2FD
| 0.990-3.60 || 0x821A2D59
|}
|}


== SceUartForTZS ==
This is a guessed name.
 
Temp name was sceDebugPrintfKernelAssertionForDriver, sceKernelVprintfAssertLevelForDriver.
 
<source lang="C">
// 0.990:
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr, const char *fmt, va_list arg);
 
// 3.50-3.60:
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *lr, const char *fmt, ...);
</source>


=== sceUartWriteForTZS ===
=== sceKernelGetAssertLevelForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x3AFD5E71
| 0.931 || not present. Present in [[#SceDebugForKernel]].
|-
| 0.990-3.60 || 0x374B7868
|}
|}


== SceDebugForTZS ==
Temp name was sceKernelGetMinimumAssertionLevelForDriver.
 
Returns g_assertLevel from memory.
 
<source lang="C">SceInt32 sceKernelGetAssertLevelForDriver(void);</source>


=== sceKernelDebugModuleStart2ForTZS ===
=== sceKernelPanicForDriver ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931-0.990 || not present
|-
|-
| 0.931 || 0x32E3D4B9
| 3.60 || 0x391B5B74
|}
|}


<source lang="C">int sceKernelDebugModuleStart2ForTZS(void);</source>
Temp name was sceDebugPrintKernelPanicForDriver.
 
<source lang="C">int sceKernelPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr);</source>


=== sceKernelRegisterKprintfHandlerForTZS ===
=== sceKernelPrintfPanicForDriver ===
{| class="wikitable"
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.931-0.990 || not present
|-
|-
| 0.931 || 0x0AD558D5
| 3.60 || 0x00CCE39C
|}
|}


<source lang="c">int sceKernelRegisterKprintfHandlerForTZS(int (*kprintf)(const char *fmt, ...), const void *args);</source>
<source lang="C">void sceKernelPrintfPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr, const char *fmt, ...);</source>


=== sceKernelDebugPutcharForTZS ===
=== sceKernelGetDebugTailLogForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xD36F27BA
| 0.931-0.990 || not present
|-
| 3.60 || 0x62466B0A
|}
|}


Print character.
Temp name was sceKernelGetTtyInfoForDriver.
 
Gets tty tail log.


<source lang="c">int sceKernelDebugPutcharForTZS(char c);</source>
<source lang="C">
// max bufSize is 0x1000
int sceKernelGetDebugTailLogForDriver(void *pBuf, SceSize bufSize);
</source>


=== sceKernelStoppedForTZS ===
=== _sceEventLogPutForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0xCB502FD1
| 0.931-0.990 || not present
|-
|-
| 1.80 || not present
| 3.60 || 0x95B38C6C
|}
|}


<source lang="C">int sceKernelStoppedForTZS(const char *maybe_pFile, const char *maybe_pFunc, int maybe_line);</source>
Derived from [[SceVshBridge#_vshEventLogPut]].
 
Calls [[SceSysmem#sceEventLogPutForDriver]] with KERNEL PID and [[SceSysmem#SceSysrootForKernel_D441DC34]] return value as second argument.
 
<source lang="C">
// id: 10001 (SceProcessmgr), 20001 (SceWlanBt)
// index: 1, 2, 3, 4, 5 (SceProcessmgr), 1, 2, 3, 4 (SceWlanBt)
// a3: 0 (SceProcessmgr, SceWlanBt)
// bufSize: 0x1C (SceProcessmgr), 4 (SceWlanBt)
// max bufSize is 0x80
int _sceEventLogPutForDriver(int id, int index, int a3, void *pBuf, SceSize bufSize);
</source>


=== sceKernelAssertForTZS ===
=== sceEventLogPutForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x2F9B8AA8
| 0.931-0.990 || not present
|-
| 3.60 || 0x912CF2BA
|}
|}
This is a guessed name.


<source lang="C">
<source lang="C">
// 0.931-0.990:
// max bufSize is 0x80
int sceKernelAssertForTZS(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);
int sceEventLogPutForDriver(SceUInt32 pid, int a2, int id, int index, int a5, void *pBuf, SceSize bufSize);
</source>


// 3.60:
=== sceKernelGetEventLogForDriver ===
int sceKernelAssertForTZS(SceBool condition, kernel_message_ctx *msg_ctx, const void *addr);
</source>
 
=== sceKernelAssertLevelForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x618F89E6
| 0.931-0.990 || not present
|-
| 3.60 || 0xCC5365D3
|}
|}
Temp name was sceEventLogGetInfoForDriver.
Copy by blocks of 0x30 bytes (or maybe 0xC0 bytes).


<source lang="C">
<source lang="C">
// 3.60:
// max bufSize is 0xC00 (0x40 blocks of size 0x30)
int sceKernelAssertLevelForTZS(int level, SceBool condition, kernel_message_ctx *msg_ctx, const void *addr);
int sceKernelGetEventLogForDriver(SceKernelDebugEventLog *pBuf, SceSize bufSize, SceSize *pReadBlocks);
</source>
</source>


=== sceKernelGetAssertLevelForTZS ===
== SceSysmemForTZS ==
 
=== sceKernelProcModeVAtoPAForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF851BA4F
| 0.931 || 0x119B9547
|-
| 0.990-3.73 || not present
|}
|}


Returns g_assertLevel from memory.
<source lang="C">int sceKernelProcModeVAtoPAForTZS(SceUID pid, uint32_t mode, void *pVA, void **pPA);</source>


<source lang="C">SceInt32 sceKernelGetAssertLevelForTZS(void);</source>
=== sceKernelAllocPartitionStackMemBlockForTZS ===
 
=== _sceKernelPrintDebugLogForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x4FF6536C
| 0.931 || 0x69022B7F
|-
| 0.990-3.73 || not present
|}
|}


<source lang="C">int _sceKernelPrintDebugLogForTZS(int a1, int a2, int maxNum);</source>
=== sceKernelGetPhyPageResetForTZS ===
 
=== sceKernelPrintDebugLogForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x85BF33E1
| 0.940-1.80 || 0x3FEF6B39
|-
| 3.60-3.73 || not present
|}
|}


<source lang="C">int sceKernelPrintDebugLogForTZS(int a1, int a2);</source>
=== sceKernelDeleteHeapForTZS ===
 
=== print_with_log_buffer ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x1FD92289
| 0.931-3.60 || 0x624454BC
|}
|}


<source lang="C">int print_with_log_buffer(const char *msg, SceSize maxlen);</source>
=== sceKernelCreateHeapForTZS ===
 
=== sceKernelPrintfForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0x1655E0E3
| 0.931-3.60 || 0x56A16D84
|}
|}


<source lang="C">int sceKernelPrintfForTZS(const char *fmt, ...);</source>
=== sceKernelAllocHeapMemoryWithOptionForTZS ===
 
=== sceKernelPrintfLevelForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0xC70CBB58
| 0.931-3.60 || 0xEA712806
|}
|}


<source lang="C">int sceKernelPrintfLevelForTZS(int level, const char *fmt, ...);</source>
=== sceKernelAllocHeapMemoryForTZS ===
 
=== sceKernelPrintfCore0ForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x08F8AD70
| 0.931-3.60 || 0x473871D8
|}
|}


Same as sceKernelPrintfForTZS but only prints if CPU ID is 0.
=== sceKernelFreeHeapMemoryForTZS ===
 
<source lang="C">int sceKernelPrintfCore0ForTZS(const char *fmt, ...);</source>
 
=== sceKernelPrintfLevelCore0ForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0xD4E6A0C0
| 0.931-3.60 || 0x42FB5B12
|}
|}


Same as sceKernelPrintfLevelForTZS but only prints if CPU ID is 0.
=== sceKernelAllocUncacheHeapMemoryForTZS ===
 
<source lang="C">int sceKernelPrintfLevelCore0ForTZS(int level, const char *fmt, ...);</source>
 
=== sceKernelSetMinimumLogLevelForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x898E417E
| 0.940-3.60 || 0x29DE887D
|}
|}


<source lang="C">
=== sceKernelAllocUncacheHeapMemoryWithOptionForTZS ===
/**
* @brief Specifies the minimum severity level for the output of logging information.
*
* Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.
*
* @param minimumLogLevel The minimum severity at which debugging messages should be output.
* @retval SCE_OK          The operation was completed successfully.
* @retval Negative value Error code
*/
int sceKernelSetMinimumLogLevelForTZS(SceInt32 minimumLogLevel);
</source>
 
=== register_log_buffer ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xF2A87E96
| 0.931-3.60 || 0x6A3FBAF0
|}
|}


<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source>
=== sceKernelFreeUncacheHeapMemoryForTZS ===
 
=== start_logging ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x1FF65E15
| 0.931-3.60 || 0x2F18E288
|}
|}


<source lang="C">int start_logging(int state);</source>
=== sceKernelNameHeapDeleteForTZS ===
 
=== stop_logging ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x5A35E3E0
| 0.990-3.60 || 0xF459D09D
|}
|}


If state is not zero, stops logging and return 1, else does nothing and return 0.
=== sceKernelNameHeapInsertForTZS ===
 
Returns 1 if logging has been stopped, 0 else.
 
<source lang="C">int stop_logging(void);</source>
 
=== refresh_logs ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x91B41C34
| 0.990-3.60 || 0x42AD34AB
|}
|}


<source lang="C">int refresh_logs(void);</source>
=== sceKernelSetSuspendIntrFuncForTZS ===
 
=== add_entry ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x95E1A80B
| 0.940-1.80 || 0xB4306D21
|-
| 3.60-3.73 || not present
|}
|}


<source lang="C">int add_entry(int a1, int a2, int a3, void *log_buffer_start);</source>
=== sceKernelSetResumeIntrFuncForTZS ===
 
=== add_entry2 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x538319EB
| 0.940-1.80 || 0x418111B0
|-
| 3.60-3.73 || not present
|}
|}


<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source>
=== sceKernelAddressSpaceUnmapForTZS ===
 
=== register_unk_cb ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x3598118B
| 0.940-3.60 || 0x31273DC7
|}
|}


The callback has this definition:
=== sceKernelGetMemBlockBaseForTZS ===
<source lang="C">
{| class="wikitable"
// unk: 2 or 3
|-
int unk_cb(SceUID pid, void *buf, SceSize size, int *pOut, int unk);
! Version !! NID
|-
| 0.931-3.60 || 0xE1DEDFF4
|}
 
<source lang="C">
/**
* @brief Get mapped base address of memory block.
*
* Get base address of memory block.
* @param[in] uid block id
* @param[out] ppBase base address of memory block
* @retval SCE_OK success
* @retval <SCE_OK Error
*/
int sceKernelGetMemBlockBaseForTZS(SceUID uid, void **ppBase);
</source>
</source>


If unk_cb runs successfully (return >= 0), pOut is used as third argument of unk_cb2, else unk_cb2 is not called at all.
=== sceKernelFreeMemBlockForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-3.60 || 0x658EACE3
|}
 
=== sceKernelAllocMemBlockForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-3.60 || 0x402EB970
|}


<source lang="C">int register_unk_cb(void *some_cb);</source>
<source lang="c">
SceUID sceKernelAllocMemBlockForTZS(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);
</source>


=== register_unk_cb2 ===
=== sceKernelAllocPartitionMemBlockForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xE844FC5A
| 0.940-3.60 || 0x0028E26C
|-
| 0.990-3.60 || not present
|}
|}


The callback has this definition:
Temp name was sceKernelAllocMemBlockForPidForTZS.
<source lang="C">int unk_cb2(SceUID pid, void *buf, int unk);</source>


<source lang="C">int register_unk_cb2(void *some_cb);</source>
<source lang="c">SceUID sceKernelAllocPartitionMemBlockForTZS(SceUID pid, const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source>


=== SceDebugForTZS_563B623D ===
=== sceKernelVAtoPAForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || not present
| 0.931-3.60 || 0x1DEADF6C
|-
| 1.80-3.60 || 0x563B623D
|}
|}


=== SceDebugForTZS_0D799DAE ===
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>ppPA</code>.
 
Returns <0 on error, values >=0 indicate success.
 
<source lang="c">int sceKernelVAtoPAForTZS(void *pVA, void **ppPA);</source>
 
=== sceKernelVARangeToPAVectorForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931-3.60 || 0x9D43E416
|-
| 3.60 || 0x0D799DAE
|}
|}


<source lang="C">int SceDebugForTZS_0D799DAE(SceUInt32 msg_type, void *msg_ctx, const char *fmt, va_list arg);</source>
=== sceKernelCreateAddressSpaceForTZS ===
 
=== SceDebugForTZS_D26EB4BB ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || not present
| 0.931 || 0x21906368
|-
|-
| 3.60 || 0xD26EB4BB
| 0.990-3.73 || not present
|}
|}


<source lang="C">int SceDebugForTZS_D26EB4BB(SceBool condition, SceUInt32 msg_type, void *msg_ctx, const char *fmt, ...);</source>
=== SceSysmemForTZS_038EAEEE ===
 
== SceCpuForTZS ==
 
* 0.931: 0xACA39932: unknown, save context that will be restored with 0xCA74C9A2
* 0.931: 0xCA74C9A2: unknown, restore context saved with 0xACA39932
* 0.931: 0xE0B34336: unknown, same as SceCpuForKernel_9D72DD1B
* 0.931-0.990: 0x40DEC1B6: sceKernelWaitForEvent
* 0.931-0.990: 0xF42F079B: sceKernelSendEvent
* 0.940: 0x1266F962: sceKernelAbort
* 0.931-0.940: 0x98BF47D3: sceKernelGetVmaccessRange
* 0.931: 0x49AD8B60: sceKernelSetFIQModeStack
* 0.931: 0xC2A428F3: sceKernelSetMonModeStack
* 0.931: 0xD9013440: sceKernelSetIRQModeStack
* 0.931: 0xDF17E4A3: sceKernelSetUndModeStack
* 0.931: 0xF832C341: sceKernelSetAbtModeStack
* 0.931: 0xFB1D3114: sceKernelSetSvcModeStack
* 0.931: 0xF6CE21EA: sceKernelPrintCpuMode
* 3.60: 0x31E78A4B: unknown
* 3.60: 0x4FED4BCE: unknown
* 3.60: 0x7548CBCF: unknown
* 3.60: 0xD4E7413D: unknown
 
1.80:
      NID 0: 0x0A15B41C: sceKernelL1DcacheCleanInvalidateAll
      NID 1: 0x17A88E69: sceKernelL1DcacheCleanRange
      NID 2: 0x190D96D5: sceKernelDcacheCleanRange
      NID 3: 0x2A0A3DC6
      NID 4: 0x2B6403F8: on FW 3.60, does nothing and returns -1
      NID 5: 0x2FE24445: sceKernelCpuAtomicSet32
      NID 6: 0x308D7ABE: sceKernelCpuDcacheInvalidateMVACRange
      NID 7: 0x324727D1: sceKernelGetCpsr
      NID 8: 0x39FCFCC2: sceKernelDomainTextMemcpy
      NID 9: 0x44C423D3: sceKernelCpuId
      NID 10: 0x49B11FF8
      NID 11: 0x71FD9AB5: sceKernelSpinlockLowLock
      NID 12: 0x72CA4F7A: sceKernelGetSpsr
      NID 13: 0x75D87321: sceKernelCpuAtomicOrAndGet32
      NID 14: 0x7A5373EB: sceKernelDcacheCleanInvalidateRange
      NID 15: 0x7CCE9480: sceKernelDcacheCleanInvalidateAll
      NID 16: 0x864E3DED
      NID 17: 0x9E4C0D0D: on FW 3.60, does nothing and returns -1
      NID 18: 0xA5965CBF: sceKernelL1IcacheInvalidateEntireAllCore
      NID 19: 0xACF209F3: sceKernelSpinlockLowTrylockCpuSuspendIntr
      NID 20: 0xB421FAFD: sceKernelL1IcacheInvalidateRange
      NID 21: 0xB8F00FBE: sceKernelSpinlockLowUnlockCpuResumeIntr
      NID 22: 0xC4137AED: sceKernelPleFlushRequest
      NID 23: 0xCD98416C: sceKernelSpinlockLowUnlock
      NID 24: 0xCDD46655: sceKernelDcacheInvalidateRange
      NID 25: 0xD67A4356: sceKernelSpinlockLowLockCpuSuspendIntr
      NID 26: 0xEFD6F289: sceKernelCpuAtomicCompareAndSet8
 
== SceSysclibForTZS ==
 
=== __stack_chk_fail ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.80-3.60 || 0xE5457B97
| 0.931-0.990 || not present
|-
| 3.60 || 0x038EAEEE
|}
|}


=== __stack_chk_guard ===
== SceDipswForTZS ==
 
=== sceKernelCheckDipswForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBA505B15
| 0.940-3.60 || 0xA98FC2FD
|}
|}


This is a variable.
== SceUartForTZS ==


=== strncpy ===
=== sceUartWriteForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0x361850BB
| 0.990-3.60 || 0x3AFD5E71
|}
|}


=== memcpy ===
== SceDebugForTZS ==
 
=== sceKernelDebugModuleStart2ForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xBE3AF2EE
| 0.931 || 0x32E3D4B9
|}
|}


=== memset ===
<source lang="C">int sceKernelDebugModuleStart2ForTZS(void);</source>
 
=== sceKernelRegisterKprintfHandlerForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x956DB750
| 0.931 || 0x0AD558D5
|}
|}


== SceSysrootForTZS ==
<source lang="c">int sceKernelRegisterKprintfHandlerForTZS(int (*kprintf)(const char *fmt, ...), const void *args);</source>


=== sceKernelSysrootBacktraceForTZS ===
=== sceKernelDebugPutcharForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0xF26A5E68
| 0.931 || 0xD36F27BA
|}
|}


=== sceKernelSysrootPrintBacktraceForTZS ===
Print character.
 
<source lang="c">int sceKernelDebugPutcharForTZS(char c);</source>
 
=== sceKernelStoppedForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x463EA380
| 0.931-0.990 || 0xCB502FD1
|-
| 1.80 || not present
|}
|}


=== sceKernelSysrootShowCallerInfoForTZS ===
<source lang="C">int sceKernelStoppedForTZS(const char *maybe_pFile, const char *maybe_pFunc, int maybe_line);</source>
 
=== sceKernelAssertForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931 || 0x2F3D9414
| 0.931-3.60 || 0x2F9B8AA8
|}
 
<source lang="C">
// 0.931-0.990:
int sceKernelAssertForTZS(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);
 
// 3.60:
int sceKernelAssertForTZS(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);
</source>
 
=== sceKernelAssertLevelForTZS ===
{| class="wikitable"
! Version !! NID
|-
| 3.60 || 0x618F89E6
|}
|}


=== sceKernelSysrootGetModulePrivateForTZS ===
<source lang="C">
// 3.60:
int sceKernelAssertLevelForTZS(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);
</source>
 
=== sceKernelGetAssertLevelForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0xC9DD8EB3
| 3.60 || 0xF851BA4F
|}
|}


=== sceKernelSysrootSetModulePrivateForTZS ===
Returns g_assertLevel from memory.
 
<source lang="C">SceInt32 sceKernelGetAssertLevelForTZS(void);</source>
 
=== _sceKernelPrintDebugLogForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0xEA572BD9
| 0.931 || 0x4FF6536C
|}
|}


=== sceKernelSysrootSetSharedMemoryForTZS ===
<source lang="C">int _sceKernelPrintDebugLogForTZS(int a1, int a2, int maxNum);</source>
 
=== sceKernelPrintDebugLogForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.80 || 0x45EEB2E0
| 0.931 || 0x85BF33E1
|}
 
<source lang="C">int sceKernelPrintDebugLogForTZS(int a1, int a2);</source>
 
=== print_with_log_buffer ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x1FD92289
|}
 
<source lang="C">int print_with_log_buffer(const char *msg, SceSize maxlen);</source>
 
=== sceKernelPrintfForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0x1655E0E3
|}
 
<source lang="C">int sceKernelPrintfForTZS(const char *fmt, ...);</source>
 
=== sceKernelPrintfLevelForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0xC70CBB58
|}
 
<source lang="C">int sceKernelPrintfLevelForTZS(int level, const char *fmt, ...);</source>
 
=== sceKernelPrintfCore0ForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x08F8AD70
|}
 
Same as sceKernelPrintfForTZS but only prints if CPU ID is 0.
 
<source lang="C">int sceKernelPrintfCore0ForTZS(const char *fmt, ...);</source>
 
=== sceKernelPrintfLevelCore0ForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0xD4E6A0C0
|}
 
Same as sceKernelPrintfLevelForTZS but only prints if CPU ID is 0.
 
<source lang="C">int sceKernelPrintfLevelCore0ForTZS(int level, const char *fmt, ...);</source>
 
=== sceKernelSetMinimumLogLevelForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x898E417E
|}
 
<source lang="C">
/**
* @brief Specifies the minimum severity level for the output of logging information.
*
* Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.
*
* @param minimumLogLevel The minimum severity at which debugging messages should be output.
* @retval SCE_OK          The operation was completed successfully.
* @retval Negative value Error code
*/
int sceKernelSetMinimumLogLevelForTZS(SceInt32 minimumLogLevel);
</source>
 
=== register_log_buffer ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0xF2A87E96
|}
 
<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source>
 
=== start_logging ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x1FF65E15
|}
 
<source lang="C">int start_logging(int state);</source>
 
=== stop_logging ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x5A35E3E0
|}
 
If state is not zero, stops logging and return 1, else does nothing and return 0.
 
Returns 1 if logging has been stopped, 0 else.
 
<source lang="C">int stop_logging(void);</source>
 
=== refresh_logs ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x91B41C34
|}
 
<source lang="C">int refresh_logs(void);</source>
 
=== add_entry ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x95E1A80B
|}
 
<source lang="C">int add_entry(int a1, int a2, int a3, void *log_buffer_start);</source>
 
=== add_entry2 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x538319EB
|}
 
<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source>
 
=== register_unk_cb ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x3598118B
|}
 
The callback has this definition:
<source lang="C">
// unk: 2 or 3
int unk_cb(SceUID pid, void *buf, SceSize size, int *pOut, int unk);
</source>
 
If unk_cb runs successfully (return >= 0), pOut is used as third argument of unk_cb2, else unk_cb2 is not called at all.
 
<source lang="C">int register_unk_cb(void *some_cb);</source>
 
=== register_unk_cb2 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0xE844FC5A
|-
| 0.990-3.60 || not present
|}
 
The callback has this definition:
<source lang="C">int unk_cb2(SceUID pid, void *buf, int unk);</source>
 
<source lang="C">int register_unk_cb2(void *some_cb);</source>
 
=== sceKernelPanicForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || not present
|-
| 1.80-3.60 || 0x563B623D
|}
 
=== SceDebugForTZS_0D799DAE ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-0.990 || not present
|-
| 3.60 || 0x0D799DAE
|}
 
<source lang="C">int SceDebugForTZS_0D799DAE(SceUInt32 msg_type, void *msg_ctx, const char *fmt, va_list arg);</source>
 
=== SceDebugForTZS_D26EB4BB ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-0.990 || not present
|-
| 3.60 || 0xD26EB4BB
|}
 
<source lang="C">int SceDebugForTZS_D26EB4BB(SceBool condition, SceUInt32 msg_type, void *msg_ctx, const char *fmt, ...);</source>
 
== SceCpuForTZS ==
 
* 0.931: 0xACA39932: unknown, save context that will be restored with 0xCA74C9A2
* 0.931: 0xCA74C9A2: unknown, restore context saved with 0xACA39932
* 0.931: 0xE0B34336: unknown, same as SceCpuForKernel_9D72DD1B
* 0.931-0.990: 0x40DEC1B6: sceKernelWaitForEvent
* 0.931-0.990: 0xF42F079B: sceKernelSendEvent
* 0.940: 0x1266F962: sceKernelAbort
* 0.931-0.940: 0x98BF47D3: sceKernelGetVmaccessRange
* 0.931: 0x49AD8B60: sceKernelSetFIQModeStack
* 0.931: 0xC2A428F3: sceKernelSetMonModeStack
* 0.931: 0xD9013440: sceKernelSetIRQModeStack
* 0.931: 0xDF17E4A3: sceKernelSetUndModeStack
* 0.931: 0xF832C341: sceKernelSetAbtModeStack
* 0.931: 0xFB1D3114: sceKernelSetSvcModeStack
* 0.931: 0xF6CE21EA: sceKernelPrintCpuMode
* 3.60: 0x31E78A4B: unknown
* 3.60: 0x4FED4BCE: unknown
* 3.60: 0x7548CBCF: unknown
* 3.60: 0xD4E7413D: unknown
 
1.80:
      NID 0: 0x0A15B41C: sceKernelL1DcacheCleanInvalidateAll
      NID 1: 0x17A88E69: sceKernelL1DcacheCleanRange
      NID 2: 0x190D96D5: sceKernelDcacheCleanRange
      NID 3: 0x2A0A3DC6
      NID 4: 0x2B6403F8: on FW 3.60, does nothing and returns -1. sceKernelCpuWaitL2Cache
      NID 5: 0x2FE24445: sceKernelCpuAtomicSet32
      NID 6: 0x308D7ABE: sceKernelCpuDcacheInvalidateMVACRange
      NID 7: 0x324727D1: sceKernelGetCpsr
      NID 8: 0x39FCFCC2: sceKernelDomainTextMemcpy
      NID 9: 0x44C423D3: sceKernelCpuId
      NID 10: 0x49B11FF8
      NID 11: 0x71FD9AB5: sceKernelSpinlockLowLock
      NID 12: 0x72CA4F7A: sceKernelGetSpsr
      NID 13: 0x75D87321: sceKernelCpuAtomicOrAndGet32
      NID 14: 0x7A5373EB: sceKernelDcacheCleanInvalidateRange
      NID 15: 0x7CCE9480: sceKernelDcacheCleanInvalidateAll
      NID 16: 0x864E3DED
      NID 17: 0x9E4C0D0D: on FW 3.60, does nothing and returns -1
      NID 18: 0xA5965CBF: sceKernelL1IcacheInvalidateEntireAllCore
      NID 19: 0xACF209F3: sceKernelSpinlockLowTrylockCpuSuspendIntr
      NID 20: 0xB421FAFD: sceKernelL1IcacheInvalidateRange
      NID 21: 0xB8F00FBE: sceKernelSpinlockLowUnlockCpuResumeIntr
      NID 22: 0xC4137AED: sceKernelPleFlushRequest
      NID 23: 0xCD98416C: sceKernelSpinlockLowUnlock
      NID 24: 0xCDD46655: sceKernelDcacheInvalidateRange
      NID 25: 0xD67A4356: sceKernelSpinlockLowLockCpuSuspendIntr
      NID 26: 0xEFD6F289: sceKernelCpuAtomicCompareAndSet8
 
== SceSysclibForTZS ==
 
=== __stack_chk_fail ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.80-3.60 || 0xE5457B97
|}
 
=== __stack_chk_guard ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xBA505B15
|}
 
This is a variable.
 
=== strncpy ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-3.60 || 0x361850BB
|}
 
=== memcpy ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xBE3AF2EE
|}
 
=== memset ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x956DB750
|}
 
== SceSysrootForTZS ==
 
=== sceKernelSysrootBacktraceForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0xF26A5E68
|}
 
=== sceKernelSysrootPrintBacktraceForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x463EA380
|}
 
=== sceKernelSysrootShowCallerInfoForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x2F3D9414
|}
 
=== sceKernelSysrootGetModulePrivateForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0xC9DD8EB3
|}
 
=== sceKernelSysrootSetModulePrivateForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0xEA572BD9
|}
 
=== sceKernelSysrootSetSharedMemoryForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-1.80 || 0x45EEB2E0
|}
|}


=== sceKernelSysrootGetKermitRevisionForTZS ===
=== sceKernelSysrootGetKermitRevisionForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.80 || 0xDB3DAB76
| 0.940-1.80 || 0xDB3DAB76
|}
|}
 
 
=== sceKernelSysrootGetSharedMemoryForTZS ===
=== sceKernelSysrootGetSharedMemoryForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x1C96096F
| 0.931-3.60 || 0x1C96096F
|}
|}
 
 
=== sceKernelSysrootCorelockLockForTZS ===
=== sceKernelSysrootCorelockLockForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0xD653194A
| 0.931-1.80 || 0xD653194A
|}
|}
 
 
=== sceKernelSysrootGetVbaseMonitorVectorForTZS ===
=== sceKernelSysrootGetVbaseMonitorVectorForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0xD4E6D8E8
| 0.931-1.80 || 0xD4E6D8E8
|}
|}
 
 
=== sceKernelSysrootGetKernelMMUContextForTZS ===
=== sceKernelSysrootGetKernelMMUContextForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0xA8B7DAF9
| 0.931-1.80 || 0xA8B7DAF9
|}
|}
 
=== sceKernelSysrootCorelockUnlockForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0x2F5FD9A8
|}
 
=== sceKernelSysrootGetVbaseResetVectorForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0x2460ADFA
|}
 
=== sceKernelIsColdBootForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-1.80 || 0x0567B4B9
|}
 
=== sceKernelIsSecureStateForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940 || 0xEFA54B46
|-
| 3.60 || not present
|}
 
=== sceKernelSysrootGetErnieWakeupFactorForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-1.80 || 0x8E871C6D
|}
 
=== sceKernelSysrootGetKblParamForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0x29C1049E
|}
 
Returns pointer to [[KBL Param]] buffer.
 
<source lang="C">void *sceKernelSysrootGetKblParamForTZS(void);</source>
 
=== sceKernelSysrootAllocForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-1.80 || 0x1A9E1D28
|}
 
<source lang="C">void *sceKernelSysrootAllocForTZS(uint32_t size);</source>


=== sceKernelSysrootCorelockUnlockForTZS ===
=== sceKernelSysrootGetModelInfoForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0x2F5FD9A8
| 3.60 || 0xD6FBF445
|}
|}


=== sceKernelSysrootGetVbaseResetVectorForTZS ===
This is guessed name.
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-1.80 || 0x2460ADFA
|}


=== sceKernelIsColdBootForTZS ===
=== sceSysrootGetSessionIdForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.80 || 0x0567B4B9
| 3.60 || 0xCC36643A
|}
|}


=== sceKernelIsSecureStateForTZS ===
This is guessed name.
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940 || 0xEFA54B46
|-
| 3.60 || not present
|}
 
=== sceKernelSysrootGetErnieWakeupFactorForTZS ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-1.80 || 0x8E871C6D
|}


=== sceKernelSysrootGetKblParamForTZS ===
=== sceKernelSysrootGetSleepFactorForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-1.80 || 0x29C1049E
| 3.60 || 0x7DA87A7F
|}
|}


Returns pointer to [[KBL Param]] buffer.
This is guessed name.


<source lang="C">void *sceKernelSysrootGetKblParamForTZS(void);</source>
=== sceKernelSysrootGetCoredumpEncryptionKeyForTZS ===
 
=== sceKernelSysrootAllocForTZS ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.940-1.80 || 0x1A9E1D28
| 3.60 || 0x32546BDB
|}
|}


<source lang="C">void *sceKernelSysrootAllocForTZS(uint32_t size);</source>
This is guessed name.


== SceQafMgrForTZS ==
== SceQafMgrForTZS ==

Revision as of 20:14, 18 September 2024

SceSysmem is a kernel module that acts as the heart of the kernel. It exports multiple libraries for various features. SceSysmem is the first module that is loaded in the kernel load sequence and its libraries are imported by almost all other modules. See Virtual Memory and Physical Memory for more details on the memory subsystem.

Module

This module exists in both non-secure and secure world. The non-secure world SELF can be found in os0:kd/sysmem.skprx. It also can be found in the Boot Image.

Version World Privilege
1.50-3.61 Non-secure Kernel
1.69-1.80 Secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
0.990-3.61 SceSysmemForKernel Non-secure Kernel 0x63A519E5
3.63-3.65 SceSysmemForKernel Non-secure Kernel 0x02451F0F
0.990-3.65 SceSysmemForDriver Non-secure Kernel 0x6F25E18A
0.990-1.692 SceSysmemForDebugger Non-secure Kernel 0xC7309957
1.80-3.74 SceSysmemForDebugger Non-secure Kernel not present. Removed.
0.990-3.60 SceSysmem Non-secure User 0x37FE725A
0.990-3.65 SceDipsw Non-secure User 0xB36D5922
0.990-3.65 SceDipswForDriver Non-secure Kernel 0xC9E26388
0.990-3.61 SceUartForKernel Non-secure Kernel 0xC03DBE40
3.63-3.65 SceUartForKernel Non-secure Kernel 0x1CCD9BA3
0.990-3.740.011 SceCpu Non-secure User 0x45265161
0.990-3.61 SceCpuForKernel Non-secure Kernel 0x54BF2BAB
3.63-3.65 SceCpuForKernel Non-secure Kernel 0xA5195D20
0.990-3.65 SceCpuForDriver Non-secure Kernel 0x40ECDB0E
0.990-1.692 SceSysclibForKernel Non-secure Kernel 0x24878615
1.80-3.74 SceSysclibForKernel Non-secure Kernel not present. Removed.
0.990-3.65 SceSysclibForDriver Non-secure Kernel 0x7EE45391
0.990-3.65 SceSysrootForKernel Non-secure Kernel 0x3691DA45
0.990-3.65 SceSysrootForDriver Non-secure Kernel 0x2ED7F97A
0.990-3.65 SceKernelUtilsForDriver Non-secure Kernel 0x496AD8B4
0.990-1.692 SceZlibForDriver Non-secure Kernel 0xE241534E
1.80-3.74 SceZlibForDriver Non-secure Kernel not present. Moved to SceSblPostSsMgr#SceZlibForDriver.
0.990-3.65 SceKernelSuspendForDriver Non-secure Kernel 0x7290B21C
0.990-3.65 SceQafMgrForDriver Non-secure Kernel 0x4E29D3B6
0.990-3.65 ScePmMgrForDriver Non-secure Kernel 0xF13F32F9
0.990-3.65 SceSblAIMgrForDriver Non-secure Kernel 0xFD00C69A
0.990-3.65 SceProcEventForDriver Non-secure Kernel 0x887F19D0
0.990-3.65 SceDebugLed Non-secure User 0xAE004C0A
0.990-3.65 SceDebugLedForDriver Non-secure Kernel 0x7BC05EAD
0.990-3.61 SceDebugForKernel Non-secure Kernel 0x88C17370
3.63-3.65 SceDebugForKernel Non-secure Kernel 0x13D793B7
0.990-3.65 SceDebugForDriver Non-secure Kernel 0x88758561
0.931-3.60 SceSysmemForTZS Secure Kernel 0x08680060
0.931-3.60 SceDipswForTZS Secure Kernel 0x9DBF584C
0.931-3.60 SceUartForTZS Secure Kernel 0xA1D740D7
0.931-3.60 SceDebugForTZS Secure Kernel 0x028FFADB
0.931-3.60 SceCpuForTZS Secure Kernel 0xC516B23E
0.931-3.60 SceSysclibForTZS Secure Kernel 0xC839BB78
0.931-3.60 SceSysrootForTZS Secure Kernel 0xFEFF641D
0.931-3.60 SceQafMgrForTZS Secure Kernel 0x637069DD
0.931-3.60 ScePmMgrForTZS Secure Kernel 0x27F1AFD8
0.931-3.60 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

See SceSysmem Types.

SysEvent

Dispatcher

Module Type Event Description
ScePower 0 0x100 SCE_KERNEL_SYSEVENT_SUSPEND_START. before sceKernelCpuSuspendIntr.
ScePower 0 0x101 unknown
ScePower 0 0x102 unknown. later sceKernelCpuResumeIntr.
ScePower 0 0x20F -> 0x200 SCE_KERNEL_SYSEVENT_SUSPEND_PHASE2. after sceKernelCpuResumeIntr.
ScePower 0 0x400 SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_START.
ScePower 0 0x401 SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_MAIN. (this is a guessed name. but should be official name)
ScePower 0 0x402 SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_END. (this is a guessed name)
ScePower 1 0x1000 SCE_KERNEL_SYSEVENT_SUSPEND_FREEZE_TIME.
ScePower 1 0x400F -> 0x4000 SCE_KERNEL_SYSEVENT_SUSPEND_PHASE0.
ScePower 1 0x10000 -> 0x1000F SCE_KERNEL_SYSEVENT_RESUME_PHASE0.
ScePower 1 0x40000 SCE_KERNEL_SYSEVENT_RESUME_MELT_TIME. before sceKernelCpuResumeIntr.
ScePower 1 0x100000 SCE_KERNEL_SYSEVENT_RESUME_PHASE1_START. after sceKernelCpuResumeIntr.
ScePower 1 0x100001 SCE_KERNEL_SYSEVENT_RESUME_PHASE1_MAIN.
ScePower 1 0x100002 SCE_KERNEL_SYSEVENT_RESUME_PHASE1_END. (this is a guessed name)
ScePower 1 0x400000 SCE_KERNEL_SYSEVENT_RESUME_COMPLETED

Handler

Module Type Event Description
SceAppMgr 0 0x20F _sceAppMgrSystemSuspend
SceAppMgr 1 0x400000 _sceAppMgrSystemResume
SceAudio 0 0x1000 Something
SceAudio 0 0x400F Something
SceAudio 0 0x102 Something
SceAudio 1 0x1000F Something
SceAudioin (SceAudioIn) 0 0x102 Something
SceAudioin (SceAudioIn) 1 0x1000F Something
SceAVConfig 0 0x200 Something
SceAVConfig 1 0x400000 Something
SceAVConfig 1 0x1000F Something
SceAVConfig 1 0x100001 Something
SceBt 0 0x401 Something
SceBt 0 0x402 Something
SceBt 1 0x100001 Something
SceBt 1 0x100002 Something
SceCamera 0 0x401 Something
SceCamera 0 0x402 Something
SceCamera 0 0x400 Something
SceCamera 1 0x100000 Something
SceCamera 1 0x100002 Something
SceClockgen 1 0x10000 Something
SceClockgen 1 0x100000 Something
SceCodec 0 0x200 Something
SceCodec 1 0x10000 Something
SceCodecEngineWrapper 0 0x401 Something
SceCodecEngineWrapper 0 0x200 Something
SceCodecEngineWrapper 0 0x402 Something
SceCodecEngineWrapper 0 0x400E Something
SceCodecEngineWrapper 1 0x1000E Something
SceCodecEngineWrapper 1 0x100000 Something
SceCompat 1 0x100000 Something
SceCtrl 0 0x402 Something
SceCtrl 0 0x400C Something
SceCtrl 0 0x400 Something
SceCtrl 1 0x1000C Something
SceDbgSdio (SceDbgSdio1) 0 0x102 Something
SceDbgSdio (SceDbgSdio1) 0 0x4003 Something
SceDbgSdio (SceDbgSdio1) 1 0x10003 Something
SceDeci4pDbgp 0 0x102 Something
SceDeci4pDbgp 0 0x4000 Something
SceDeci4pDbgp 1 0x10000 Something
SceDeci4pDbgp 1 0x400000 Something
SceDeci4pDfMgr 0 0x200 Something
SceDeci4pDfMgr 0 0x100 Something
SceDeci4pDfMgr 0 0x401 Something
SceDeci4pDfMgr 0 0x402 Something
SceDeci4pDfMgr 1 0x100002 Something
SceDeci4pDfMgr 1 0x400000 Something
SceDeci4pDfMgr 1 0x100000 Something
SceDeci4pDrfp 0 any Something
SceDeci4pDtracep 0 0x200 Something
SceDeci4pDtracep 0 0x1000 Something
SceDeci4pDtracep 1 0x40000 Something
SceDeci4pDtracep 1 0x100002 Something
SceDeci4pSDfCtl 0 0x102 Something
SceDisplay 0 0x400 Something
SceDisplay 0 0x200 Something
SceDisplay 0 0x402 Something
SceDisplay 0 0x400A Something
SceDisplay 1 0x40000 Something
SceDisplay 1 0x100000 Something
SceDisplay 1 0x1000A Something
SceError 0 0x200 Something
SceError 1 0x100001 Something
SceGps (SceGpsd) 0 0x102 Something
SceGps (SceGpsd) 1 0x400000 Something
SceGpuEs4 (SceGpu) 0 0x402 Something
SceGpuEs4 (SceGpu) 0 0x4005 Something
SceGpuEs4 (SceGpu) 0 0x400 Something
SceGpuEs4 (SceGpu) 1 0x10005 Something
SceHdmi 0 0x400 Something
SceHdmi 0 0x402 Something
SceHdmi 1 0x100000 Something
SceHid 0 0x402 Something
SceHid 0 0x4000 Something
SceHid 0 0x200 Something
SceHid 1 0x100000 Something
SceHpremote (SceHprm) 1 0x1000C Something
SceIdStorage ? ? Something
SceIofilemgr 0 0x401 vfs_sync_all_mount_point
SceIofilemgr 0 0x402 Something
SceIofilemgr 0 0x400 Something
SceIofilemgr 1 0x10000 Something
SceIofilemgr 1 0x400000 Something
SceLowio (ScePervasive) 1 0x10000 Something
SceLowio (SceGpio) 1 0x10002 Something
SceLowio (ScePwm) 0 0x4002 Something
SceLowio (ScePwm) 1 0x10002 Something
SceLowio (SceI2c) 0 0x402 Something
SceLowio (SceI2c) 0 0x4002 Something
SceLowio (SceI2c) 1 0x10002 Something
SceLowio (SceDsi) 0 0x4004 Something
SceLowio (SceIftu) 0 0x4005 Something
SceLowio (SceIftu) 1 0x10005 Something
SceLowio (SceCsi) 0 0x4004 Something
SceLowio (SceCsi) 1 0x10004 Something
SceMotionDev (SceMotion) 0 0x401 Something
SceMotionDev (SceMotion) 0 0x402 Something
SceMotionDev (SceMotion) 0 0x400 Something
SceMotionDev (SceMotion) 1 0x100000 Something
SceMotionDev (SceMotion) 1 0x100002 Something
SceMsif 0 0x400C Something
SceMsif 1 0x1000C Something
SceNetPs 0 0x200 Something
SceNetPs 1 0x400000 Something
SceOled 0 0x402 Something
SceOled 0 0x4003 Something
SceOled 1 0x10003 Something
ScePfsMgr 0 0x402 Something
ScePower (ScePower) 0 0x402 Something
ScePower (ScePower) 0 0x4009 Something
ScePower (ScePower) 0 0x400 Something
ScePower (ScePower) 1 0x10009 Something
ScePower (ScePower) 1 0x100000 Something
ScePower (SceLed) 0 0x102 Something
ScePower (SceLed) 0 0x400A Something
ScePower (SceLed) 1 0x100000 Something
SceRtc 0 0x200 Something
SceRtc 0 0x1000 Something
SceRtc 1 0x1000A Something
SceRtc 1 0x100000 Something
SceSblSmSchedProxy 1 0x10004 Something
SceSblSsMgr 0 0x200 Something
SceSblSsMgr 1 0x100000 Something
SceSblUpdateMgr 0 any Something
SceSdif 0 0x400C Something
SceSdif 1 0x10009 resume eMMC with sdif reset
SceSdif 1 0x1000C resume eMMC
SceSdstor 0 0x200 Umount 0x900/0xA00/0x100. invalidate gc sdpart str.
SceSdstor 0 0x400D disable intr/power off for gc/rm
SceSdstor 1 0x100000 Something
SceSdstor 1 0x400000 Something
SceSyscon 0 0x4006 Something
SceSyscon 0 0x402 Something
SceSyscon 0 0x400F Something
SceSyscon 1 0x10006 Something
SceSyscon 1 0x1000F Something
SceTouch 0 0x401 Something
SceTouch 0 0x400 Something
SceTouch 0 0x402 Something
SceTouch 0 0x400C Something
SceTouch 1 0x1000C Something
SceTouch 1 0x100000 Something
SceUsbEtherRtl 0 0x401 Something
SceUsbEtherRtl 0 0x402 Something
SceUsbEtherRtl 0 0x400 Something
SceUsbEtherSmsc 0 0x401 Something
SceUsbEtherSmsc 0 0x402 Something
SceUsbEtherSmsc 0 0x400 Something
SceUsbServ 0 0x200 Something
SceUsbServ 0 0x400E Something
SceUsbServ 1 0x100000 Something
SceUsbServ 1 0x100002 Something
SceWlanBt (SceWlanBtRobin) 0 0x401 Something
SceWlanBt (SceWlanBtRobin) 0 0x400 Something
SceWlanBt (SceWlanBtRobin) 1 0x100000 Something
SceWlanBt (SceWlanBtRobin) 1 0x100002 Something

SceSysmemForKernel

SceSysmemForKernel_A7D44B50

Version NID
0.931.010-1.692.000 0xA7D44B50
1.800.071-3.740.011 not present

A guessed name is sceKernelSetSysmemFuncForKernel.

Used by SceKernelSSProxy's module_start to register a function that just calls SMC 0x10E (BusErrorClear).

The registered function is used internally by #sceKernelPhysicalMemReadForKernel and #sceKernelPhysicalMemWriteForKernel.

int SceSysmemForKernel_A7D44B50(void* pBusErrorClearFunc);

sceKernelSysmemModuleStartAfterProcessmgrForKernel

Version NID
3.600.011-3.610.011 0xE7938BFB
3.630.011-3.740.011 0x4E74DA48

Temp name was sceKernelInitProcessMemoryForKernel.

Used by SceProcessmgr.

int sceKernelSysmemModuleStartAfterProcessmgrForKernel(void);

sceKernelSysmemCleanerForKernel

Version NID
3.60-3.61 0x43E81C4B
3.63 0x50980298

Only implemented in sysdbg build.

int sceKernelSysmemCleanerForKernel(void);

sceKernelStrnlenFromUserForKernel

Version NID
0.931 0x9BC3DEAC
3.60 not present
SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);

sceKernelPhysicalMemWriteForKernel

Version NID
0.931.010-1.060.031 0x4B86A751
1.50-3.740.011 not present

Writes to physical address pdest using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.

SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);

sceKernelPhysicalMemReadForKernel

Version NID
0.931.010-1.060.031 0xF96E3AE2
1.50-3.740.011 not present

Temp name was memcpy_from_paddr.

Dest must be a virtual address and src must be a physical address. Returns copied size on success.

int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);

sceKernelCopyFromUser32DomainForKernel

Version NID
0.931 0xD530399A
3.60 not present
int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelCopyToUserProcTextDomainForKernel

Version NID
0.931-3.60 0x30931572
3.65 0x2995558D

Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.

Same as sceKernelCopyToUserProcDomain, but performs a DCache clean after the copy. Use this function if you want to write code in user pages.

This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.

SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);

sceKernelCopyToUserProcTextDomainForDBGPForKernel

Version NID
3.60-3.61 0xE65EA709
3.63 0x4345C61F
int sceKernelCopyToUserProcTextDomainForDBGPForKernel(SceUID pid, void *dst, const void *src, SceSize length);

sceKernelCopyToUserTextDomainForKernel

Version NID
3.60 0x67BAD5B4
3.65 0x5EF1DAAF

This is a guessed name. Temp name was sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.

Similar to sceKernelCopyToUserProcTextDomain, but performed in the current address space.

In FW 3.60, sceKernelCopyToUserProcTextDomain calls this function to perform the copy after changing address space.

SceInt32 sceKernelCopyToUserTextDomainForKernel(void *dst, const void *src, SceSize len);

sceKernelCopyToUserDomainForKernel

Version NID
0.931.010 Not present
3.60-3.61 0xA6F95838
3.63 0x499A9FFF

This is a guessed name. Temp name was sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.

Similar to sceKernelCopyToUserTextDomain, but doesn't perform any DCache clean.

Uses the same DACR, 0x15450FC3, for the copy.

int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);

sceKernelRegisterClassForKernel

Version NID
0.990 0x11761B77
3.60 not present

sceKernelFindClassByNameForKernel

Version NID
3.60 0x62989905
3.65 0x7D87F706
int sceKernelFindClassByNameForKernel(const char *name, SceClass **ppClass);

sceKernelGetUIDHeapClassForKernel

Version NID
3.60-3.61 0x4CCA935D
3.63 0x7C878E94
SceClass *sceKernelGetUIDHeapClassForKernel(void);

sceKernelGetUIDMemBlockClassForKernel

Version NID
3.60-3.61 0xAF729575
3.63 0x86681B64
SceClass *sceKernelGetUIDMemBlockClassForKernel(void);

sceKernelGetUIDDLinkClassForKernel

Version NID
0.990-3.610.011 0xC105604E
3.630.011-3.740.011 0xE4193EB6
SceClass *sceKernelGetUIDDLinkClassForKernel(void);

sceKernelGetUIDAddressSpaceClassForKernel

Version NID
3.60-3.61 0xAF180A3F
3.63 0x99D3BF76

This is a guessed name.

SceClass *sceKernelGetUIDAddressSpaceClassForKernel(void);

sceKernelGetUIDPartitionClassForKernel

Version NID
3.60-3.61 0x2791F109
3.63 0x5C0FC6BE

This is a guessed name.

SceClass *sceKernelGetUIDPartitionClassForKernel(void);

sceUIDDLinkClassInitForKernel

Version NID
3.60-3.61 0x21285F40
3.63 0x7CDB7655

Temp name was sceKernelCreateClassForKernel, sceUIDClassInitClassForKernel.

Calls sceUIDClassInitClassForDriver.

int sceUIDDLinkClassInitForKernel(SceClass *pClass, const char *name, SceClass *subclass, SceSize itemsize, void *cstr, void *dstr);

sceUIDClassGetClassInfoAllForKernel

Version NID
0.990 not present
3.60-3.61 0xC0BF149E
3.63 0x100B4029

This is a guessed name (ForDriver function name and NID changed at some point before 1.69). Temp name was sceKernelGetRegisterClassInfoForKernel.

typedef struct SceClassInfo {
    SceSize size;
    SceClass *pClass;
    SceClass *pSubClass;
    const char *name;
} SceClassInfo;

int sceUIDClassGetClassInfoAllForKernel(SceClassInfo *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);

sceKernelCreateAddressSpaceForKernel

Version NID
0.990-3.60 0x4A3737F0
3.65 0x8EE89D2C
// type: 0x10000001 (user AS)
// name: maybe titleid
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelCreateAddressSpaceOpt *pOpt);

sceKernelDeleteAddressSpaceForKernel

Version NID
0.931-3.60 0xF2D7FE3A
3.65 0x4A2E421D
int sceKernelDeleteAddressSpaceForKernel(SceUID guid);

sceKernelAddressSpaceSetNameForKernel

Version NID
0.990-1.50 not present
3.60 0x7BD56D6D
3.65 0xCEBC4963

Used by SceProcessmgr.

int sceKernelAddressSpaceSetNameForKernel(SceUID guid, const char *name);

sceKernelAddressSpaceSetPhyMemPartForKernel

Version NID
0.931-3.60 0x67955EE9
3.65 0x7DF07D60
int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, SceUInt32 index, SceKernelPhyMemPart *pPhyMemPart);

sceKernelAddressSpaceCtrSetObjectHeapForKernel

Version NID
3.60-3.61 0xFC74A355
3.63 0xFA348CB1

sceKernelAddressSpaceFreeAllMemBlockForKernel

Version NID
0.931-3.60 0x89CE1F31
3.65 0x36159CF5
int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);

sceKernelAddressSpaceUnmapForKernel

Version NID
0.931-3.61 0xCE72839E
3.63 0x73C38695
# 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);

Example: 0.990 SceSysStateMgr:

sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);

Example: 3.60 SceSysStateMgr:

sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);

sceKernelAddressSpaceSetProcessForKernel

Version NID
0.990-3.61 0x2476B90F
3.63 0x5E772E19
int sceKernelAddressSpaceSetProcessForKernel(SceUID address_space, SceUID pid);

sceKernelAddressSpaceChangeMMUContextForKernel

Version NID
0.931-3.61 0x653B0849
3.63 0x20D01AFA

Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.

SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);

sceKernelAddressSpaceGetMMUContextForKernel

Version NID
0.990 not present
3.10-3.61 0x9894B9E1
3.63 0xA7C91D62

This is a guessed name.

int sceKernelGetAddressSpaceMMUContextForKernel(SceUID address_space, SceKernelMMUContext **ppCtx);

SceSysmemForKernel_FBEF93AA

Version NID
0.931 not present
0.990-3.01 0xFBEF93AA
3.10-3.74 not present

Maybe gets MMU context. Maybe was replaced by #sceKernelAddressSpaceGetMMUContextForKernel.

int SceSysmemForKernel_FBEF93AA(SceUID address_space, void* pOut);

sceKernelAddressSpaceGetTimerVbaseForKernel

Version NID
0.990 not present
0.996.090-3.610.011 0x7D92B2D3
3.630.011-3.740.011 0xFA1A73DD
int sceKernelAddressSpaceGetTimerVbaseForKernel(SceUID address_space, void **ppBase);

sceKernelGetAddressSpaceInfoForKernel

Version NID
0.990.000-3.610.011 0x4492421F
3.630.011-3.740.011 0xC3EF4055

This is a guessed name..

int sceKernelGetAddressSpaceInfoForKernel(SceUID address_space, SceKernelAddressSpaceInfo *pInfo);

sceKernelAddressSpaceGetMMUL1InfoForKernel

Version NID
0.931-0.990 0x671A3444
3.60 not present

Gets information about a L1PT entry in the translation table of an address space. Pass the virtual address of the target entry maps as addr.

SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);

sceKernelAddressSpaceGetMMUL2InfoForKernel

Version NID
0.931 0xCB6E1C80
3.60 not present
int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID address_space, const void *addr, void *pInfo);

sceKernelAddressSpaceGetMMUL1AllInfoForKernel

Version NID
0.931-0.990 0x1A898F2E
3.60 not present
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x4008];
} SceKernelAddressSpaceMMUL1AllInfo;

int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID address_space, SceKernelAddressSpaceMMUL1AllInfo *pInfo);

sceKernelAddressSpaceGetMMUL2AllInfoForKernel

Version NID
0.931 0x1E1AA29B
3.60 not present
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x400];
} SceKernelAddressSpaceMMUL2AllInfo;

int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID address_space, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);

sceKernelAddressSpaceGetMemoryTypeForKernel

Version NID
0.990-3.61 0xCC7BB240
3.63 0x0B5A3E93
int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);

sceKernelAddressSpaceVAtoPAForKernel

Version NID
0.990-3.61 0xF2179820
3.63 0x1BAF8C0B
int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, SceUInt32 mode, void *pVA, void **pPA);

sceKernelAddressSpaceVARangeToPAVectorForKernel

Version NID
0.990-3.61 0xF7250E6C
3.63 0xA541E0CF
int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID address_space, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);

sceKernelAddressSpaceGetPhyMemPartByIndexForKernel

Version NID
3.60-3.61 0x3F74E45C
3.63 0x47C55DCC
int sceKernelAddressSpaceGetPhyMemPartByIndexForKernel(SceUInt32 index, void **result);

sceKernelAddressSpaceGetPartitionByIndexForKernel

Version NID
3.60-3.61 0x210DB518
3.63 0x1F84FE44

This is a guessed name.

SceUIDPartitionObject *sceKernelAddressSpaceGetPartitionByIndexForKernel(void *pAS, int pindex);

sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel

Version NID
3.60-3.61 0x46A5CB84
3.63 0xC3F9607E
int sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel(SceUID asid, int a2, int a3, int a4);

sceKernelCheckAddressSpaceForKernel

Version NID
3.60-3.61 0x8B07BB52
3.63 0x16A54BFE

This is a guessed name.

int sceKernelCheckAddressSpaceForKernel(void);

sceKernelGetKernelAddressSpaceForKernel

Version NID
1.500.151-3.610.011 0xC38B4D52
3.630.011-3.740.011 0x2E5CC243
void* sceKernelGetKernelAddressSpaceForKernel(void);

sceKernelCreatePhyMemPartForKernel

Version NID
0.931-3.61 0x2E36E0C4
3.63 0xA2DFA383

Calls #sceKernelCreatePhyMemPartByPbaseForKernel with pbase = 0.

int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart **pPhyMemPart);

sceKernelCreatePhyMemPartByPbaseForKernel

Version NID
0.931-3.61 0x63D83911
3.63 0x5CC56F87
/*
type

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 sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);

sceKernelDeletePhyMemPartForKernel

Version NID
0.931-3.61 0x2AEA9E09
3.63 0x3F72B2E7
int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);

sceKernelGetPhyMemPartAllForKernel

Version NID
0.931-3.61 0x2F6F9C2C
3.63 0x021053DD
int sceKernelGetPhyMemPartAllForKernel(SceUInt32 vis_level, SceUID *pVector, SceSize vectorSize, SceUInt32 *ret_num);

sceKernelGetPhyMemPartInfoForKernel

Version NID
0.931-0.990 0x67849418
3.60 not present
int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);

sceKernelGetPhyMemPartInfoByIDForKernel

Version NID
0.931-3.61 0xF4FA0575
3.63 0x029F5989
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 guid, SceKernelPhyMemPartInfo *pInfo);

sceKernelGetPhyMemPartInfoCoreForKernel

Version NID
0.931 not present
0.990-3.61 0x3650963F
3.63-3.65 0xB9B69700
int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);

sceKernelGetPhyMemPartInfoForDebuggerForKernel

Version NID
0.990-1.50 not present
3.60-3.61 0x54E85275
3.63 0x73E03A38

info size is 0xB0-bytes.

int sceKernelGetPhyMemPartInfoForDebuggerForKernel(SceKernelPhyMemPart *pPhyMemPart, void *pInfo);

sceKernelGrowPhyMemPartForKernel

Version NID
0.990-3.61 0x6B3F4102
3.63 0x5B434019

Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.

int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);

sceKernelGrowPhyMemPartByPbaseForKernel

Version NID
0.990 not present
3.60-3.61 0x775AA5E3
3.63 0x36FDA794

Temp name was sceKernelGrowPhyMemPartWithFlagsForKernel.

Grows physical memory partition with pbase.

int sceKernelGrowPhyMemPartByPbaseForKernel(SceKernelPhyMemPart *pPMP, SceUIntPtr pbase, SceSize psize);

sceKernelGetGrownPhyMemPartSizeForKernel

Version NID
0.990 not present
3.60-3.61 0x4D809B47
3.63 0xBC36755F

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.

int sceKernelGetGrownPhyMemPartSizeForKernel(void);

SceSysmemForKernel_153A08A0

Version NID
0.990-3.61 0x153A08A0
3.63 0x6D563733

Adds 1 to pPhyMemPart->nClient using SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver, and returns its new value.

SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);

sceKernelAllocPhyPageForKernel

Version NID
0.990-3.61 0xD449547B
3.63-3.74 0xB488C82E

Temp name was sceKernelPhyMemPartAllocPhyPageForKernel.

int sceKernelAllocPhyPageForKernel(void *pPhyMemPart, SceSize size, void **ppPhyPage);

sceKernelResetPhyMemPartForKernel

Version NID
3.60 0xEEB85560
3.65 0x9B7E673F

Used by SceProcessmgr#sceKernelResetGameBudgetForKernel.

Called with same argument as #sceKernelSetPhyPartGameForKernel.

int sceKernelResetPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);

sceKernelShowPhyMemPartForKernel

Version NID
3.60-3.61 0x5C257482
3.63-3.65 0x8F0B5536

Prints information about a Physical Memory Partition.

Only implemented in sysdbg build.

SceInt32 sceKernelShowPhyMemPartForKernel(SceKernelPhyMemPart *pPMP);

sceKernelFreePhyPageForKernel

Version NID
0.990-3.61 0x00BC5B4A
3.63 0x193A9D2F
int sceKernelFreePhyPageForKernel(void *pPhyMemPart, void *pPage);

sceKernelSetPhyMemPartHookForKernel

Version NID
3.60-3.61 0x17F1AA22
3.63 0x31FA81B5

This is a guessed name.

Only implemented in sysdbg build.

int sceKernelSetPhyMemPartHookForKernel(void *pHook);

sceKernelSetPhyMemPartLogCallbackForKernel

Version NID
3.60-3.61 0x72E7BFAC
3.63 0x93D0A183

This is a guessed name.

Only implemented in sysdbg build.

int sceKernelSetPhyMemPartLogCallbackForKernel(void *pCallbacks);

sceKernelAllocKernelHeapForKernel

Version NID
0.931-0.990 0x432EADA6
3.60 not present
int sceKernelAllocKernelHeapForKernel(SceSize size);

sceKernelGetHeapInfoForKernel

Version NID
0.931-3.61 0x91733EF4
3.63 0x17DB1A0A
// 0.931-0.990:
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);

// 3.60:
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceUInt32 level, SceKernelHeapInfo *pInfo);

sceKernelGetHeapInfoAllForKernel

Version NID
0.990-3.61 0x48D87E17
3.63 0x1380E144

This is a guessed namee.

int sceKernelGetHeapInfoAllForKernel(SceUInt32 vis_level, void *pInfo, SceSize infoSize, SceUInt32 *pnInfo);

sceKernelGetHeapInfoAllChunkForKernel

Version NID
0.931-0.990 0xAC4C0EB1
3.60 not present
int sceKernelGetHeapInfoAllChunkForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);

sceKernelGetHeapInfoByPtrForKernel

Version NID
0.931-0.990 not present
3.60-3.61 0x68451777
3.63 0x80A75187

Temp name was sceKernelGetHeapInfoByPointerForKernel.

int sceKernelGetHeapInfoByPtrForKernel(void *pObject, SceKernelHeapInfo *pInfo);

sceKernelReallocHeapMemoryForKernel

Version NID
3.60-3.61 0xFDC0EA11
3.63 0x8EE8B917

This is a guessed name.

void *sceKernelReallocHeapMemoryForKernel(SceUID heapid, void *ptr, SceSize size);

sceKernelHeapEnableModeForKernel

Version NID
3.60-3.61 0xF1433852
3.63 0x0B36F7F9

This is a guessed name.

int sceKernelHeapEnableModeForKernel(SceUID heapid, SceUInt32 mode);

sceKernelHeapDiableModeForKernel

Version NID
3.60-3.61 0x71869119
3.63 0x6E82D5A0

This is a guessed name.

int sceKernelHeapDiableModeForKernel(SceUID heapid, SceUInt32 mode);

sceKernelHeapMemoryGetAllocateSizeForKernel

Version NID
3.60-3.61 0x60735311
3.63 0xD124075A

This is a guessed name.

SceSize sceKernelHeapMemoryGetAllocateSizeForKernel(void *ptr);

sceKernelPrintHeapSegmentListForKernel

Version NID
3.60-3.61 0x2EE50533
3.63 0x82059651

Only implemented in sysdbg build.

int sceKernelPrintHeapSegmentListForKernel(SceUID heap_guid);

sceKernelGetKernelFixedHeapForKernel

Version NID
0.990.000-3.610.011 0x68CB9266
3.630.000-3.740.011 0x3717C322

Temp name was sceKernelGetFixedHeapBySizeForKernel.

SceUIDFixedHeapObject *sceKernelGetKernelFixedHeapForKernel(SceSize size);

sceKernelGetFixedHeapInfoForKernel

Version NID
0.990.000-3.610.011 0x4FA4A624
3.630.000-3.740.011 0x890D9160
int sceKernelGetFixedHeapInfoForKernel(SceUID heapid, SceKernelFixedHeapInfo *pInfo);

sceKernelGetFixedHeapInfoByPointerForKernel

Version NID
0.990.000-3.610.011 0x219E90FD
3.630.000-3.740.011 0xA24D2C8D
int sceKernelGetFixedHeapInfoByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, SceKernelFixedHeapInfo *pInfo);

sceKernelFixedHeapSetHookForKernel

Version NID
0.931.010-1.06 not present
1.500.151-3.610.011 0x8C8E2DD1
3.630.000-3.740.011 0xD4511A52
int sceKernelFixedHeapSetHookForKernel(SceUID heapid, void *hookdata);

sceKernelFixedHeapAllocObjectForKernel

Version NID
0.990.000-3.610.011 0xC8672A3D
3.630.000-3.740.011 0xABA5313C

This is a guessed name.

void *sceKernelFixedHeapAllocObjectForKernel(SceUIDFixedHeapObject *pFixedHeap);

sceKernelFixedHeapFreeObjectForKernel

Version NID
0.990.000-3.610.011 0x571660AA
3.630.000-3.740.011 0x93344755

This is a guessed name.

int sceKernelFixedHeapFreeObjectForKernel(SceUIDFixedHeapObject *pFixedHeap, void *pObject);

sceKernelFixedHeapSetHookByPointerForKernel

Version NID
0.931.010-2.12 not present
2.500.071-3.610.011 0x3EC2345B
3.630.000-3.740.011 0x811C452B

This is a guessed name.

int sceKernelFixedHeapSetHookByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, void *a2);

sceKernelNameHeapInsertForKernel

Version NID
0.990-3.61 0x08AB3DAE
3.63 0xB628B46B
int sceKernelNameHeapInsertForKernel(const char *name, int flags, char **result);

sceKernelNameHeapDeleteForKernel

Version NID
0.990-3.61 0x9C7B62AB
3.63 0x634D0D0C

name max length is 31 characters.

int sceKernelNameHeapDeleteForKernel(const char *name, SceUInt32 flag);

sceKernelNameHeapLinkForKernel

Version NID
3.60-3.61 0xEC1293D2
3.63 0x40965FD1
int sceKernelNameHeapLinkForKernel(const char *name, int flags, void **result);

sceKernelNameHeapFindForKernel

Version NID
3.60-3.61 0xB543A23C
3.63 0x9F1A9AA6
int sceKernelNameHeapFindForKernel(const char *name, int flags, void **result);

sceKernelNameHeapGetKeyForKernel

Version NID
3.60-3.61 0x942D15FC
3.63 0xEB48682E

This is a guessed name. Computes MurmurHash. Used to get UID by name.

SceUInt32 sceKernelNameHeapGetKeyForKernel(const char *key, SceSize len, SceUInt32 seed);

sceKernelNameHeapGetInfoForKernel

Version NID
0.931.010-0.990 not present
0.996.090-3.610.011 0xE443253B
3.630.000-3.740.011 0x01194C2E
int sceKernelNameHeapGetInfoForKernel(void *pInfo);

sceKernelCreateObjectHeapForKernel

Version NID
3.60-3.61 0x36830F46
3.63 0x9D8F3BE8
int sceKernelCreateObjectHeapForKernel(SceUID pid, SceBool a2, SceFixedHeapHook *pHeapHook, SceKernelObjectHeap **ppObjectHeap);

sceKernelCreateObjectHeapWithHeapForKernel

Version NID
3.60-3.61 0x7FD757FE
3.63 0x660DC18A

This is a guessed name.

int sceKernelCreateObjectHeapWithHeapForKernel(SceKernelObjectHeap *pObjectHeap, SceUID pid, SceUID heapid);

sceKernelDeleteObjectHeapForKernel

Version NID
3.60-3.61 0x080BA2F3
3.63 0x2F526AB8

This is a guessed name.

int sceKernelDeleteObjectHeapForKernel(SceKernelObjectHeap *pObjectHeap);

sceKernelObjectHeapAllocForKernel

Version NID
3.60-3.61 0x7FDF483A
3.63 0xEBFC8E10

This is a guessed name.

void *sceKernelObjectHeapAllocForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size);

sceKernelObjectHeapFreeForKernel

Version NID
3.60-3.61 0x131CEF52
3.63 0x17D3D4BD

This is a guessed name.

int sceKernelObjectHeapFreeForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size, void *pObject);

sceKernelObjectHeapSetResourceLimitForKernel

Version NID
3.60-3.61 0x98E6905B
3.63 0xDFA1EB57
int sceKernelObjectHeapSetResourceLimitForKernel(int a1, int a2, int a3, int a4, int a5);

sceKernelObjectHeapSetResourceLimitAllForKernel

Version NID
3.60-3.61 0x5409397F
3.63 0x067F2550
int sceKernelObjectHeapSetResourceLimitAllForKernel(SceKernelObjectHeap *pObjectHeap, int a2, int a3);

sceKernelObjectHeapSetSizeForKernel

Version NID
3.60-3.61 0x6427560F
3.63 0xB591E49F

This is a guessed name.

int sceKernelObjectHeapSetSizeForKernel(SceUInt32 index, SceUInt32 size);

sceKernelGetObjectHeapForKernel

Version NID
3.60-3.61 0x3B75CBED
3.63 0x857408DA

This is a guessed name.

SceKernelObjectHeap *sceKernelGetObjectHeapForKernel(void);

sceKernelGetSharedObjectHeapForKernel

Version NID
3.60-3.61 0xBF0294E4
3.63 0x791D6205

This is a guessed name.

SceKernelObjectHeap *sceKernelGetSharedObjectHeapForKernel(void);

SceSysmemForKernel_B8D769C6

Version NID
3.60-3.61 0xB8D769C6
3.63 0xDBEACE2C
int SceSysmemForKernel_B8D769C6(SceKernelObjectHeap *pObjectHeap, void *info);

sceUIDCreateEntryHeapForKernel

Version NID
0.990-3.60 0x19CAEF35
3.65 0x89BEF058
int sceUIDCreateEntryHeapForKernel(SceUID pid, SceUID heap_guid);

sceUIDDeleteEntryHeapForKernel

Version NID
0.990-3.60 0xF0C3FCFC
3.65 0xF6D09BD9
int sceUIDDeleteEntryHeapForKernel(SceUID guid);

sceUIDRegisterForKernel

Version NID
0.931-0.990 0x59162CD7
3.60 not present

Calls #sceGUIDRegisterForKernel.

int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);

sceUIDObjectSetClassForKernel

Version NID
0.931-0.990 0x226DE851
3.60 not present
int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);

sceUIDGetUIDVectorByClassForKernel

Version NID
0.931.010-1.060.031 0xA2F03233
1.500.151-3.740.011 not present

Calls #sceGUIDGetUIDVectorByClassForKernel.

sceUIDGetProcUIDVectorByClassForKernel

Version NID
0.990.000-1.060.031 0x51C08396
1.500.151-3.740.011 not present

sceUIDReferObjectWithLevelForKernel

Version NID
0.990 0xF79B52B2
3.60 not present
int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);

sceUIDGetObjectForKernel

Version NID
0.931-0.990 0xC4893914
3.60 not present

Calls #sceGUIDGetObjectForDriver.

int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);

sceUIDtoObjectForKernel

Version NID
0.990-3.60 0xED221825
3.65 0xFA6C098C

Calls SceSysmem#sceGUIDGetObjectForDriver.

SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);

sceUIDClassIsSubclassForKernel

Version NID
0.990-1.691 not present (in ForDriver)
3.60-3.61 0x48750A5A
3.63 0x7F7D5C4A

This is a guessed name. Temp name was sceUIDClassIsWithinSubclassChainForKernel.

SceBool sceUIDClassIsSubclassForKernel(SceClass *pClass, SceClass *pTargetClass);

sceUIDEntryHeapCloseAllPUIDForKernel

Version NID
0.931-3.60 0xFAF96C1F
3.65 0x133024A5
int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID guid);

sceKernelUIDEntryHeapGetInfoForKernel

Version NID
0.990 not present
3.60-3.61 0x686AA15C
3.63 0xCCD47B97

Official name may also be sceUIDEntryHeapGetInfoForKernel (seen in 4.00).

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);

sceUIDEntryHeapSetHookForKernel

Version NID
3.60-3.61 0xCD985AEB
3.63 0x666C878F

?Implemented in internal system software.? Not implemented in external system software.

int sceUIDEntryHeapSetHookForKernel(SceUID guid, void *pHook);

sceUIDEntryGetNameForKernel

Version NID
3.60-3.61 0x114E6476
3.63 0x5FD15C6E

This is a guessed name.

char *sceUIDEntryGetNameForKernel(SceUIDEntry *pEntry);

sceUIDEntryGetLevelForKernel

Version NID
3.60-3.61 0xC2F7D8A4
3.63 0x797C858B

This is a guessed name.

SceUInt16 sceUIDEntryGetLevelForKernel(SceUIDEntry *pEntry);

sceUIDEntryGetAttrForKernel

Version NID
3.60-3.61 0x8FB73A29
3.63 0x17F12DCE

This is a guessed name.

SceUInt32 sceUIDEntryGetAttrForKernel(SceUIDEntry *pEntry);

sceUIDEntryGetLinkCountForKernel

Version NID
3.60-3.61 0x876A7F44
3.63 0xF3DB2D71

This is a guessed name.

SceUInt8 sceUIDEntryGetLinkCountForKernel(SceUIDEntry *pEntry);

sceUIDEntryGetUIDForKernel

Version NID
3.60-3.61 0x6BB6AF94
3.63 0x03A2CAF0

This is a guessed name.

SceUID sceUIDEntryGetUIDForKernel(SceUIDEntry *pEntry);

sceGUIDRegisterForKernel

Version NID
0.990-3.61 0xAF42AAD5
3.63 0x6DB44A42
SceUID sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);

sceGUIDUnregisterForKernel

Version NID
0.931-0.990 0xE79BBCF2
3.60 not present
int sceGUIDUnregisterForKernel(SceUID uid);

sceGUIDOpenByGUIDForKernel

Version NID
0.990-3.61 0xCF53EEE4
3.63 0x89D33DF0
SceUID sceGUIDOpenByGUIDForKernel(SceUID guid);

sceGUIDNameForKernel

Version NID
0.990.000-1.060.031 0x250EE289
1.50-3.740.011 not present
char *sceGUIDNameForKernel(SceUID uid);

sceGUIDtoClassForKernel

Version NID
0.990-3.61 0x66636970
3.63 0x368F1C36
SceClass *sceGUIDtoClassForKernel(SceUID guid);

sceGUIDGetObjectWithClassForKernel

Version NID
0.990-3.61 0x7ABFA9A7
3.63 0x0E43E113

Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.

int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);

sceGUIDGetUIDVectorByClassForKernel

Version NID
0.931.010-3.600.011 0xEC7D36EF
3.630.011-3.740.011 0x52137FA3

Copy UIDs to pVector by referring to all objects created by pClass.

/*
 * 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);

sceGUIDGetUIDVectorWeakByClassForKernel

Version NID
0.931.010-1.060.031 not present
1.500.151-3.610.011 0x59F577E8
3.630.011-3.740.011 0xE9957329

Copy UIDs to pVector by referring to all objects created by pClass.

/*
 * 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);

sceGUIDGetEntryForKernel

Version NID
3.60-3.61 0x45F2A59C
3.63 0xFF464A49
int sceGUIDGetEntryForKernel(SceUID guid, SceUIDEntry **ppEntry);

sceGUIDGetEntryInfoAllForKernel

Version NID
0.990.000-3.610.011 0x2A79C51C
3.630.011-3.740.011 0x3BF0DE65
int sceGUIDGetEntryInfoAllForKernel(SceUInt32 vis_level, SceUID guid, SceUID *pVector, SceUInt32 nVector, void *pInfo);

sceGUIDGetEntryInfoClassForKernel

Version NID
0.990.000-3.610.011 0xE90CFD62
3.630.011-3.740.011 0x71E934DB
int sceGUIDGetEntryInfoClassForKernel(SceUID guid, SceClass *pClass, SceUInt32 vis_level, void *pInfoVector, SceUInt32 nVector, SceUInt32 *ret_num);

sceGUIDKernelCreateForKernel

Version NID
0.990 0xE6FAD50A
3.60 not present

Create a GUID with default attribute (0x30000).

int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);

sceGUIDKernelCreateWithAttrForKernel

Version NID
0.990-3.61 0x53E1FFDE
3.63 0x6D26B066

Create a GUID with the specified attribute.

int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);

sceGUIDKernelCreateWithOptForKernel

Version NID
0.990-0.995 not present
0.996-3.60 0xDF0288D7
3.65 0xFB6390CE

This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.

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);

sceGUIDGetVisibilityLevelForKernel

Version NID
3.60-3.61 0xC69666C3
3.63 0x4E923101
SceUInt32 sceGUIDGetVisibilityLevelForKernel(SceUID guid);

sceGUIDSetVisibilityLevelForKernel

Version NID
3.60-3.61 0xCB8D03C0
3.63 0xE8CC2166

Sets visibilityLevel into guid's GUIDEntry.

int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);

sceGUIDFindByObjectForKernel

Version NID
0.990-3.61 0x95ABFDC3
3.63 0xEC90AA11
SceUID sceGUIDFindByObjectForKernel(void *pObject);

sceGUIDFindByNameForKernel

Version NID
3.60-3.61 0xCEBA8031
3.63 0xBDE00106
SceUID sceGUIDFindByNameForKernel(const char *name);

sceGUIDFindByNameAllForKernel

Version NID
3.60-3.61 0x4B5C85AC
3.63 0xF49C0BE8
// return value: to reverse, should be either SceUID guid or void* pObj
SceUID sceGUIDFindByNameAllForKernel(const char *name);

sceGUIDGetPIDForKernel

Version NID
3.60-3.61 0xCF5A2311
3.63 0xBD42A0FC

Returns Process ID for guid.

SceUID sceGUIDGetPIDForKernel(SceUID guid);

sceGUIDSetPIDForKernel

Version NID
3.60-3.61 0x812E7A53
3.63 0x46DF8C8A

Sets Process ID for guid.

int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);

sceGUIDSetCNOAForKernel

Version NID
3.60-3.61 0x8D6AF468
3.63 0x5EDDEEB5

Setting Class Name Object Attr.

int sceGUIDSetCNOAForKernel(SceUID guid, SceClass *pClass, const char *name, void *pObject, SceUInt32 attr);

sceGUIDSetForKernel

Version NID
0.931-3.61 0xD7B323EB
3.63 0xBF275C5A

Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.

int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);

scePUIDGetEntryInfoAllForKernel

Version NID
0.931.010-1.692.000 not present
1.800.071-3.610.011 0x2770A7D7
3.630.011-3.740.011 0x3C3005EE
int scePUIDGetEntryInfoAllForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, void *pInfo);

scePUIDGetAttrForKernel

Version NID
3.60-3.61 0x86E83C0D
3.63 0x96BD47D1
int scePUIDGetAttrForKernel(SceUID pid, SceUID puid, SceUInt32 *pAttr);

scePUIDReleaseObjectForKernel

Version NID
0.990-3.61 0x3FCA782B
3.63 0xCE561224
int scePUIDReleaseObjectForKernel(SceUID pid, SceUID puid);

scePUIDGetInfoForKernel

Version NID
0.990 not present
3.60-3.61 0x12ED88AE
3.63 0x857701D4
// pInfo size is 0x14 bytes
int scePUIDGetInfoForKernel(SceUID pid, SceUID puid, void *pInfo);

scePUIDtoGUIDWithDebugForKernel

Version NID
3.60-3.61 0xB3E2AA7A
3.63 0x188C8742

This is a guessed name.

SceUID scePUIDtoGUIDWithDebugForKernel(SceUID pid, SceUID puid);

scePUIDReferObjectForKernel

Version NID
0.990-3.61 0x620E00E7
3.63 0x2C15615F
int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);

scePUIDOpenByNameWithOptForKernel

Version NID
3.60-3.61 0x22F79E82
3.63 0x201E970B
SceUID scePUIDOpenByNameWithOptForKernel(ScePID pid, const char *name, void *pOpt);

scePUIDGetPUIDVectorByGUIDForKernel

Version NID
0.931.010-2.06 not present
2.100.081-3.610.011 0xBF04FC83
3.630.011-3.740.011 0xCE16AD91
int scePUIDGetPUIDVectorByGUIDForKernel(SceUID pid, SceUID guid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);

scePUIDGetUIDVectorByClassForKernel

Version NID
0.990.000-3.610.011 0xB16D5136
3.630.000-3.740.011 0x08C05493

Similar to #sceGUIDGetUIDVectorByClassForKernel.

int scePUIDGetUIDVectorByClassForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);

scePUIDReferObjectWithClassForKernel

Version NID
3.60-3.61 0x9C53F457
3.63 0x9C23DFF7

This is a guessed name.

int scePUIDReferObjectWithClassForKernel(SceUID pid, SceUID puid, SceClass *pClass, void **ppObject);

scePUIDOpenByGUIDWithOptForKernel

Version NID
3.60-3.61 0x53A2E272
3.63 0x1FF2749A

This is a guessed name.

SceUID scePUIDOpenByGUIDWithOptForKernel(SceUID pid, SceUID guid, void *pOpt);

scePUIDGetGUIDVectorForKernel

Version NID
3.60-3.61 0x3203AE64
3.63 0x66489B4B

This is a guessed name.

int scePUIDGetGUIDVectorForKernel(SceUID pid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);

sceKernelGetPhyPartKernelForKernel

Version NID
0.931-3.61 0x4D38F861
3.63-3.65 0x0164D817

return gpPhyPartKernel;

void *sceKernelGetPhyPartKernelForKernel(void);

sceKernelGetPhyPartToolForKernel

Version NID
0.990-3.61 0xF8E95A5A
3.63-3.65 0x0B1B4ACA
void *sceKernelGetPhyPartToolForKernel(void);

sceKernelGetPhyPartGameForKernel

Version NID
3.60-3.61 0xB60568F9
3.63-3.65 0x62800A6B
void *sceKernelGetPhyPartGameForKernel(void);

sceKernelSetPhyPartGameForKernel

Version NID
3.60-3.61 0x77876A8D
3.63-3.65 0x3753C584
void sceKernelSetPhyPartGameForKernel(void *pPhyPart);

sceKernelSetPhyPartCdramForKernel

Version NID
3.60-3.61 0x07FEBBCA
3.63 0xDCEF10B2

This is a guessed name.

void sceKernelSetPhyPartCdramForKernel(void *pPhyPart);

sceKernelPhyMemLowAllocForKernel

Version NID
0.931-3.61 0x5E169FEF
3.63 0xEA98CCE1

Allocate a range of physically contiguous "pages" from a PhyMemLow object.

// 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);

sceKernelPhyMemLowPA2VAForKernel

Version NID
0.931-3.61 0x0FD6B756
3.63 0x2CFD8C9A
// type must be 0x10002
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);

sceKernelGetPhyMemLowInfoForKernel

Version NID
0.931-0.990 0x06A4DA6C
3.60 not present
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);

sceKernelPhyMemLowFreeForKernel

Version NID
0.931-3.61 0x18B99FDD
3.63 0x844DF3DA

Free a range of physical "pages" from a PhyMemLow object.

// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);

sceKernelSetPhyMemLowHookForKernel

Version NID
3.60-3.61 0x2658EE0A
3.63 0x2C7B8D65

This is a guessed name.

Only implemented in sysdbg build.

int sceKernelSetPhyMemLowHookForKernel(void *pHook);

sceKernelAllocMemBlockByCommandForKernel

Version NID
3.60-3.61 0xCA91B9D5
3.63 0x455B0A4C
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);

sceKernelAllocSimpleMemBlockForKernel

Version NID
0.990-3.61 0xF81F4672
3.63 0x814CDCC5
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);

sceKernelFreeSimpleMemBlockForKernel

Version NID
0.990-3.61 0xA1FFA2C9
3.63 0xA4DB88E1
int sceKernelFreeSimpleMemBlockForKernel(void *a1);

sceKernelGetSimpleMemBlockBaseForKernel

Version NID
0.990-3.61 0x0A8D14EC
3.63 0x39D5A3B7
int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);

sceKernelSimpleMemBlockGetFIFOForKernel

Version NID
3.60-3.61 0x43DFCE89
3.63 0xBD625136

This is a guessed name.

int sceKernelSimpleMemBlockGetFIFOForKernel(void *pResult);

sceKernelGetMemBlockInfoAllForKernel

Version NID
3.60-3.61 0xFEF54604
3.63 0x1D19C864
int sceKernelGetMemBlockInfoAllForKernel(void *pPart, int a2, int a3, int a4, int a5, SceUInt32 level, void *pInfoBuffer, int a8, SceUInt32 *a9);

sceKernelGetMemBlockInfoSimpleForKernel

Version NID
0.990-3.61 0x2364A170
3.63 0xBA441FD0
int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);

sceKernelGetMemBlockTypeForKernel

Version NID
3.60-3.61 0x289BE3EC
3.63 0xD44FE44B
/***
 * 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);

sceKernelRemapMemBlockForKernel

Version NID
0.931-1.05 0x8D332AE1
1.50-3.60 not present. Moved to ForDriver

Temp name was sceKernelRemapBlockForKernel.

See sceKernelRemapMemBlockForDriver.

sceKernelSetMemBlockDebugCallbackForKernel

Version NID
3.60-3.61 0x01DE3AB7
3.63 0xF57A97A0

This is a guessed name.

Only implemented in sysdbg build.

int sceKernelSetMemBlockDebugCallbackForKernel(void *pCallbacks);

sceKernelMemBlockAssocPhyPageForKernel

Version NID
3.60-3.61 0xA88F6D88
3.63 0x441E6BE9

This is a guessed name.

int sceKernelMemBlockAssocPhyPageForKernel(SceUID guid, const SceUIntPtr *a2);

sceKernelAllocPartitionStackMemBlockForKernel

Version NID
3.60-3.61 0x64133268
3.63 0x40870E74

Temp name was sceKernelAllocStackBlockForKernel.

SceUID sceKernelAllocPartitionStackMemBlockForKernel(const char *name, SceSize size, int a3);

sceKernelMemBlockGetCodeForKernel

Version NID
3.60-3.61 0x61C2AA52
3.63 0x48D2E408

This is a guessed name.

SceUint32 sceKernelMemBlockGetCodeForKernel(SceUint32 type);

sceKernelAllocPartitionMemBlockForKernel

Version NID
0.931-3.60 0x5FFE4B79
3.65 0x6DB46017

Temp name was sceKernelAllocSystemCallTableForKernel.

SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelPartitionGetInfoForKernel

Version NID
3.60-3.61 0x7BE4D3D1
3.63 0xFB101B86
int sceKernelPartitionGetInfoForKernel(SceUID part_id, void *pInfo);

sceKernelGetPhyPageResetForKernel

Version NID
0.990-3.61 0xEB350679
3.63 0x8FD11E02
void *sceKernelGetPhyPageResetForKernel(void);

SceSysmemForKernel_BD33EDDF

Version NID
0.931 0xBD33EDDF
3.60 not present

Gets thread's name. Returns 0 on success.

int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);

sceKernelAllocForKernel

Version NID
0.990-3.60 0xC0A4D2F3
3.65 0x85571907
void *sceKernelAllocForKernel(SceSize len);

sceKernelAllocWithOptForKernel

Version NID
3.60-3.61 0xA2CD1697
3.63 0xCF3C3F7A

typedef struct SceAllocOpt {
    SceSize size;   // 0x14
    SceSize data04; // maybe len align?
    SceSize align;
    int data0C;
    int data10; 
} SceAllocOpt;

void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);

sceKernelFreeForKernel

Version NID
0.990-3.60 0xABAB0FAB
3.65 0x4233C16D
int sceKernelFreeForKernel(void *ptr);

sceKernelSetAllocFreeHookForKernel

Version NID
3.60-3.61 0xBC2E2B2B
3.63 0x42834422

Only implemented in sysdbg build.

int sceKernelSetAllocFreeHookForKernel(void *pHook);

SceSysmemForKernel_C38D61FC

Version NID
0.990 0xC38D61FC
3.60 not present

Calls #SceSysmemForDriver_89A44858.

SceSysmemForKernel_7C797940

Version NID
0.931-0.990 0x7C797940
3.60 not present

Calls #SceSysmemForKernel_620E00E7 or #sceGUIDReferObjectForDriver.

sceKernelVSlotMapProcMemoryForKernel

Version NID
3.60-3.61 0xFAD03241
3.63 0x14D3807B
int sceKernelVSlotMapProcMemoryForKernel(SceUID pid, void *addr, SceSize size, SceUInt32 flag, SceKernelVSlot *pVslot, int *pBaseAddrOrOffset);

sceKernelVSlotUnmapProcMemoryForKernel

Version NID
3.60-3.61 0x789CD5BF
3.63 0x4EEF69C7
int sceKernelVSlotUnmapProcMemoryForKernel(SceKernelVSlot *pVslot);

SceSysmemForKernel_ECF9435A

Version NID
3.60-3.61 0xECF9435A
3.63 0xFCB5745A

Writes nWords times the 4-byte ch starting at usermode address u_dst. Write is performed with the STRT instruction and DACR=0x15450FC3 (same as |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 "NID Poisoning" by Team Molecule.

int SceSysmemForKernel_ECF9435A(void *u_dst, SceUInt32 ch, SceUInt32 nWords);

SceSysmemForKernel_ECC68E7B

Version NID
3.60-3.61 0xECC68E7B
3.63 0x05822B82
int SceSysmemForKernel_ECC68E7B(SceUInt32 phymem_type, SceUInt32 *result);

SceSysmemForKernel_E68A9F1B

Version NID
3.60-3.61 0xE68A9F1B
3.63 0x1DE4953F
int SceSysmemForKernel_E68A9F1B(int a1, SceClass **ppClass);

sceKernelCheckOpenVMDomainForKernel

Version NID
2.000.081-3.610.011 0xD514BB56
3.630.000-3.740.011 0x4E6D8BC3

Returns 2 if Virtual Machine is open, 0 else. Returns 0x80027101 on error.

SceUInt32 sceKernelCheckOpenVMDomainForKernel(void);

sceeKernelSetNameHeapHookForKernel

Version NID
3.60-3.61 0x1E11F41D
3.63 0x6DBDA03B

This is a guessed name.

Not implemented in sysdbg build either. Probably only implemented during real development.

Only return 0.

int sceeKernelSetNameHeapHookForKernel(void *pHook);

SceSysmemForKernel_22708F14

Version NID
3.60-3.61 0x22708F14
3.63 0x456ECB54
SceUInt32 SceSysmemForKernel_22708F14(void *a1, int a2);

SceSysmemForKernel_22A26637

Version NID
3.60-3.61 0x22A26637
3.63 0xAD19285A
int SceSysmemForKernel_22A26637(void *a1, int a2, int a3, int a4, int a5, int a6, void *a7);

SceSysmemForKernel_C6F04370

Version NID
3.60-3.61 0xC6F04370
3.63 0x02DAD732

init budget data in sysmem.

int SceSysmemForKernel_C6F04370(void);

SceSysmemForKernel_B339A865

Version NID
3.60-3.61 0xB339A865
3.63 0x320E907F

Returns 0.

int SceSysmemForKernel_B339A865(void);

SceSysmemForKernel_AD5A83E3

Version NID
3.60-3.61 0xAD5A83E3
3.63 0xBF70207B
int SceSysmemForKernel_AD5A83E3(SceUID guid, SceUInt32 vis_level, SceUInt32 a3, int *a4);

SceSysmemForKernel_A504BA60

Version NID
3.60-3.61 0xA504BA60
3.63 0xCAB15F74

SceSysmemForKernel_7DC46969

Version NID
3.60-3.61 0x7DC46969
3.63 0x8450BFF7

Returns 1.

int SceSysmemForKernel_7DC46969(void);

SceSysmemForDriver

sceKernelProcessGetContextForDriver

Version NID
1.80-3.74 0x2ECF7944

This is a guessed name.

int sceKernelProcessGetMMUContextForDriver(SceUID pid, SceKernelMMUContext **ppCtx);

sceKernelProcessSwitchContextForDriver

Version NID
0.990-3.74 0x2D711589

This is a guessed name.

int sceKernelProcessSwitchMMUContextForDriver(SceKernelMMUContext *new_context, SceKernelMMUContext *prev_context);

scePUIDOpenByGUIDForDriver

Version NID
0.931-3.60 0xBF209859

Temp name was sceKernelCreateUserUidForDriver.

SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID guid);

scePUIDOpenByGUIDWithFlagsForDriver

Version NID
0.990-3.60 0xCED1547B

Temp name was sceKernelCreateUserUidForClassForDriver.

SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);

scePUIDOpenByNameForDriver

Version NID
0.931-3.60 0x513B9DDD

Temp name was sceKernelCreateUserUidForNameForDriver.

SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);

scePUIDOpenByNameWithClassForDriver

Version NID
0.931-3.60 0x8DA0BCA5

Equivalent to scePUIDOpenByNameForDriver, but object's class is checked to be a subclass of provided pClass before opening.

SceUID scePUIDOpenByNameWithClassForDriver(ScePID pid, const char *name, SceClass *pClass);

scePUIDOpenByNameWithExactClassForDriver

Version NID
0.990.000-3.010.031 0xB800123C
3.10-3.740.011 not present

This is a guessed name. Temp name was add_heap.

Equivalent to scePUIDOpenByNameWithClass, but the object's class must match exactly the provided pClass.

SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID pid, const char *name, const SceClass *pClass);

scePUIDCloseForDriver

Version NID
0.990-3.60 0x84A4AF5E

Temp name was sceKernelDeleteUserUidForDriver.

int scePUIDCloseForDriver(SceUID pid, SceUID puid);

scePUIDSetNameForDriver

Version NID
0.990-3.60 0x12624884

Temp name was sceKernelSetNameForPidForUidForDriver.

int scePUIDSetNameForDriver(SceUID pid, SceUID puid, const char *name);

scePUIDGetObjectForDriver

Version NID
0.990-3.60 0xFE6D7FAE

Temp name was sceKernelGetObjectForPidForUidForDriver.

int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);

scePUIDtoGUIDForDriver

Version NID
0.990.000-3.740.011 0x45D22597

Temp name was sceKernelKernelUidForUserUidForDriver.

Returns the Global UID of a process based on its Process UID.

SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID puid);

scePUIDtoGUIDWithClassForDriver

Version NID
0.990 not present
3.60 0x184172B1

Temp name was sceKernelKernelUidForUserUidForClassForDriver.

SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID puid, SceClass *pClass);

scePUIDGetNameForDriver

Version NID
0.990-3.60 0x09896EB7

Temp name was sceKernelGetNameForPidByUidForDriver, scePUIDGetEntryHeapNameForDriver

int scePUIDGetNameForDriver(SceUID pid, SceUID puid, char **pName);

scePUIDGetClassForDriver

Version NID
0.990-3.60 0xE9728A12

Temp name was sceKernelGetClassForPidForUidForDriver.

int scePUIDGetClassForDriver(SceUID pid, SceUID puid, SceClass **ppClass);

sceUIDKernelCreateForDriver

Version NID
0.990.000-1.060.031 0x7FC849B1
1.50-3.740.011 not present

Calls #sceGUIDKernelCreateForKernel.

Create a UID with default attribute (0x30000).

int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);

sceGUIDKernelCreateForDriver

Version NID
0.931-0.990 not present
1.000.071-3.740.011 0x56A13E90

Temp name was sceUIDKernelCreate2ForDriver, sceKernelCreateUidObj2ForDriver.

Create a UID with default attribute (0x30000).

SceUID sceGUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);

sceUIDOpenByNameForDriver

Version NID
0.931-0.990 0x796881D6
3.60 not present

Calls #sceGUIDOpenByNameForDriver.

SceUID sceUIDOpenByNameForDriver(const char *name);

sceUIDCloseForDriver

Version NID
0.990 0x32C5F628
3.60 not present

if (flag_or_addr_or_pid & 0x40000000) == 0 calls #sceGUIDCloseForDriver else #scePUIDCloseForDriver.

int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);

SceSysmemForDriver_F09A7D09

Version NID
0.990 0xF09A7D09
3.60-3.74 not present

Calls #sceGUIDCloseForDriver.

int SceSysmemForDriver_F09A7D09(SceUID uid);

sceUIDGetDefaultClassForDriver

Version NID
0.931-0.990 0xFE28F5EB
3.60 not present
SceClass *sceUIDGetDefaultClassForDriver(void);

sceUIDtoObjectForDriver

Version NID
0.990 0xAB7AC3D1

This is a guessed name.

Calls #sceUIDtoObjectForKernel.

SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);

sceUIDtoClassForDriver

Version NID
0.990 0x65B9B393
3.60 not present

Calls #sceGUIDtoClassForKernel.

SceClass *sceUIDtoClassForDriver(SceUID uid);

sceUIDClassInitForDriver

Version NID
0.931-0.990 0xE6D75E99
3.60 not present

Renamed to sceUIDClassInitClassForDriver.

int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);

sceUIDClassInitClassForDriver

Version NID
0.931-0.990 not present
3.60 0x61317102

Temp name was sceKernelCreateClassForDriver.

int sceUIDClassInitClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);

sceUIDGetClassInfoAllForDriver

Version NID
0.990 0x3EF32C6C
3.60 not present. Moved to ForKernel

See sceUIDClassGetClassInfoAllForKernel

sceGUIDCreateForDriver

Version NID
0.990-3.60 0x89A44858

Temp name was sceKernelCreateUidObjForUidForDriver.

Create a GUID with default attribute (0x30000) for the specified UID.

SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID guid, SceKernelObject **ppEntry);

sceGUIDOpenByNameForDriver

Version NID
0.931-3.60 0xD76E7452

Temp name was sceKernelOpenUidForNameForDriver.

SceUID sceGUIDOpenByNameForDriver(const char *name);

sceGUIDCloseForDriver

Version NID
0.990-3.60 0x047D32F2

Temp name was sceKernelDeleteUidForDriver.

int sceGUIDCloseForDriver(SceUID guid);

sceGUIDGetClassForDriver

Version NID
0.990-3.60 0xC74B0152

Temp name was sceKernelGetClassForUidForDriver.

int sceGUIDGetClassForDriver(SceUID guid, SceClass **ppClass);

sceGUIDSetNameForDriver

Version NID
1.50-3.60 0x4CFA4100

Temp name was sceKernelSetObjectForUidForDriver. Wrongfully named scePUIDSetNameForDriver.

Calls the same routine as sceGUIDSetForKernel, but passes NULL for pClass and pObject.

SceInt32 sceGUIDSetNameForDriver(SceUID guid, const char *name);

sceGUIDNameForDriver

Version NID
0.990 0xB2BB6216
3.60 0xE655852F

Temp name was sceKernelGetNameForUid2ForDriver.

char* sceGUIDNameForDriver(SceUID guid);

sceGUIDGetNameForDriver

Version NID
3.60 0xA78755EB

Temp name was sceKernelGetNameForUidForDriver.

int sceGUIDGetNameForDriver(SceUID guid, char **pName);

sceGUIDGetObjectForDriver

Version NID
0.990-3.60 0x0FC24464

Temp name was sceKernelGUIDGetObjectForDriver.

int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);

sceGUIDReferObjectForDriver

Version NID
3.60 0x0F5C84B7

Temp name was sceKernelGetObjectForUidForDriver.

int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);

sceGUIDReferObjectWithLevelForDriver

Version NID
0.990 not present
3.60 0xF6DB54BA

Temp name was sceKernelGetObjectForUidForAttrForDriver.

int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);

sceGUIDReferObjectWithClassLevelForDriver

Version NID
0.990-3.60 0x77066FD1
int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);

sceGUIDReferObjectWithClassForDriver

Version NID
0.990-3.60 0x00ED6C14

Temp name was sceKernelGetObjForUidForDriver.

int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);

sceGUIDReferObjectWithSubclassForDriver

Version NID
0.990-3.60 0x72A98D17

Temp name was sceKernelGetObjectForUidForClassTreeForDriver.

int sceGUIDReferObjectWithSubclassForDriver(SceUID guid, SceClass *pClass, SceKernelObject **ppEntry);

sceGUIDReleaseObjectForDriver

Version NID
0.990-3.60 0x149885C4

Temp name was sceKernelUidReleaseForDriver.

int sceGUIDReleaseObjectForDriver(SceUID uid);

sceKernelGetUIDClassForDriver

Version NID
3.60 0x85336A1C

This is a guessed name.

SceClass *sceKernelGetUIDClassForDriver(void);

sceKernelIsSubclassForDriver

Version NID
0.990 0x6484D03E
1.691 0x55F4826F
3.60 not present. Moved to ForKernel

See sceUIDClassIsSubclassForKernel

SceSysmemForDriver_6F2ACDAE

Version NID
1.69 0x6F2ACDAE
1.80-3.74 not present

Temp name was switch_ttb_for_pid.

Changes the TTBR to point to the tables for a given PID.

int SceSysmemForDriver_6F2ACDAE(SceUID pid);

sceKernelAllocMemBlockForDriver

Version NID
0.931-3.65 0xC94850C9

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.

To allocate a kernel RW block of memory, specify type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW.

To allocate a block of memory with a specific physical address, specify type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW or type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW, pOpt->attr = 2, and pOpt->pbase = physical address.

To allocate a block of memory that is kernel executable, specify type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX.

To allocate a block of memory that is physically contiguous, specify type = 0x30808006, pOpt->attr = 0x200004 and an alignment to pOpt->alignment.

To allocate a block of memory inside the CDRAM, specify type = 0x40404006.

SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelAllocMemBlockForDebuggerForDriver

Version NID
0.940-1.50 0x59F3159C

Same as #sceKernelAllocMemBlockForDriver but authorizes null pOpt.

SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelAllocMemBlockWithInfoForDriver

Version NID
0.990-3.60 0xD44F464D

Temp name was sceKernelAllocMemBlockExtForDriver.

SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);

sceKernelFreeMemBlockForDriver

Version NID
0.931-3.65 0x009E1C61
int sceKernelFreeMemBlockForDriver(SceUID uid);

sceKernelFindMemBlockByAddrForDriver

Version NID
0.990-3.60 0x8A1742F6
SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);

sceKernelFindProcMemBlockByAddrForDriver

Version NID
0.990-3.60 0x857F1D5A

Temp name was sceKernelFindMemBlockByAddrForPidForDriver.

SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);

sceKernelGetMemBlockAllocSizeForDriver

Version NID
0.990.000-2.120.011 0x63E5754B
2.500.071-3.740.011 not present

This function was replaced since System Software version 2.500.071 by #sceKernelGetMemBlockAllocMapSizeForDriver.

int sceKernelGetMemBlockAllocSizeForDriver(SceUID memid, SceSize *pAllocSize);

sceKernelGetMemBlockAllocMapSizeForDriver

Version NID
0.931.010-2.120.011 not present
2.500.071-3.740.011 0x78337B62

Temp name was sceKernelMemBlockGetSomeSizeForDriver.

This function is a replacement since System Software version 2.500.071 of #sceKernelGetMemBlockAllocSizeForDriver.

int sceKernelGetMemBlockAllocMapSizeForDriver(SceUID memid, SceSize *pAllocMapSize);

sceKernelGetMemBlockMemtypeByAddrForDriver

Version NID
0.990-3.60 0xF3BBE2E1

Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.

SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);

sceKernelGetMemBlockPARangeForDriver

Version NID
0.990-3.60 0x98C15666

Temp name was sceKernelGetMemBlockAddrPairForUidForDriver.

Returns the physical address and size (pRange) of the memory block if it is physically continuous.

int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);

sceKernelGetMemBlockBaseForDriver

Version NID
0.990-3.74 0xA841EDDA
/**
 * @brief Get mapped base address of memory block.
 *
 * Get base address of memory block.
 * @param[in]	uid		block id
 * @param[out]	ppBase		base address of memory block
 * @retval	SCE_OK		success
 * @retval	<SCE_OK		Error
 */
int sceKernelGetMemBlockBaseForDriver(SceUID uid, void **ppBase);

sceKernelGetMemBlockVBaseForDriver

Version NID
3.60 0xB81CF0A3

Temp name was sceKernelGetMemBlockKernelPageForDriver.

int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);

sceKernelGetMemBlockMappedBaseForDriver

Version NID
3.60 0x0B1FD5C3
int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);

sceKernelGetMemBlockPAVectorForDriver

Version NID
0.990-3.60 0x19A51AC7

Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.

int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);

sceKernelGetMemBlockInfoForDriver

Version NID
0.990-3.60 0xA73CFFEF

Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.

int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);

sceKernelGetMemBlockInfoExForDriver

Version NID
3.60 0x24A99FFF

This is a guessed name.

int sceKernelGetMemBlockInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *pInfo);

sceKernelDecRefCountMemBlockForDriver

Version NID
0.990-3.60 0xF50BDC0C

Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.

int sceKernelDecRefCountMemBlockDriver(SceUID uid);

sceKernelIncRefCountMemBlockForDriver

Version NID
0.990-3.60 0xEAF3849B

Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.

int sceKernelIncRefCountMemBlockForDriver(SceUID uid);

sceKernelMemBlockType2MemtypeForDriver

Version NID
0.931-3.60 0x20C811FA
int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);

sceKernelMemBlockTypeGetPrivilegesForDriver

Version NID
3.60 0x6A0792A3
int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);

sceKernelMemBlockType2SourceMemTypeForDriver

Version NID
0.990-3.60 0xCB0F3A33

This is a guessed name. Temp name was sceKernelMemBlockTypeGetUnknownForDriver.

#define SCE_KERNEL_SOURCE_MEMORY_TYPE_IO    0x100000
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_LPDDR 0x200000
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_CDRAM 0x400000

int sceKernelMemBlockType2SourceMemTypeForDriver (SceKernelMemBlockType type);

sceKernelMapMemBlockForDriver

Version NID
0.990-3.60 0x58D21746

Temp name was sceKernelMapBlockUserVisibleForDriver, sceKernelPartitionMapMemBlockForDriver.

int sceKernelMapMemBlockForDriver(SceUID uid);

sceKernelMapMemBlockWithFlagForDriver

Version NID
3.60 0x04059C4B

This is a guessed name. Temp name was sceKernelMapBlockUserVisibleWithFlagForDriver.

/**
 * Map a memblock.
 *
 * @param[in] uid  - GUID of the memblock to map.
 * @param[in] flag - Set to 1 to prevent DCache invalidation before mapping.
 *
 * @return 0 on success, < 0 on error.
 */
int sceKernelMapMemBlockWithFlagForDriver(SceUID uid, int flag);

sceKernelRemapMemBlockForDriver

Version NID
0.990-1.06 not present
1.500.151-3.740.011 0xDFE2C8CB

Temp name was sceKernelRemapBlockForDriver, sceKernelPartialRemapMemBlockForDriver.

This can be used to remap RW memory as RX. To do this, first allocate a memory block of type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW. After you are done writing, call sceKernelRemapMemBlockForDriver with type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX.

int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);

sceKernelUnmapMemBlockForDriver

Version NID
3.60 0xFFCD9B60
int sceKernelUnmapMemBlockForDriver(SceUID uid);

sceKernelGetPhysicalMemoryTypeForDriver

Version NID
0.990-3.60 0x0AAA4FDD

Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver

int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);

sceKernelGetPhyMemInfoForDriver

Version NID
0.931-3.60 0x89475192
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60
  SceSize size;  // Size of this structure
  void* pbase;   // Base physical address
  SceSize psize; // Physical size
} SceKernelPhyMemInfo;

// as of FW 0.931-0.990, pindex must be one of these values: 1 PhyPartKernel, 8 PageVenezia, 9 PageVIP
#define SCE_KERNEL_PHYMEMPART_KERNEL_INDEX 1
#define SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX 6
#define SCE_KERNEL_PAGE_VENEZIA_INDEX 8
#define SCE_KERNEL_PAGE_VIP_INDEX 9

SceInt32 sceKernelGetPhyMemInfoForDriver(SceUInt32 pindex, SceKernelPhyMemInfo *pInfo);

sceKernelPartialAllocMemBlockForDriver

Version NID
3.60 0x16713BE8

This is a guessed name.

/**
 * Allocates PhyPages for a partial range of a memblock.
 *
 * @param[in] uid   - GUID of the memblock.
 * @param[in] vbase - Start of the range.
 * @param[in] vsize - Size of the range.
 * @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[FREE|NONE]
 * 
 * @return 0 on success, < 0 on error.
 */
int sceKernelPartialAllocMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 opCheck);

sceKernelPartialFreeMemBlockForDriver

Version NID
3.60 0x8C43B052

This is a guessed name.

/**
 * Unmaps and frees PhyPages for a partial range of a memblock.
 *
 * @param[in] uid   - GUID of the memblock.
 * @param[in] vbase - Start of the range.
 * @param[in] vsize - Size of the range.
 * @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|NONE]
 * 
 * @return 0 on success, < 0 on error.
 */
int sceKernelPartialFreeMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);

sceKernelPartialMapMemBlockForDriver

Version NID
3.60 0x13805CA8

This is a guessed name.

/**
 * Maps PhyPages for a partial range of a memblock.
 *
 * @param[in] uid   - GUID of the memblock.
 * @param[in] vbase - Start of the range.
 * @param[in] vsize - Size of the range.
 * @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|FREE|ALLOCNOMAP|NONE]
 * 
 * @return 0 on success, < 0 on error.
 */
int sceKernelPartialMapMemBlockForDriver (SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);

sceKernelPartialRemapMemBlockForDriver

Version NID
3.60 0x4C584B29

This is a guessed name.

/**
 * Remaps PhyPages for a partial range of a memblock.
 *
 * @param[in] uid   - GUID of the memblock.
 * @param[in] vbase - Start of the range.
 * @param[in] vsize - Size of the range.
 * @param[in] op    - SCE_KERNEL_MEMBLOCK_PARTIAL_OP_[REMAP_RO|REMAP_RW] | SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED_RW|MAPPED_RO|NONE]
 * 
 * @return 0 on success, < 0 on error.
 */
int sceKernelPartialRemapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 op);

sceKernelPartialUnmapMemBlockForDriver

Version NID
3.60 0x6C76AD89

This is a guessed name.

/**
 * Unmaps PhyPages for a partial range of a memblock.
 *
 * @param[in] uid   - GUID of the memblock.
 * @param[in] vbase - Start of the range.
 * @param[in] vsize - Size of the range.
 * @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED|NONE]
 * 
 * @return 0 on success, < 0 on error.
 */
int sceKernelPartialUnmapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);

sceKernelGetMemBlockProcessForDriver

Version NID
0.990-3.60 0x1EFC96EA
int sceKernelGetMemBlockProcessForDriver(SceUID uid);

sceKernelMemBlockToPARangeForDriver

Version NID
3.60 0x64DBE472

This is a guessed name. Temp name was sceKernelMemBlockGetVirPageForDriver.

Gets a single PARange from the memblock. Returns an error if the memblock has more than one PARange.

int sceKernelMemBlockToPARangeForDriver(SceUID uid, SceKernelPARange *pRange);

sceKernelMemBlockToPAVectorForDriver

Version NID
3.60 0x987EE587
int sceKernelMemBlockToPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);

sceKernelCreateHeapForDriver

Version NID
0.931-3.60 0x9328E0E8

The heap pool is thread safe.

has list "SCE_KERNEL_HEAP_HAS_HEAPCB".

// pOpt can be NULL
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);

sceKernelDeleteHeapForDriver

Version NID
0.940-3.60 0xD6437637
int sceKernelDeleteHeapForDriver(SceUID uid);

sceKernelVerifyHeapForDriver

Version NID
0.990-3.60 0xC50A9C0D
int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);

sceKernelShrinkHeapForDriver

Version NID
3.60 0x856FA2E3
int sceKernelShrinkHeapForDriver(SceUID heapid);

sceKernelAllocHeapMemoryForDriver

Version NID
0.931-3.60 0x7B4CB60A

Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.

Calls sceKernelAllocHeapMemoryWithOptionForDriver with a3 = 0.

void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);

sceKernelAllocUncacheHeapMemoryForDriver

Version NID
3.60 0x7750CEA7

Temp name was sceKernelAllocHeapMemoryFromGlobalHeapForDriver.

Calls sceKernelAllocHeapMemoryForDriver with uncache heap.

void* sceKernelAllocUncacheHeapMemoryForDriver(SceSize size);

sceKernelAllocUncacheHeapMemoryWithOptionForDriver

Version NID
0.990-3.60 0x0B4ED16A

Temp name was sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver.

Calls sceKernelAllocHeapMemoryWithOptionForDriver with uncache heap.

void* sceKernelAllocUncacheHeapMemoryWithOptionForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelAllocHeapMemoryWithOptForDriver

Version NID
3.60 0xB415B5A8

Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.

Same as sceKernelAllocHeapMemoryForDriver but uses pOpt.

void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelAllocHeapMemoryWithOptionForDriver

Version NID
0.990-3.60 0x49D4DD9B

Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.

Same as sceKernelAllocHeapMemoryForDriver but uses pOpt.

void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelFreeHeapMemoryForDriver

Version NID
0.990-3.60 0x3EBCE343

Temp name was sceKernelMemPoolFreeForDriver.

int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);

sceKernelFreeUncacheHeapMemoryForDriver

Version NID
3.60 0xFB817A59

Temp name was sceKernelFreeHeapMemoryFromGlobalHeapForDriver.

int sceKernelFreeUncacheHeapMemoryForDriver(void *ptr);

sceKernelCountFillValueFromUserForDriver

Version NID
3.60 0xBDA6E42B

Temp name was sceKernelFirstDifferentBlock32UserForDriver.

int sceKernelCountFillValueFromUserForDriver(unsigned int *ptr, int value, int byte_size);

sceKernelCountFillValueFromUserProcForDriver

Version NID
1.69-3.60 0x8334454F

Temp name was sceKernelFirstDifferentBlock32UserForPidForDriver.

int sceKernelCountFillValueFromUserProcForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);

sceKernelCountFillValue64FromUserForDriver

Version NID
0.931.010-2.120.011 not present
2.500.071-3.740.011 0xBB3B02C2

Temp name was sceKernelFirstDifferentBlock64UserForDriver.

int sceKernelCountFillValue64FromUserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);

sceKernelCountFillValue64FromUserProcForDriver

Version NID
0.931.010-2.120.011 not present
2.500.071-3.740.011 0xE83855FD

Temp name was sceKernelFirstDifferentBlock64UserForPidForDriver.

int sceKernelCountFillValue64FromUserProcForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);

sceKernelVAtoPAForDriver

Version NID
0.990.000-3.740.011 0x8D160E65

Temp name was sceKernelGetPaddrForDriver.

This will write the physical address for a virtual address pVA to memory pointed to by pPA.

Returns <0 on error, values >=0 indicate success.

int sceKernelVAtoPAForDriver(ScePVoid pVA, SceUIntPtr *pPA);

sceKernelVAtoPABySWForDriver

Version NID
0.990.000-3.740.011 0x65419BD3

Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.

int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);

sceKernelProcVAtoPAForDriver

Version NID
0.990.000-2.120.011 0xC51934BD
2.500.071-3.740.011 not present
int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);

sceKernelProcModeVAtoPAForDriver

Version NID
0.990.000-3.740.011 0x61A67D32

Temp name was sceKernelGetPaddrForPidForDriver.

int sceKernelProcModeVAtoPAForDriver(SceUID pid, SceUInt32 mode, void *pVA, void **pPA);

sceKernelVARangeToPAVectorForDriver

Version NID
0.931.010-3.740.011 0xE68BEEBD

Temp name was sceKernelGetPaddrListForDriver.

This function writes into pVector->output_buffer an array of vRange that encompasses the block of memory specified in the input. pVector->ret_count will contain the number of entries written. If pVector->output_buffer is null, it will just write the count.

int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);

sceKernelVARangeToPAVectorBySWForDriver

Version NID
0.931.010-1.06 not present
1.500.151-3.740.011 0x08A8A7E8

This is a guessed name. Temp name was sceKernelGetPaddrListForLargePageForDriver.

int sceKernelVARangeToPAVectorBySWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);

sceKernelVARangeToPAVectorByHWForDriver

Version NID
0.931.010-1.06 not present
1.500.151-3.740.011 0x16844CE6

Temp name was sceKernelGetPaddrListForSmallPageForDriver.

int sceKernelVARangeToPAVectorByHWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);

sceKernelVARangeToPARangeForDriver

Version NID
0.940-3.740.011 0xAE36C775

Temp name was sceKernelGetPaddrPairForDriver.

int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);

sceKernelVARangeToPARangeBySWForDriver

Version NID
0.931.010-1.06 not present
1.500.151-3.740.011 0x32257A24

This is a guessed name. Temp name was sceKernelGetPaddrPairForLargePageForDriver.

int sceKernelVARangeToPARangeBySWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);

sceKernelVARangeToPARangeByHWForDriver

Version NID
0.931.010-1.06 not present
1.500.151-3.740.011 0xB3575090

This is a guessed name. Temp name was sceKernelGetPaddrPairForSmallPageForDriver.

int sceKernelVARangeToPARangeByHWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);

sceKernelIsAccessibleRangeForDriver

Version NID
0.931-3.60 0x9C78064C

Temp name was sceKernelFindMemBlockForDriver.

Also exported as #sceKernelIsAccessibleRangeForDebugger.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeForDriver(SceUInt32 permission_type, const void *pVA, SceSize len);

sceKernelIsAccessibleRangeProcForDriver

Version NID
0.931-3.60 0x9F6E45E3

Temp name was sceKernelFindMemBlockForPidForDriver.

Also exported as #sceKernelIsAccessibleRangeProcForDebugger.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 permission_type, const void *pVA, SceSize len);

sceKernelIsEqualAccessibleRangeProcBySWForDriver

Version NID
1.800.071-3.740.011 0xF4AD89D8

Temp name was sceKernelProcIsPAWithinSameSection, sceKernelIsPaddrWithinSameSectionForUidForDriver.

int sceKernelIsEqualAccessibleRangeProcBySWForDriver(SceUID pid, int permission_type, void *pVA, SceSize len);

sceKernelGetDebugPADramRangeForDriver

Version NID
1.800.071-3.740.011 0xC9928F5E

This is a guessed name. Temp name was sceKernelGetUnknownValidPhysAddressSpaceForDriver.

int sceKernelGetDebugPADramRangeForDriver(SceUIntPtr *address, SceSize *length);

sceKernelIsVAWithinDebugPADramRangeForDriver

Version NID
1.800.071-3.740.011 0xA7C0D1FC

This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver.

int sceKernelIsVAWithinDebugPADramRangeForDriver(const void *pVA);

sceKernelUserMapForDriver

Version NID
0.990-3.60 0x278BC201

Temp name was sceKernelMapUserBlockDefaultTypeForDriver.

Assigns type 0.

SceUID sceKernelUserMapForDriver(const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);

sceKernelProcUserMapForDriver

Version NID
0.931.010-3.36 not present
3.500.000-3.740.011 0x0091D74D

Temp name was sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly the real name.

Assigns type 0.

SceUID sceKernelProcUserMapForDriver(SceUID pid, const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);

sceKernelUserMapWithFlagsForDriver

Version NID
0.931.030-1.060.031 not present
1.500.151-3.740.011 0x7D4F8B5F

Temp name was sceKernelMapUserBlockForDriver.

Permission is either "1" for read only, no execute or "2"/"3" for read write, no execute. Type is either 0, 1, or 17 and affects the block type. 0 is default. This will allocate kernel memory starting at kernel_page. To get the same memory as the user pointer, add the kernel_offset. kernel_size is how much is allocated.

// this signature is for FW 1.50-1.69
int sceKernelUserMapWithFlagsForDriver(SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);

// this signature is for FW 3.60 - it now allows to give a name
int sceKernelUserMapWithFlagsForDriver(char *name, SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);

sceKernelUserUnmapForDriver

Version NID
0.990-3.60 0x00575B00

Temp name was sceKernelMemBlockReleaseForDriver.

int sceKernelUserUnmapForDriver(SceUID uid);

sceKernelUnlockRangeForDriver

Version NID
3.60 0x75C70DE0

Temp name was sceKernelMemRangeReleaseForDriver.

int sceKernelUnlockRangeForDriver(void *addr, SceSize size);

sceKernelUnlockRangeProcForDriver

Version NID
3.60 0xA8525B06

Temp name was sceKernelMemRangeReleaseForPidForDriver.

int sceKernelUnlockRangeProcForDriver(SceUID pid, void *addr, SceSize size);

sceKernelUnlockRangeWithModeForDriver

Version NID
3.60 0x22CBE925

Temp name was sceKernelMemRangeReleaseWithPermForDriver, sceKernelUnlockRangeWithPermForDriver.

Decreases references to pages.

int sceKernelUnlockRangeWithModeForDriver(SceKernelLockMode mode, void *addr, SceSize size);

sceKernelLockRangeForDriver

Version NID
3.60 0x59A4402F

Temp name was sceKernelMemRangeRetainForDriver.

int sceKernelLockRangeForDriver(void *addr, SceSize size);

sceKernelLockRangeProcForDriver

Version NID
3.60 0x659586BF

Temp name was sceKernelMemRangeRetainForPidForDriver.

int sceKernelLockRangeProcForDriver(SceUID pid, void *addr, SceSize size);

sceKernelLockRangeWithModeForDriver

Version NID
3.60 0xBC0A1D60

Temp name was sceKernelMemRangeRetainWithPermForDriver, sceKernelLockRangeWithPermForDriver.

Increases references to pages.

int sceKernelLockRangeWithModeForDriver(SceKernelLockMode mode, const void *addr, SceSize size);

sceKernelReadUserForDriver

Version NID
0.990 0xE08F3967
3.60 not present
int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);

sceKernelCopyToUserForDriver

Version NID
0.931-3.60 0x6D88EF8A

Temp name was sceKernelMemcpyKernelToUserForDriver.

Copies size bytes from a kernel buffer to a user buffer. Writes to uaddr are performed using strt-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns SCE_OK.

SceInt32 sceKernelCopyToUserForDriver(void *uaddr, const void *kaddr, SceSize size);

sceKernelCopyToUserProcForDriver

Version NID
0.931-3.60 0x6B825479

Temp name was sceKernelMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserForDriver.

Temporarily switches to specified process' address space for a call to sceKernelCopyToUser.

SceInt32 sceKernelProcCopyToUserForDriver(ScePID pid, void *uaddr, const void *kaddr, SceSize size);

sceKernelCopyToUserProcDomainForDriver

Version NID
0.931-1.69 0x571D2739
3.60 not present

Temp name was sceKernelRoMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserRoForDriver.

Same as sceKernelCopyToUserProc, but sets DACR to 0xFFFFFFFF (ignore access permission bits in page table) before the copy then restores it. Use this function instead of sceKernelCopyToUserProc if you need to write data to read-only pages.

SceInt32 sceKernelCopyToUserProcDomainForDriver(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelCopyFromUserForDriver

Version NID
0.931-3.60 0xBC996A7A

Temp name was sceKernelMemcpyUserToKernelForDriver.

Copies size bytes from a user buffer to a kernel buffer. Reads from uaddr are performed using ldrt-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns SCE_OK.

SceInt32 sceKernelCopyFromUserForDriver(void *kaddr, const void *uaddr, SceSize size);

sceKernelCopyFromUserProcForDriver

Version NID
0.931.010-3.60 0x605275F8

Temp name was sceKernelMemcpyUserToKernelForPidForDriver, sceKernelProcCopyFromUserForDriver.

Temporarily switches to specified process' address space for a call to sceKernelCopyFromUser.

SceInt32 sceKernelCopyFromUserProcForDriver(SceUID pid, void *dst, void *src, SceSize size);

sceKernelCopyFromToUserForDriver

Version NID
0.990 not present
1.50-3.60 0x1BD44DD5

Temp name was sceKernelMemcpyUserToUserForDriver, sceKernelUserCopyForDriver.

int sceKernelCopyFromToUserForDriver(void *dst, const void *src, SceSize size);

sceKernelCopyFromToUserProcForDriver

Version NID
0.990 not present
1.50-3.60 0x8E086C33

Temp name was sceKernelMemcpyUserToUserForPidForDriver, sceKernelProcUserCopyForDriver.

int sceKernelCopyFromToUserProcForDriver(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelUserStrnlenForDriver

Version NID
0.931 not present (in ForKernel)
0.940-0.990 0xFF06898A
1.50-3.60 not present

Temp name was sceKernelStrnlenFromUserForDriver.

SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);

sceKernelStrnlenUserForDriver

Version NID
0.990 not present
1.50-3.60 0xB429D419
SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);

sceKernelProcStrnlenUserForDriver

Version NID
0.990 not present
1.50-3.60 0x9929EB07
SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);

sceKernelProcUserStrcpyForDriver

Version NID
0.990-1.50 0xEBCB3970
3.60 not present
int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);

sceKernelStrncpyFromUserSpecialForDriver

Version NID
0.990-1.50 0x7440BCDA
3.60 not present
int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);

sceKernelStrncpyToUserSpecialForDriver

Version NID
0.990-1.50 0x369355F1
3.60 not present
int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);

sceKernelUserStrncpyForDriver

Version NID
0.931 not present. Present but not exported.
0.940-0.990 0xE6D5EFE4
1.50-3.60 not present

Returns 0 on success.

int sceKernelUserStrncpyForDriver(char *dst, const char *src, SceSize maxlen);

sceKernelStrncpyFromUserForDriver

Version NID
0.990 not present
1.50-3.60 0xDB3EC244

Temp name was sceKernelStrncpyUserToKernelForDriver.

int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);

sceKernelProcStrncpyFromUserForDriver

Version NID
0.990 not present
1.50-3.60 0x75AAF178

Temp name was sceKernelStrncpyUserForPidForDriver.

int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);

sceKernelStrncpyToUserForDriver

Version NID
0.990 not present
1.50-3.60 0x80BD6FEB

Temp name was sceKernelStrncpyKernelToUserForDriver.

int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);

sceKernelProcStrncpyToUserForDriver

Version NID
0.990 not present
1.50-3.60 0xFED82F2D

Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.

int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);

SceSysmemForDebugger

This library was removed on FW 1.80.

sceKernelPhysicalAddressSpaceStartForDebugger

Version NID
0.931 0x6AE2188F
1.691-3.60 not present
int sceKernelPhysicalAddressSpaceStartForDebugger(void);

sceKernelGetPhysicalAddressSpaceForDebugger

Version NID
0.931 0xE8905626
1.691-3.60 not present

In FW 0.931, it calls sceKernelPhysicalAddressSpaceStartForDebugger.

void *sceKernelGetPhysicalAddressSpaceForDebugger(void);

sceKernelIsAccessibleRangeProcForDebugger

Version NID
0.931-1.692 0x01DFC193
1.80-3.60 not present. Exported as #sceKernelIsAccessibleRangeProcForDriver.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);

sceKernelIsAccessibleRangeForDebugger

Version NID
0.931-1.692 0xD027761F
1.80-3.60 not present. Exported as #sceKernelIsAccessibleRangeForDriver.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);

SceSysmem

The SceSysmem library is responsible for both low-level and high-level memory management. There are functions for allocating raw blocks of memory (similar to Linux sbrk) as well as functions for maintaining a heap-like structure (similar to malloc) for kernel, however SceLibKernel implements a proper heap and that is used for user code.

sceKernelMapMemBlock

Version NID
0.990-1.69 0x7B763A21
3.60 not present

sceKernelRemapMemBlock

Version NID
0.990-1.69 0x3B29E0F5
3.60 not present

sceKernelPartialMapMemBlock

Version NID
0.990 not present
1.69 0xC0A59868
3.60 not present

sceKernelUnmapMemBlock

Version NID
0.990-1.69 0xEE30D976
3.60 not present
int sceKernelUnmapMemBlock(SceUID uid);

sceKernelPartialUnmapMemBlock

Version NID
0.990 not present
1.69 0xCA99929B
3.60 not present

sceKernelGetMemBlockInfoByRange

Version NID
0.990 not present
0.996-3.60 0x006F3DB4
/**
 * @brief Get memory block informaton by virtual address range

 * @param[in]		vbase	base address
 * @param[in]		vsize   size
 * @param[inout]	pInfo	information structure
 */
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);

sceKernelGetMemBlockInfoByAddr

Version NID
0.990-3.60 0x4010AD65
/**
 * @brief Get memory block information.
 *
 * Get information about a memory block.
 * @param[in]		vbase	Base address
 * @param[inout]	pInfo	Information structure
 */
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);

sceKernelGetSubbudgetInfo

Version NID
0.990 not present
1.69-3.60 0x832B4A65
#define SCE_KERNEL_SUBBUDGET_ID_MAIN (0)
#define SCE_KERNEL_SUBBUDGET_ID_CDLG (1)

typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60
  int size; // Size of this structure
  SceUInt32 totalSize;
  SceUInt32 freeSize;
} SceKernelSubbudgetInfo;

/**
 * Get the subbudget info
 *
 * @param[in]  subbudget - The subbudget ID 
 * @param[out] pInfo     - The subbudget info
 *
 * @return 0 on success, < 0 on error.
 */
int sceKernelGetSubbudgetInfo(SceInt subbudget, SceKernelSubbudgetInfo *pInfo);

sceKernelGetFreeMemorySize

Version NID
1.69-3.60 0x87CC580B
/**
 * Get free memory size
 */
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);

sceKernelOpenMemBlock

Version NID
0.990-3.60 0x8EB8DFBB
// on FW <= 1.691, flags is not used
SceUID sceKernelOpenMemBlock(const char *name, int flags);

sceKernelFindMemBlockByAddr

Version NID
0.990-3.60 0xA33B99D1
/**
 * Find memory block by virtual range (base address and size)
 * If size == 0, API returns a memory block which contains 'start'
 * If size > 0, API returns a memory block just fit range [start, start + size].
 * @param[in]	vaddr		base address
 * @param[in]	size		address size
 * @retval	>=SCE_OK	block id
 * @retval	<SCE_OK		error
 */
SceUID sceKernelFindMemBlockByAddr(void *vaddr, SceSize size);

sceKernelFreeMemBlock

Version NID
0.990-3.60 0xA91E15EE
/**
 * Free memory block.
 *
 * @param[in]	uid		block uid
 * @retval	SCE_OK		Success
 * @retval	<SCE_OK		Error code
 */
int sceKernelFreeMemBlock(SceUID uid);

sceKernelFreeMemBlockForVM

Version NID
3.60 0x4EA13FEA
int sceKernelFreeMemBlockForVM(SceUID uid);

sceKernelCloseMemBlock

Version NID
0.990-3.60 0xB680E3A0
int sceKernelCloseMemBlock(SceUID uid);

sceKernelGetMemBlockBase

Version NID
0.996-3.60 0xB8EF5818
/**
 * @brief Get mapped base address of memory block.
 *
 * Get base address of memory block.
 * @param[in]	uid		block id
 * @param[out]	ppBase		base address of memory block
 * @retval	SCE_OK		success
 * @retval	<SCE_OK		Error
 */
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);

sceKernelAllocMemBlock

Version NID
0.990-3.60 0xB9D5EBDE
/**
 * Reserve a new memory block.
 *
 * The memory types that can be specified for type are as follows.
 * - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
 * - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
 * - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
 * - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
 * - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
 *
 * Allocate a memory block.
 *
 * @param[in]		name		Memory block name
 * @param[in]		vsize		Memory block virtual size
 * @param[in]		flags		Options
 * @retval		id		UID of memory block
 * @retval		<SCE_OK		Error code
 */
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);

sceKernelAllocUnmapMemBlock

Version NID
3.60 0xEC636BCB
int sceKernelAllocUnmapMemBlock(char *name, SceSize size);

sceKernelOpenVMDomain

Version NID
1.69-3.60 0x9CA3EB2B
int sceKernelOpenVMDomain();

sceKernelSyncVMDomain

Version NID
1.69-3.60 0x19D2A81A
int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);

sceKernelCloseVMDomain

Version NID
1.69-3.60 0xD6CA56CA
int sceKernelCloseVMDomain();

sceKernelAllocMemBlockForVM

Version NID
1.69-3.60 0xE2D7E137
SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);

sceKernelCheckModelCapability

Version NID
0.931.010-2.12 not present
2.500.071-3.570.011 0x0144FBD9

Only bits 7 and 10 are supported.

Returns 0x80020005 if bit is not supported.

On success, returns SCE_TRUE if the model has capability, else SCE_FALSE.

int sceKernelCheckModelCapability(int bit);

sceKernelGetModelForCDialog

Version NID
3.60 0xA2CB322F
int sceKernelGetModelForCDialog();

sceKernelGetModel

Version NID
3.60 0xD0D4F729
int sceKernelGetModel();

sceKernelIsPSVitaTV

Version NID
3.60 0x1453A5E5
int sceKernelIsPSVitaTV();

SceDipsw

sceKernelCheckDipsw

Version NID
1.69-3.60 0x1C783FB2

sceKernelClearDipsw

Version NID
1.69-3.60 0x800EDCC1

sceKernelSetDipsw

Version NID
1.69-3.60 0x817053D4

SceDipswForDriver

sceKernelCheckDipswForDriver

Version NID
0.990.000-3.740.011 0xA98FC2FD
int sceKernelCheckDipswForDriver(int no);

sceKernelClearDipswForDriver

Version NID
0.990.000-3.740.011 0xF1F3E9FE
void sceKernelClearDipswForDriver(int no);

sceKernelSetDipswForDriver

Version NID
0.990.000-3.740.011 0x82E45FBF
void sceKernelSetDipswForDriver(int no);

sceKernelGetDipswInfoForDriver

Version NID
1.800.071-3.740.011 0xB2AD48BE

This is a guessed name.

All it does is:

return *(int *)(dipsw_addr + 4 * info_id);

info_id possible values:

  • 0: CP timestamp 1
  • 1: CP Version, CP Board ID
  • 2: CP timestamp 2
  • 3: ASLR Seed

See KBL Param#DIP Switches.

int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);

SceUartForKernel

sceKernelUartChStartForKernel

Version NID
0.931-3.60 0xA9C74212

Temp name was sceKernelUartInitForKernel, sceUartInitForKernel.

It initializes the clock generator registers for the UART channel. See UART Registers. The default baud rate is 115200 for channels 0-5 and 250000 for channel 6.

// channel: 0-6
int sceKernelUartChStartForKernel(SceUInt32 channel);

sceKernelUartReadAvailableForKernel

Version NID
0.990 not present
3.60 0x38DB7629

Temp name was sceUartReadAvailableForKernel.

Returns the number of words available to read from the read FIFO.

int sceKernelUartReadAvailableForKernel(int channel);

sceKernelUartReadForKernel

Version NID
0.931-3.60 0x9BBF1255

Temp name was sceUartReadForKernel.

int sceKernelUartReadForKernel(int channel);

sceKernelUartWriteForKernel

Version NID
0.931-3.60 0x41973874

Temp name was sceUartWriteForKernel.

int sceKernelUartWriteForKernel(int channel, char c);

sceKernelUartPutcharForKernel

Version NID
0.931-0.990 0xAF243C6A
3.60 not present
int sceKernelUartPutcharForKernel(char c);

SceCpu

sceKernelCpuId

Version NID
1.000.071-3.740.011 0x2704CFEE

Returns the CPU ID of the current core.

SceUInt sceKernelCpuId(void);

SceCpuForKernel

sceKernelSendEventForKernel

Version NID
0.990 0x45885327
3.60 not present
void sceKernelSendEventForKernel(void);

sceKernelWaitForEventForKernel

Version NID
0.931 0xD2629465
3.60 not present
void sceKernelWaitForEventForKernel(void);

sceKernelPrintCpuModeForKernel

Version NID
0.931 0xDC99515C
3.60 not present

sceKernelTlsKernelSetForKernel

Version NID
0.940 0x7A180AA4
3.60 not present
// thread_index must be < 8
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);

sceKernelTlsKernelGetForKernel

Version NID
0.940 0x28E080BC
3.60 not present
// thread_index must be < 8
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);

sceKernelRoundupDCacheLineForKernel

Version NID
0.931-0.990 0xED512F50
3.60 not present

Calls the function previously registered by SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel.

int sceKernelRoundupDCacheLineForKernel(int a1);

sceKernelSetRoundupDCacheLineFuncForKernel

Version NID
0.931-0.990 0x66C3AA93
3.60 not present

Uses CTR and CTR-DMINLINE to determine which function to return.

(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);

sceKernelReadUser8ForKernel

Version NID
0.990 0x942B92C3
3.60 not present
int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);

sceKernelReadUser16ForKernel

Version NID
0.990 maybe present
3.60 not present
int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);

sceKernelReadUser32ForKernel

Version NID
0.990 0x6091086F
3.60 not present
int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);

sceKernelWriteUser8ForKernel

Version NID
0.990 0x13B7B151
3.60 not present
int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);

sceKernelWriteUser16ForKernel

Version NID
0.990 maybe present
3.60 not present
int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);

sceKernelWriteUser32ForKernel

Version NID
0.990 0x101894E0
3.60 not present
int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);

sceKernelVMRead8ForKernel

Version NID
0.990 0xA2F0FE9D
3.60 not present
int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);

sceKernelVMRead16ForKernel

Version NID
0.990 0xF31D4D10
3.60 not present
int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);

sceKernelVMRead32ForKernel

Version NID
0.931-0.990 0x316574B1
3.60 not present
int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);

sceKernelVMWrite8ForKernel

Version NID
0.931 0xA3C65664
3.60 not present
int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);

sceKernelVMWrite16ForKernel

Version NID
0.931 0xBF38A460
3.60 not present
int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);

sceKernelVMWrite32ForKernel

Version NID
0.931 0x04D129B2
3.60 not present
int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);

sceKernelMMUIsValidMapForKernel

Version NID
0.931 0x4891F923
3.60 not present
int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);

sceKernelMMUIsValidUnmapForKernel

Version NID
0.931 0x60EA8433
3.60 not present
int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);

sceKernelMMUL1GetInfoForKernel

Version NID
0.931-0.990 0x9D346F87
3.60 not present

Parses a L1PT for information about a specific entry. Pass the address of the L1PT in l1pt. Used by sceKernelAddressSpaceGetMMUL1InfoForKernel.

SceInt32 sceKernelMMUL1GetInfoForKernel(void* l1pt, const void *addr, SceKernelMMUL1Info *pInfo);

sceKernelMMUL2GetInfoForKernel

Version NID
0.931-0.990 0x247629A7
3.60 not present
int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);

sceKernelMMUMapSectionsForKernel

Version NID
0.931-0.990 0x868B471A
3.60 not present
3.65 Present, but not exported
SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);

sceKernelMMUMapSupersectionsForKernel

Version NID
0.931-0.990 0x0D9DA15F
3.60 not present
3.65 Present, but not exported
SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);

sceKernelMMUMapSmallPagesForKernel

Version NID
0.931-0.990 0xB953E022
3.60 not present
3.65 Present, but not exported
int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);

sceKernelMMUMapSmallPageForKernel

Version NID
0.931-0.990 0xCC7C16F8
3.60 not present
int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);

sceKernelMMUMapLargePagesForKernel

Version NID
0.931-0.990 0x78D32D38
3.60 not present
3.65 Present, but not exported
int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);

sceKernelMMUUnmapSectionsWithFlagsForKernel

Version NID
0.931-0.990 0xFC657FD1
3.60 not present
int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);

sceKernelMMUUnmapSupersectionsWithFlagsForKernel

Version NID
0.931-0.990 0x0E4D29C6
3.60 not present
int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);

sceKernelMMUUnmapSmallPagesWithFlagsForKernel

Version NID
0.931-0.990 0x11EBA8CE
3.60 not present
int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);

sceKernelMMUUnmapLargePagesWithFlagsForKernel

Version NID
0.931-0.990 0x44319918
3.60 not present
int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);

sceKernelMMUL1VAtoPABySWForKernel

Version NID
0.990 0x8E4ECF17
3.60 not present
int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);

sceKernelMMUSetL2PageTableForKernel

Version NID
0.990 0xAECA0820
3.60 not present
int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);

sceKernelMMUUnsetL2PageTableForKernel

Version NID
0.990 0xCB519DF3
3.60 not present
int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);

SceCpuForKernel_CA4124DE

Version NID
0.990 0xCA4124DE
3.60 not present

Returns 1, 2 or 6 based on some page/section properties.

int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);

sceKernelMMUGetContextForKernel

Version NID
0.931 0x211B89DA
1.03-3.60 not present

Temp name was sceKernelCpuSaveContextForKernel.

int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);

sceKernelMMUChangeContextForKernel

Version NID
0.931 0x0A4F0FB9
1.03-3.60 not present

Temp name was sceKernelCpuRestoreContextForKernel.

int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);

sceKernelMMUVAtoPAWithModeForKernel

Version NID
0.931-3.60 0x67343A07

Temp name was sceKernelCpuGetPaddrWithMaskForKernel.

mode (maskPAR) is usually 0x33, sometimes 2.

int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);

sceKernelMMUCheckRangeWithModeForKernel

Version NID
0.931 0xCCDA3B8C
3.60 not present

Return 0 if all pages are valid, < 0 else.

int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);

sceKernelMMUVAtoPAForKernel

Version NID
0.931-3.60 0x2A46E800

Temp name was sceKernelCpuGetPaddrForKernel.

Uses mode (maskPAR) 0x33.

This will write the physical address for a virtual address pVA to memory pointed to by pPA.

Returns <0 on error, values >=0 indicate success.

int sceKernelMMUVAtoPAForKernel(void *pVA, void **pPA);

sceKernelCpuGetCONTEXTIDRForKernel

Version NID
3.60 0x5B6B3274
  return (SceUInt8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)
SceUInt8 sceKernelCpuGetCONTEXTIDRForKernel(void);

sceKernelCpuUpdateSCTLRForKernel

Version NID
3.60 0x04008CF7
  int result;
  result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)
  __mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)
  return result;
void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)

sceKernelCpuBranchPredictorInvalidateAllISForKernel

Version NID
3.60 0x1BB2BB8D
void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)

sceKernelCpuBranchPredictorInvalidateAllForKernel

Version NID
3.60 0x4C4C7D6B
void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all

sceKernelDcacheCleanInvalidateAllForKernel

Version NID
0.931.010 0x85A27F98

Flushes PLE then cleans and invalidates L1 Dcache and L2 cache in this order.

void sceKernelDcacheCleanInvalidateAllForKernel(void);

sceKernelL1DcacheInvalidateForKernel

Version NID
3.60 0x470EAE1E

Temp name was sceKernelCpuDcacheInvalidateMVACForKernel.

void sceKernelL1DcacheInvalidateForKernel(void* addr); // DCIMVAC, Data cache invalidate by MVA (PoC)

sceKernelL1DcacheInvalidateRangeForKernel

Version NID
3.60 0x583F30D1

This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateMVACRangeForKernel.

void sceKernelL1DcacheInvalidateRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)

sceKernelL1DcacheCleanInvalidateRangeForKernel

Version NID
0.931-3.60 0x6BA2E51C

This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel, sceKernelDcacheWritebackInvalidateRangeForKernel.

// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)
void sceKernelL1DcacheCleanInvalidateRangeForKernel(const void *addr, unsigned int size);

sceKernelL1DcacheInvalidateAllForKernel

Version NID
3.60 0x2F3BF020

This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateSWForKernel.

void sceKernelL1DcacheInvalidateAllForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)

sceKernelL1DcacheCleanAllForKernel

Version NID
3.60 0x73A30DB2

This is a guessed name. Temp name was sceKernelCpuDcacheCleanSWForKernel.

void sceKernelL1DcacheCleanAllForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)

sceKernelL1DcacheCleanInvalidateAllForKernel

Version NID
0.931-3.60 0x76DAB4D0

Guessed name was sceKernelCpuDcacheCleanInvalidateSWForKernel.

void sceKernelL1DcacheCleanInvalidateAllForKernel(void);

sceKernelL1DcacheCleanForKernel

Version NID
3.60 0xF7159B55

Temp name was sceKernelCpuDcacheCleanMVACForKernel.

void sceKernelL1DcacheCleanForKernel(void* addr); // DCCMVAC, Data cache clean by MVA (PoC)

sceKernelL1DcacheCleanRangeForKernel

Version NID
0.931-3.60 0xC5C1EE4E

Guessed name was sceKernelCpuDcacheCleanMVACRangeForKernel.

void sceKernelL1DcacheCleanRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)

sceKernelL1DcacheCleanInvalidateForKernel

Version NID
3.60 0xC8E8C9E9

This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACForKernel.

void sceKernelL1DcacheCleanInvalidateForKernel(void *start); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)

sceKernelL1IcacheInvalidateEntireAllCoreForKernel

Version NID
0.931-3.60 0x264DA250
3.65 0x803C84BF

Guessed name was sceKernelCpuIcacheInvalidateAllUISForKernel.

Invalidates the L1 Icache for all cores.

void sceKernelL1IcacheInvalidateEntireAllCoreForKernel(void);

sceKernelL1IcacheInvalidateEntireForKernel

Version NID
3.60 0xAEE0B489

This is a guessed name. Temp name was sceKernelCpuIcacheInvalidateAllUForKernel.

Invalidates the entire L1 Icache of this core.

void sceKernelL1IcacheInvalidateEntireForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)

sceKernelL1IcacheInvalidateRangeForKernel

Version NID
0.931-3.60 0xF4C7F578

Temp name was sceKernelCpuIcacheInvalidateRangeForKernel, sceKernelCpuIcacheInvalidateMVAURange.

Invalidates a range in L1 Icache of this core.

// ICIMVAU, Instruction cache invalidate by MVA (PoU)
void sceKernelL1IcacheInvalidateRangeForKernel(void *start, SceSize size);

sceKernelIcacheInvalidateRangeForKernel

Version NID
0.931-3.60 0x19F17BD0
3.65-3.68 0x73E895EA

Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.

Cleans and invalidates range in L2 cache, then in L1 Icache of core.

int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);

sceKernelPleFlushRequestForKernel

Version NID
3.60 0xD0D85FF8

Temp name was sceKernelCpuPreloadEngineKillForKernel.

  • NSACR (Non-Secure Access Control Register)
  • Test bit NS access to the Preload Engine resources
  • [>] PLEFF (Preload Engine FIFO flush operation)
  • [>] PLEKC (Preload Engine kill channel operation)
  • [<] PLEASR (Preload Engine Activity Status Register)
void sceKernelPleFlushRequestForKernel(void);

sceKernelDomainTextMemcpyForKernel

Version NID
0.931-3.60 0x8C683DEC
3.63-3.65 not present. Removed from library.

Temp name was sceKernelCpuUnrestrictedMemcpyForKernel.

Unrestricted memcpy by first setting the DACR register to 0xFFFF0000 then doing a memcpy.

In FW 0.931, DACR is set to 0xFFFFFFFF instead and interrupts are disabled for the operation.

int sceKernelDomainTextMemcpyForKernel(void *dest, const void *src, SceSize len);

sceKernelMMUGetMemoryTypeForKernel

Version NID
3.60 0x9B8173F4

Return value can be:

  • 2
  • 8
  • 0x40
  • 0x80
  • 0xD0
  • 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)
int sceKernelMMUGetMemoryTypeForKernel(void *vaddr);

sceKernelCorelockUnlockForKernel

Version NID
3.60 0xA5C9DBBA

This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.

typedef struct SceKernelCorelockContext {
	int lock;
	int16_t core_count;
	int16_t last_wait_core;
} SceKernelCorelockContext;

void sceKernelCorelockUnlockForKernel(SceKernelCorelockContext *pCtx);

sceKernelCorelockLockForKernel

Version NID
0.931-3.60 0x9D72DD1B

This is a guessed name.

void sceKernelCorelockLockForKernel(SceKernelCorelockContext *pCtx, int core);

sceKernelCorelockInitializeForKernel

Version NID
0.931-3.60 0x4CD4D921
3.65 0xA65F6F14

This is a guessed name.

void sceKernelCorelockInitializeForKernel(SceKernelCorelockContext *pCtx);

SceCpuForKernel_43CC6E20

Version NID
3.60 0x43CC6E20

DACR off

Does some memory copies between the args.

int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);

sceKernelDomainTextBzeroIntForKernel

Version NID
3.60 0x76EB0DD4

This is a guessed name.

Temp name was sceCpuUnrestrictedBzeroIntForKernel.

DACR off

int sceKernelDomainTextBzeroIntForKernel(int *addr);

SceCpuForKernel_337473B5

Version NID
0.931-3.60 0x337473B5

DACR off

If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.

int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);

sceKernelAtomicSubIfGreater64ForKernel

Version NID
3.60 0x37FBFD12

DACR is not disabled

int sceKernelAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);

sceKernelAtomicLimit64ForKernel

Version NID
3.60 0x6190A018

DACR is not disabled

int sceKernelAtomicLimit64ForKernel(unsigned long long *result, int limit);

sceKernelAtomicAdd32AndGet64InRangeForKernel

Version NID
3.60 0xD8A7216C

DACR is not disabled

int sceKernelAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);

sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel

Version NID
3.60 0xD37AABE5

DACR is not disabled

int sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);

sceKernelAtomicGet32AndSet64ForKernel

Version NID
0.990 not present
3.60 0x4553FBDE

DACR is not disabled

int sceKernelAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);

sceKernelAtomicGet32AndSet64_2ForKernel

Version NID
0.990 not present
3.60 0x7FB4E7AC

Exact same code as SceCpuForKernel_4553FBDE.

DACR is not disabled

int sceKernelAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);

sceKernelAtomicDecIfLowPositive32ForKernel

Version NID
3.60 0x8510FA52

DACR is not disabled

int sceKernelAtomicDecIfLowPositive32ForKernel(unsigned int *addr);

sceKernelAtomicIncrementHighwaterCounterForKernel

Version NID
0.931.010-2.060.011 not present
2.100.081-3.610.011 0x5F64E5ED
3.630.011-3.740.011 0x9DA58A9E

This is a guessed name. Temp name was sceKernelCpuAtomicHiLoAlgorithmForKernel.

Atomically increments a highwater counter.

Highwater counters are 32-bit values holding a current count in the low 16 bits, and a highwater count in the high 16 bits.

This routine increments the current count, and the highwater count if the new current value is higher than highwater.

DACR is not disabled.

Returns the value of the counter after the increment.

SceUInt32 sceKernelAtomicIncrementHighwaterCounterForKernel(SceUInt32 *pCounter);

sceKernelAtomicAddAndGetPositive32InRangeForKernel

Version NID
3.100.081-3.610.011 0x98E91C1C
3.630.011-3.740.011 0x8F40D0FD

This is a guessed name.

DACR is not disabled

If val is negative, returns 2 and does not override val.

int sceKernelAtomicAddAndGetPositive32InRangeForKernel(int* val, int add_val, int limit);

SceCpuForKernel_6C7E7B57

Version NID
0.931-3.60 0x6C7E7B57

Set TTBR lower value (0x4A).

int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);

SceCpuForKernel_AED8F8D7

Version NID
0.931 0xAED8F8D7
3.60 not present

Initialize TTBR.

int SceCpuForKernel_AED8F8D7(const void *ttbr);

sceKernelGetVmaccessRangeForKernel

Version NID
0.931.010-3.610.011 0x9A3281C0
3.630.011-3.740.011 0xC32687D0

Returns the start and end address of the Virtual Memory access range. Functions such as sceKernelCopyFromUserForDriver (i.e. kernel<->usermode transfer routines) are located in this range. All functions in the Virtual Memory access range run in ARM mode not in Thumb mode.

See the SceExcpmgr page for more information about how the values returned by this function are used.

Note that the Virtual Memory access range excludes the endpoint. *pRangeEnd is not considered part of the range however *pRangeStart is.

// 0.931.010
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);

// 0.940-0.990
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pOldModelRangeStart, SceUIntPtr *pOldModelRangeEnd, SceUIntPtr *pNewModelRangeStart, SceUIntPtr *pNewModelRangeEnd)

// 3.600.011-3.740.011
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);

SceCpuForKernel_9CB82EB0

Version NID
3.60 0x9CB82EB0
return;
int SceCpuForKernel_9CB82EB0(void);

SceCpuForDriver

SceCpuForDriver_9A9D9C94

Version NID
0.990.000-0.996.090 0x9A9D9C94
1.03-3.740.011 not present

SceCpuForDriver_A2E3E4EB

Version NID
0.990.000-0.996.090 0xA2E3E4EB
1.03-3.740.011 not present

sceKernelRoundupDCacheLine3ForDriver

Version NID
0.931.010-1.060.031 0xF0849812
1.50-3.740.011 not present
int sceKernelRoundupDCacheLine3ForDriver(int a1);

sceKernelAbortForDriver

Version NID
0.931.010-1.060.031 0x6DCA6903
1.50-3.740.011 not present
void sceKernelAbortForDriver(void);

sceKernelCpuIdForDriver

Version NID
0.990-3.60 0x5E4D5DE1

Returns the CPU ID of the current core.

int sceKernelCpuIdForDriver(void);

sceKernelAtomicAddAndGet8ForDriver

Version NID
3.60 0x1E850481
unsigned char sceKernelAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);

sceKernelAtomicAddAndGet16ForDriver

Version NID
3.60 0x59F74E94
unsigned short sceKernelAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicAddAndGet32ForDriver

Version NID
0.990-3.60 0x5F6A8743

Adds val to *addr atomically, and returns the result.

unsigned int sceKernelAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicAddAndGet64ForDriver

Version NID
3.60 0x4E459A03
unsigned long long sceKernelAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicAddUnless8ForDriver

Version NID
3.60 0x5CC62CEC
int sceKernelAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);

sceKernelAtomicAddUnless16ForDriver

Version NID
3.60 0x0F84AFE9
int sceKernelAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);

sceKernelAtomicAddUnless32ForDriver

Version NID
3.60 0x1F157DC3
int sceKernelAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);

sceKernelAtomicAddUnless64ForDriver

Version NID
3.60 0x06CCFA4B
int sceKernelAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);

sceKernelAtomicAndAndGet8ForDriver

Version NID
3.60 0x32B62B1A
unsigned char sceKernelAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicAndAndGet16ForDriver

Version NID
3.60 0xB281D52A
unsigned short sceKernelAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicAndAndGet32ForDriver

Version NID
3.60 0xDF899E4B
unsigned int sceKernelAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicAndAndGet64ForDriver

Version NID
3.60 0xD18E7B54
unsigned long long sceKernelAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicClearAndGet8ForDriver

Version NID
3.60 0x8E538AB5
unsigned char sceKernelAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicClearAndGet16ForDriver

Version NID
3.60 0x6B050D7C
unsigned short sceKernelAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicClearAndGet32ForDriver

Version NID
3.60 0x78C1F148
unsigned int sceKernelAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicClearAndGet64ForDriver

Version NID
3.60 0x2149CD4C
unsigned long long sceKernelAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicClearMask8ForDriver

Version NID
3.60 0x1B3336B0
void sceKernelAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicClearMask16ForDriver

Version NID
3.60 0x1BE58599
void sceKernelAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicClearMask32ForDriver

Version NID
3.60 0x4AE1BCC0
void sceKernelAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicClearMask64ForDriver

Version NID
3.60 0x55760309
void sceKernelAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicCompareAndSet8ForDriver

Version NID
3.60 0x3627F4E0
unsigned char sceKernelAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);

sceKernelAtomicCompareAndSet16ForDriver

Version NID
3.60 0x6F63F56D
unsigned short sceKernelAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);

sceKernelAtomicCompareAndSet32ForDriver

Version NID
3.60 0xCDA96E81
unsigned int sceKernelAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);

sceKernelAtomicCompareAndSet64ForDriver

Version NID
3.60 0x4B527009
unsigned long long sceKernelAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);

sceKernelAtomicDecIfPositive8ForDriver

Version NID
3.60 0x45153D4E
unsigned char sceKernelAtomicDecIfPositive8ForDriver(unsigned char *addr);

sceKernelAtomicDecIfPositive16ForDriver

Version NID
3.60 0x9A693F5B
unsigned short sceKernelAtomicDecIfPositive16ForDriver(unsigned short *addr);

sceKernelAtomicDecIfPositive32ForDriver

Version NID
3.60 0x2A71B03C

This is a guessed name. Official name might be sceKernelAddressSpaceReleaseForDriver.

unsigned int sceKernelAtomicDecIfPositive32ForDriver(unsigned int* addr);

sceKernelAtomicDecIfPositive64ForDriver

Version NID
3.60 0x267D0B33
unsigned long long sceKernelAtomicDecIfPositive64ForDriver(unsigned long long *addr);

sceKernelAtomicGetAndAdd8ForDriver

Version NID
3.60 0xFCDCD4DE
unsigned char sceKernelAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicGetAndAdd16ForDriver

Version NID
3.60 0x225DF91A
unsigned short sceKernelAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicGetAndAdd32ForDriver

Version NID
3.60 0x341B6E81
unsigned int sceKernelAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicGetAndAdd64ForDriver

Version NID
3.60 0x043FD446
unsigned long long sceKernelAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicGetAndAnd8ForDriver

Version NID
3.60 0xD8E675C0
unsigned char sceKernelAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);

sceKernelAtomicGetAndAnd16ForDriver

Version NID
3.60 0x4A820BC5
unsigned short sceKernelAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicGetAndAnd32ForDriver

Version NID
3.60 0x10EB35EB
unsigned int sceKernelAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicGetAndAnd64ForDriver

Version NID
3.60 0x18A17E07
unsigned long long sceKernelAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicGetAndClear8ForDriver

Version NID
3.60 0x382D1466
unsigned char sceKernelAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicGetAndClear16ForDriver

Version NID
3.60 0x8E9C086D
unsigned short sceKernelAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicGetAndClear32ForDriver

Version NID
3.60 0xE36F3A46
unsigned int sceKernelAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicGetAndClear64ForDriver

Version NID
3.60 0x88BA6002
unsigned long long sceKernelAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicGetAndOr8ForDriver

Version NID
3.60 0xBDF6F8E4
unsigned char sceKernelAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);

sceKernelAtomicGetAndOr16ForDriver

Version NID
3.60 0x004F09D1
unsigned short sceKernelAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicGetAndOr32ForDriver

Version NID
3.60 0x2A40BB93
unsigned int sceKernelAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicGetAndOr64ForDriver

Version NID
3.60 0xCB73D6D5
unsigned long long sceKernelAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicGetAndSet8ForDriver

Version NID
3.60 0x29599FC8
unsigned char sceKernelAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicGetAndSet16ForDriver

Version NID
3.60 0x085532C8
unsigned short sceKernelAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicGetAndSet32ForDriver

Version NID
3.60 0x0EE04C03
unsigned int sceKernelAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicGetAndSet64ForDriver

Version NID
3.60 0xD2DEE625
unsigned long long sceKernelAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);

sceKernelAtomicGetAndSub8ForDriver

Version NID
3.60 0x7B43D0D7
unsigned char sceKernelAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);

sceKernelAtomicGetAndSub16ForDriver

Version NID
3.60 0x3EE9B5B8
unsigned short sceKernelAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicGetAndSub32ForDriver

Version NID
3.60 0xF891CF2A
unsigned int sceKernelAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicGetAndSub64ForDriver

Version NID
3.60 0xA7585370
unsigned long long sceKernelAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicGetAndXor8ForDriver

Version NID
3.60 0xBAF47F7B
unsigned char sceKernelAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicGetAndXor16ForDriver

Version NID
3.60 0x711801E6
unsigned short sceKernelAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicGetAndXor32ForDriver

Version NID
3.60 0x77E34309
unsigned int sceKernelAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicGetAndXor64ForDriver

Version NID
3.60 0xE212ECAD
unsigned long long sceKernelAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicOrAndGet8ForDriver

Version NID
3.60 0x5D515F1B
unsigned char sceKernelAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicOrAndGet16ForDriver

Version NID
3.60 0xADD39B84
unsigned short sceKernelAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);

sceKernelAtomicOrAndGet32ForDriver

Version NID
3.60 0xBC248C30
unsigned int sceKernelAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);

sceKernelAtomicOrAndGet64ForDriver

Version NID
3.60 0x3E218AF7
unsigned long long sceKernelAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);

sceKernelAtomicSet8ForDriver

Version NID
3.60 0x0836537E
void sceKernelAtomicSet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicSet16ForDriver

Version NID
3.60 0x532CA3E8
void sceKernelAtomicSet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicSet32ForDriver

Version NID
3.60 0x3168BC57
void sceKernelAtomicSet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicSet64ForDriver

Version NID
3.60 0xC381CE8C
void sceKernelAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicSetIfGreaterGet8ForDriver

Version NID
3.60 0xC3868071
unsigned char sceKernelAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicSetIfGreaterGet16ForDriver

Version NID
3.60 0x875B094D
unsigned short sceKernelAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicSetIfGreaterGet32ForDriver

Version NID
3.60 0x26F71995
unsigned int sceKernelAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);

sceKernelAtomicSubAndGet8ForDriver

Version NID
3.60 0xEB085370
unsigned char sceKernelAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelAtomicSubAndGet16ForDriver

Version NID
3.60 0x515682C9
unsigned short sceKernelAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelAtomicSubAndGet32ForDriver

Version NID
3.60 0xA4884C4E
unsigned int sceKernelAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicSubAndGet64ForDriver

Version NID
3.60 0xB5F8919C
unsigned long long sceKernelAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelAtomicXorAndGet8ForDriver

Version NID
3.60 0x03887992
unsigned char sceKernelAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);

sceKernelAtomicXorAndGet16ForDriver

Version NID
3.60 0x646003D6
unsigned short sceKernelAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);

sceKernelAtomicXorAndGet32ForDriver

Version NID
3.60 0x4244BE65
unsigned int sceKernelAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelAtomicXorAndGet64ForDriver

Version NID
3.60 0x692C51B3
unsigned long long sceKernelAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelDcacheInvalidateRangeForDriver

Version NID
0.931-3.60 0x02796361

Temp name was sceKernelDcacheInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.

int sceKernelDcacheInvalidateRangeForDriver(const void *start, SceSize size);

sceKernelDcacheInvalidateRangeForL2WBWAForDriver

Version NID
0.990 0x614C6698
3.60 not present

Temp name was sceKernelDcacheInvalidateRange_0x10ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.

int sceKernelDcacheInvalidateRangeForL2WBWAForDriver(const void *start, SceSize size);

sceKernelDcacheInvalidateRangeForL1WBWAForDriver

Version NID
0.990-3.60 0x8B4C26DF

Temp name was sceKernelDcacheInvalidateRange_0x20ForDriver, sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.

int sceKernelDcacheInvalidateRangeForL1WBWAForDriver(const void *start, SceSize size);

sceKernelDcacheCleanInvalidateRangeForDriver

Version NID
0.931-3.60 0x364E68A4

Temp name was sceKernelDcacheCleanInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver, sceKernelDcacheCleanInvalidateRange_0x10ForDriver.

Also have another name "sceKernelDcacheCleanInvalidateRangeForL2WBWAForDriver" in 0.990.

int sceKernelDcacheCleanInvalidateRangeForDriver(const void *start, SceSize size);

sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver

Version NID
0.990-3.60 0xE551F99B

Temp name was sceKernelDcacheCleanInvalidateRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.

int sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver(const void *start, SceSize);

sceKernelDcacheCleanRangeForDriver

Version NID
0.931.010-3.740.011 0x103872A5

Temp name was sceKernelDcacheCleanRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.

int sceKernelDcacheCleanRangeForDriver(const void *start, SceSize size);

sceKernelDcacheCleanRangeForL2WBWAForDriver

Version NID
0.990.000-3.350.011 0x2A5344B7
3.500.011-3.740.011 not present

Temp name was sceKernelDcacheCleanRange_0x10ForDriver.

int sceKernelDcacheCleanRangeForL2WBWAForDriver(const void *start, SceSize size);

sceKernelDcacheCleanRangeForL1WBWAForDriver

Version NID
0.990.000-3.740.011 0x9CB9F0CE

Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelDcacheCleanRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.

int sceKernelDcacheCleanRangeForL1WBWAForDriver(const void *start, SceSize size);

SceCpuForDriver_E813EBB2

Version NID
0.990.000-3.740.011 0xE813EBB2

Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.

#define SceL2CacheReg 0x1A002000
__dsb();
*(int *)(SceL2CacheReg + 0x730) = 0;
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )
    ;
__dmb();
int SceCpuForDriver_E813EBB2(void);

sceKernelIsUncacheAddressInTmpFsGameForDriver

Version NID
3.60 0x337CBDF3

Temp name was sceKernelCpuIsVaddrMappedForDriver.

  uint32_t vaddr_memory_type = sceKernelMMUGetMemoryTypeForKernel(vaddr);
  if (vaddr_memory_type != 8) {
    if (vaddr_memory_type <= 8) {
      if (vaddr_memory_type != 2)
        return 0;
    } else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)
      return 0;
  }
  return 1;
SceBool sceKernelIsUncacheAddressInTmpFsGameForDriver(void *address);

sceKernelCpuSuspendIntrForDriver

Version NID
1.60-3.60 0x821FC0EE

Temp name was sceKernelCpuDisableInterruptsForDriver.

Disables IRQ (FIQ are not disabled, but they're routed to Secure state anyways...) and returns previous interrupt bit status (either 0 or 0x80).

//Return CPSR.I and disable IRQ.
SceKernelIntrStatus sceKernelCpuSuspendIntrForDriver(void);

sceKernelCpuResumeIntrForDriver

Version NID
1.60-3.60 0xF5BAD43B

Temp name was sceKernelCpuEnableInterruptsForDriver.

Restore previous IRQ state. Pass the return value of the previous call to sceKernelCpuSuspendIntrForDriver.

//Enable IRQ if prev_state & 0x80.
SceKernelIntrStatus sceKernelCpuResumeIntrForDriver(SceKernelIntrStatus prev_state);

Spinlock functions

The following functions implement a simple mutal exclusion mechanism using atomic operation (LDREX/STREX). Spinlocks are owned by a single thread or CPU at a time. Unlike other lock/sync objects of the kernel, spinlocks can be used under any context. Use spinlocks if the data to protect may be accessed from an IRQ or exception handler.

There are two version of the Spinlock functions: normal functions do not change the CPU state, while the SuspendIntr functions ensure the CPU cannot be interrupted while the lock is held.

The same type of function must be used to lock and unlock a spinlock: for example, calling sceKernelSpinlockLowLockCpuResumeIntr followed by sceKernelSpinlockLowUnlock is an invalid usage of this API.

Spinlocks can take two values: 0 means the spinlock is unlocked, and 1 means the spinlock is locked.

//Unofficial names
typedef int SceKernelSpinlock;
typedef int SceKernelRWSpinlock;
typedef int SceKernelIntrStatus;

//Sample usage:
void function(Object* object) {
    sceKernelSpinlockLowLock(&object->lock);
    /* ... work on object  ... */
    sceKernelSpinlockUnlock(&object->lock);
}

void trylock_function(Object* object) {
    int res = sceKernelSpinlockLowTrylock(&object->lock);
    if (res >= 0) {
        /* ... work on object ... */
    }
}

void uninterruptible_function(Object* object) {
    SceKernelIntrStatus status = sceKernelSpinlockLowLockCpuSuspendIntr(&object->lock);
    /* ... work on object  ... */
    /* interrupts are disabled here */
    sceKernelSpinlockUnlock(&object->lock, status);
}

void uninterruptible_trylock_function(Object* object) {
    SceKernelIntrStatus status = sceKernelSpinlockLowTrylockCpuSuspendIntr(&object->lock);
    if (status >= 0) {
        /* ... work on object ... */
        /* interrupts are disabled here */
        sceKernelSpinlockLowUnlockCpuResumeIntr(&object->lock, status);
    }
}

sceKernelSpinlockLowLockForDriver

Version NID
1.60-3.60 0xBF82DEB2

Temp name was sceKernelCpuLockStoreLRForDriver.

Acquires a spinlock.

void sceKernelSpinlockLowLockForDriver(SceKernelSpinlock *pLock);

sceKernelSpinlockLowTrylockForDriver

Version NID
0.990.000-3.740.011 0x5AC9D394

This is a guessed name. Temp name was sceKernelCpuTryLockStoreLRForDriver, sceKernelSpinlockLowTryLockForDriver.

Attempts to acquire a spinlock.

/**
 * @param pLock Pointer to the spinlock
 * @retval SCE_OK if the spinlock is acquired
 * @retval <0 if the spinlock could not be acquired
 */
int sceKernelSpinlockLowTrylockForDriver(SceKernelSpinlock *pLock);

sceKernelSpinlockLowUnlockForDriver

Version NID
1.60-3.60 0xD6ED0C46

Temp name was sceKernelCpuUnlockStoreLRForDriver.

Unlocks a spinlock previously acquired with either sceKernelSpinlockLowLockForDriver or sceKernelSpinlockLowTrylockForDriver.

void sceKernelSpinlockLowUnlockForDriver(SceKernelSpinlock *pLock);

sceKernelSpinlockLowLockCpuSuspendIntrForDriver

Version NID
0.990-3.60 0xD32ACE9E

Temp name was sceKernelCpuSuspendIntrForDriver, sceKernelCpuLockSuspendIntrStoreLRForDriver.

Acquires a spinlock and suspend interrupts if necessary.

/**
 * @param pLock Pointer to the spinlock
 * @return An opaque value describing the interrupt state
 */
SceKernelIntrStatus sceKernelSpinlockLowLockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);

sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver

Version NID
3.60 0x27C0B340

Temp name was sceKernelCpuTryLockSuspendIntrStoreLRForDriver.

Attempts to acquire a spinlock. If successfully acquired, suspends interrupts if necessary.

/**
 * @param pLock Pointer to the spinlock
 * @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
 * @retval <0 if the spinlock could not be acquired
 */
SceKernelIntrStatus sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);

sceKernelSpinlockLowUnlockCpuResumeIntrForDriver

Version NID
0.990-3.60 0x7BB9D5DF

Temp name was sceKernelCpuUnlockResumeIntrStoreLRForDriver, sceKernelCpuResumeIntrForDriver.

Unlocks a spinlock previously acquired with either sceKernelSpinlockLowLockCpuSuspendIntrForDriver or sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver and resumes interrupts if necessary.

If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.

void sceKernelSpinlockLowUnlockCpuResumeIntrForDriver(SceKernelSpinlock *pLock, SceKernelIntrStatus prev_state);

RW Spinlock functions

The following functions implement RW spinlocks. This variant of the spinlock allows multiple threads/CPUs to access data at the same time as long as only reads are performed. When acquired for writing, a single thread at a time can access the data and is thus free to modify it. Like regular spinlocks, the RW spinlocks can be used under any context. Use RW spinlocks if the data to protect may be accessed from an IRQ or exception handler.

Like for regular spinlocks, all RWSpinlock functions are available in a normal and SuspendIntr version. Additionally, every function exists in Read and Write variants, depending on whether the caller wants to read or write to the object protected by the lock.

Like for regular spinlocks, the same type of function must be used to lock and unlock a RW spinlock. Calling sceKernelRWSpinlockLowReadLock followed by sceKernelRWSpinlockLowWriteUnlock is an invalid usage of this API. Calling sceKernelRWSpinlockLowReadLockCpuSuspendIntr followed by sceKernelRWSpinlockLowReadUnlockCpu is also an invalid usage of this API.

RW Spinlocks can take three kind of values: 0 means the spinlock is unlocked, -0x80000000 means the spinlock is write-locked, and a positive value x means that x readers have read-locked the spinlock.

sceKernelRWSpinlockLowReadLockForDriver

Version NID
3.60 0xCAC9AE80

This is a guessed name. Temp name was sceKernelCpuSpinLockStoreLRForDriver.

Acquires a RW spinlock for reading data. Modifying the data protected by the spinlock is not allowed.

void sceKernelRWSpinlockLowReadLockForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowTryReadLockForDriver

Version NID
3.60 0x093925BD

This is a guessed name. Temp name was sceKernelCpuTrySpinLockStoreLRForDriver.

Attempts to acquire a RW spinlock for reading data.

Even if the spinlock is acquired, modifying the data protected by the spinlock is not allowed.

/**
 * @param pLock Pointer to the spinlock
 * @retval SCE_OK if the spinlock is acquired
 * @retval <0 if the spinlock could not be acquired
 */
int sceKernelRWSpinlockLowTryReadLockForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowReadUnlockForDriver

Version NID
3.60 0xF5FD5676

Temp name was sceKernelCpuSpinUnlockStoreLRForDriver.

Unlocks a RW spinlock previously acquired with either sceKernelRWSpinlockLowReadLockForDriver or sceKernelRWSpinlockLowTryReadLockForDriver.

void sceKernelRWSpinlockLowReadUnlockForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowWriteLockForDriver

Version NID
3.60 0x3F42B434

This is a guessed name. Temp name was sceKernelCpuLockStoreFlagForDriver.

Acquires a RW spinlock for writing data.

void sceKernelRWSpinlockLowWriteLockForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowTryWriteLockForDriver

Version NID
3.60 0x4F7790B4

This is a guessed name. Temp name was sceKernelCpuTryLockStoreFlagForDriver.

Attempts to acquire a RW spinlock for writing data.

/**
 * @param pLock Pointer to the spinlock
 * @retval SCE_OK if the spinlock is acquired
 * @retval <0 if the spinlock could not be acquired
 */
int sceKernelRWSpinlockLowTryWriteLockForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowWriteUnlockForDriver

Version NID
3.60 0xCB8ABDF0

Temp name was sceKernelCpuUnlockStoreFlagForDriver.

Unlocks a RW spinlock previously acquired with either sceKernelRWSpinlockLowWriteLockForDriver or sceKernelRWSpinlockLowTryWriteLockForDriver.

void sceKernelRWSpinlockLowWriteUnlockForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowReadLockCpuSuspendIntr

Version NID
0.990.000-3.740.011 0xEC53D007

This is a guessed name. Temp name was sceKernelCpuSpinLockSuspendIntrStoreLRForDriver, sceKernelCpuSpinLockIrqSaveForDriver.

Acquires a RW spinlock for reading data and suspends interrupts if necessary.

/**
 * @param pLock Pointer to the spinlock
 * @return An opaque value describing the interrupt state
 */
SceKernelIntrStatus sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver

Version NID
3.60 0xF02467D1

This is a guessed name. Temp name was sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver.

Attempts to acquire a RW spinlock for reading data. If successfully acquired, suspends interrupts if necessary.

/**
 * @param pLock Pointer to the spinlock
 * @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
 * @retval <0 if the spinlock could not be acquired
 */
SceKernelIntrStatus sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver

Version NID
0.990.000-3.740.011 0x740A0750

Temp name was sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver, sceKernelCpuSpinLockIrqRestoreForDriver.

Unlocks a RW spinlock previously acquired with either sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver or sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver, and resumes interrupts if necessary.

If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.

void sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);

sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver

Version NID
0.990-3.60 0x4C38CE4D

This is a guessed name. Temp name was sceKernelCpuLockSuspendIntrStoreFlagForDriver.

Acquires a RW spinlock for writing data and suspends interrupts if necessary.

/**
 * @param pLock Pointer to the spinlock
 * @return An opaque value describing the interrupt state
 */
SceKernelIntrStatus sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver

Version NID
3.60 0xDE6482C6

This is a guessed name. Temp name was sceKernelCpuTryLockSuspendIntrStoreFlagForDriver.

Attempts to acquire a RW spinlock for writing data. If successfully acquired, suspends interrupts if necessary.

/**
 * @param pLock Pointer to the spinlock
 * @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state
 * @retval <0 if the spinlock could not be acquired
 */
SceKernelIntrStatus sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);

sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver

Version NID
0.990-3.60 0x9EC91017

Temp name was sceKernelCpuUnlockResumeIntrStoreFlagForDriver.

Unlocks a RW spinlock previously acquired with either sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver or sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver, and resumes interrupts if necessary.

If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.

void sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);

SceSysclibForKernel

This library was removed on FW 1.80.

__prnt

Version NID
0.931-1.50 0xE38E7605
1.80-3.60 not present. Moved to ForDriver.

This is a guessed name. from PSP.

SceSysclibForKernel_F7E34376

Version NID
1.50 0xF7E34376

SceSysclibForKernel_FA746181

Version NID
0.990-1.50 0xFA746181

return a1 * (- 0x6e19295b) - 0x6e19295b;

In SceSysmem, it is used internally to modify a global variable, like a multiplication hash function would do.

int SceSysclibForKernel_FA746181(int a1);

SceSysclibForDriver

The C standard library for use in kernel only. Usermode has access to SceLibKernel, which confusingly is usermode only.

Includes standard string functions (no insecure variants like strcpy).

memset2

Version NID
0.931-1.69 0x502B000D
3.60 not present

sortof_vsnprintf

Version NID
0.931-0.990 0x589BAF6B
3.60 not present

This is a guessed name.

sortof_vsnprintf_2

Version NID
0.931-0.990 0x658EA38E
3.60 not present

This is a guessed name.

SceSysclibForDriver_33388DBC

Version NID
0.931-0.990 0x33388DBC
3.60 not present

Calculates xor of a1 and a2, then does some calculation with a3.

SceSysclibForDriver_72429909

Version NID
0.931-0.990 0x72429909
3.60 not present

SceSysclibForDriver_32373DF7

Version NID
0.931-0.990 0x32373DF7
3.60 not present

Helper for strtol in base 10.

int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);

__aeabi_idiv

Version NID
3.60 0x2518CD9E

__aeabi_idivmod

Version NID
3.60 0xAC86B4BA

__aeabi_lcmp

Version NID
3.60 0x709077A1

__aeabi_lmul

Version NID
3.60 0xFEE5E751

__aeabi_uidiv

Version NID
0.990-3.60 0xA9FF1205

__aeabi_uidivmod

Version NID
0.990-3.60 0xA46CB7DE

__aeabi_ldivmod

Version NID
3.60 0x7554AB04

__aeabi_uldivmod

Version NID
0.931-3.60 0x9D148CDE

Returns the 64-bit quotient of the division of dividend by divisor.

Used for example to convert SceRtc ticks to a simpler format (divide by time unit in ms) or to compute the number of storage device blocks in SceSdstor (divide by block size).

// ex: __aeabi_uldivmod(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000, 0);
SceUInt64 __aeabi_uldivmod(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);

__aeabi_ulcmp

Version NID
0.931-3.60 0xFE900DE8

__aeabi_llsr

Version NID
0.931-3.60 0xE46C47E6

__aeabi_llsl

Version NID
0.931-3.60 0x72D31F9D

__aeabi_lasr

Version NID
0.931-3.60 0x1D89F6C0

Temp name was rshift.

__memcpy_chk

Version NID
3.60 0x8A0B0815

__memmove_chk

Version NID
3.60 0x35DBB110

__memset_chk

Version NID
3.60 0x1A30BB28

__stack_chk_fail

Version NID
1.50-3.60 0xB997493D

__stack_chk_guard

Version NID
3.60 0x99EEBD1F

This is a variable.

__strlcat_chk

Version NID
3.60 0x224BE33F

__strlcpy_chk

Version NID
3.60 0xCF86EA38

__strncat_chk

Version NID
3.60 0x33EE298B

__strncpy_chk

Version NID
3.60 0x96268C53

__snprintf_chk

Version NID
3.60 0x7DBE7007

__vsnprintf_chk

Version NID
0.931-0.990 not present
3.60 0xCBF64DF6

__prnt

Version NID
0.931 not present. Present in ForKernel.
3.60 0xE38E7605

This is a guessed name. from PSP.

void __prnt(void (* cb)(void *argp, int ch), void *argp, const char *fmt, va_list list);

Supported formats:

Format Description
\x20 maybe space fill
# unknown
* unknown
- Left align
+ unknown
. unknown
0 Padding number and Enter zero padding
1~9 Padding number
D unknown (maybe with long?)
L unknown (maybe with long?)
O unknown (maybe with long?)
U unknown (maybe with long?)
X print hex number as uppercase
c print char
d print decimal number
h unknown
l long
o unknown
p print pointer as lowercase
s print strings
u unsigned number
x print hex number as lowercase

vsnprintf

Version NID
0.931-3.60 0x3DDBE2E1
int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);

get_ctype_table

Version NID
0.931-0.990 0x0614B013
3.60 not present

look_ctype_table

Version NID
3.60 0xCDF7F155
typedef enum SceCTypeFlag {
	SCE_CTYPE_NONE      = 0,
	SCE_CTYPE_UPPERCASE = 1,
	SCE_CTYPE_LOWERCASE = 2,
	SCE_CTYPE_NUMBER    = 4,
	SCE_CTYPE_CONTROL   = 8,
	SCE_CTYPE_SYMBOL    = 0x10,
	SCE_CTYPE_INVISIBLE = 0x20,
	SCE_CTYPE_HEX_CASE  = 0x40
} SceCTypeFlag;

char look_ctype_table(char ch);

memchr

Version NID
3.60 0x60DAEA30

timingsafe_memcmp

Version NID
3.60 0xB5A4D745

timing constant memcmp

memcmp

Version NID
0.931-3.60 0xF939E83D

memcpy

Version NID
0.931-3.60 0x40C88316

memmove

Version NID
1.50-3.60 0x6CC9C1A1

On FW 1.69, this seems to be implemented incorrectly.

memset

Version NID
0.931-3.60 0x0AB9BF5C

snprintf

Version NID
1.69-3.60 0xAE7A8981

strchr

Version NID
1.50-3.60 0x38463759

strcmp

Version NID
1.69-3.60 0x0B33BC43

strlcat

Version NID
3.60 0x12504E09

strlcpy

Version NID
3.60 0x7FB4EBEC

strlen

Version NID
0.931-3.60 0xCFC6A9AC

strncat

Version NID
1.69-3.60 0xA1D1C32C
char *strncat(char *s1, const char *s2, size_t n);

strncmp

Version NID
1.60-3.60 0x12CEE649
int strncmp(const char *s0, const char *s1, int n);

strncpy

Version NID
0.931-3.60 0x6D286146

strncpy_s

Version NID
0.931 not present
0.990-3.60 0xFE39AEAC

strnlen

Version NID
1.69-3.60 0xCD4BD884

strrchr

Version NID
1.69-3.60 0x7F0E0835

strstr

Version NID
1.69-3.60 0x1304A69D

strtol

Version NID
0.931-3.60 0xAB77C5AA

strtoll

Version NID
3.60 0x87AAAFA2

strtoul

Version NID
3.60 0x4E5042DA

tolower

Version NID
3.60 0x0021DAF9
char tolower(char ch);

toupper

Version NID
3.60 0xA685DCB1
char toupper(char ch);

__strcpy_chk

Version NID
0.931.010-0.990 not present
0.996.090-3.740.011 0x545DA5FD

Copy a string, with buffer overflow checking.

char * __strcpy_chk(char * dest, const char * src, size_t destlen);

__strcat_chk

Version NID
0.931.010-0.990 not present
0.996.090-3.740.011 0xDE4666F0

Concatenate two strings, with buffer overflow checking.

char *__strcat_chk(char *dest, const char *src, SceSize destlen);

SceSysrootForKernel

sceKernelSysrootSWBkptGetOriginalOpcodeForKernel

Version NID
0.990.000-3.740.011 0x9CFF80F9

This is a guessed name.

See #sceKernelSysrootSWBkptGetOriginalOpcodeForDriver.

sceKernelSysrootSetGetPrxDebugFlagFuncForKernel

Version NID
0.940-2.060.011 0xE635DFCC
2.100.081-3.740.011 not present

This is a guessed name.

Registers the function called by #sceKernelSysrootGetPrxDebugFlagForKernel which is also the fallback function called by #sceKernelSysrootGetCurrentAddressSpaceCBForKernel.

This function has been removed since System Software 2.100.081 because its feature was moved to #SceSysrootForKernel_26458702.

int sceKernelSysrootSetGetPrxDebugFlagFuncForKernel(void *func);

3999F917

sceKernelSysrootGetPrxDebugFlagForKernel

Version NID
0.990.000-3.740.011 0x73522F65

This is a guessed name.

Calls the function registered by #sceKernelSysrootSetGetPrxDebugFlagFuncForKernel on System Software version < 2.100.081 and by #sceKernelSysrootRegisterDbgpHandlerForKernel on System Software version >= 2.100.081.

int sceKernelSysrootGetPrxDebugFlagForKernel(SceUID pid, SceUInt32 *pFlag);

SceSysrootForKernel_5E7ECC37

Version NID
0.931.010-1.692.000 not present
1.800.071-2.060.011 0x5E7ECC37
2.100.081-3.740.011 not present

Registers the function called by #SceSysrootForKernel_5C86E49B.

This function has been removed since System Software version 2.100.081 because its feature is now provided by #sceKernelSysrootRegisterDbgpHandlerForKernel.

int SceSysrootForKernel_5E7ECC37(void *func);

SceSysrootForKernel_5C86E49B

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0x5C86E49B

Calls the handler stored in SceSysrootDbgpHandler at offset 0x10 and registered by #SceSysrootForKernel_5E7ECC37 or #sceKernelSysrootRegisterDbgpHandlerForKernel.

sceKernelSysrootSetProcessDebugSuspendFuncForKernel

Version NID
0.990.000-3.010.031 0x4337841F
3.10-3.740.011 0x4337841F

This is a guessed name.

Registers the function called by #sceKernelSysrootProcessDebugSuspendForKernel.

This function has been removed since System Software version 3.10 because its feature is already provided by #SceSysrootForKernel_D29BCA77.

int sceKernelSysrootSetProcessDebugSuspendFuncForKernel(void *func);

sceKernelSysrootProcessDebugSuspendForKernel

Version NID
0.990.000-3.740.011 0x1247A825

This is a guessed name. Official name might be as well sceKernelProcessDebugSuspendForKernel.

Calls the function registered by either #sceKernelSysrootSetProcessDebugSuspendFuncForKernel or #SceSysrootForKernel_D29BCA77.

int sceKernelSysrootProcessDebugSuspendForKernel(SceUID pid, int status);

SceSysrootForKernel_150DBA2B

Version NID
0.990.000-3.360.011 0x150DBA2B
3.500.011-3.740.011 not present

SceSysrootForKernel_273EAE53

Version NID
0.990.000-3.360.011 0x273EAE53
3.500.011-3.740.011 not present

sceKernelSysrootIsKernelProcessForKernel

Version NID
0.990.000-3.360.011 0xE0FC42C3
3.500.011-3.740.011 not present

This is a guessed name.

SceBool sceKernelSysrootIsKernelProcessForKernel(void);

sceKernelSysrootRegisterKPLSForKernel

Version NID
0.990.000-1.70 0x23BEAF6B
1.800.071-3.740.011 not present

SceSysrootForKernel_571E5B79

Version NID
0.990.000-3.740.011 0x571E5B79

See #SceSysrootForDriver_571E5B79.

sceKernelSysrootRegisterDbgpHandlerForKernel

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0x3999F917

Registers a debug process handler.

int sceKernelSysrootRegisterDbgpHandlerForKernel(SceSysrootDbgpHandler *handler);

sceKernelSysrootSetGetIntrMMUContextFuncForKernel

Version NID
0.931.010-3.740.011 0x611F17A4

This is a guessed name.

Registers the function called by #sceKernelSysrootGetIntrMMUContextForKernel.

int sceKernelSysrootSetGetIntrMMUContextFuncForKernel(void *func);

sceKernelSysrootGetIntrMMUContextForKernel

Version NID
0.931.010-3.740.011 0x118657C6

This is a guessed name.

Calls the function registered by #sceKernelSysrootSetGetIntrMMUContextFuncForKernel.

Return value is officially named pIntrMMUContext. "Intr" likely stands for "interrupt" or for "internal".

Used in SceExcpmgr.

SceKernelMMUContext* sceKernelSysrootGetIntrMMUContextForKernel(void);

SceSysrootForKernel_081F2C20

Version NID
0.931-0.990 not present
1.60-1.69 0x081F2C20
3.60 not present

Registers sceKernelGetProcessId_2 from SceKernelThreadMgr.

int SceSysrootForKernel_081F2C20(void *func);

SceSysrootForKernel_C5EAF5F7

Version NID
0.990-3.60 0xC5EAF5F7

Registers the function called by #SceSysrootForKernel_47724459.

int SceSysrootForKernel_C5EAF5F7(void *func);

SceSysrootForKernel_47724459

Version NID
0.990-3.60 0x47724459

Calls the function registered by #SceSysrootForKernel_C5EAF5F7.

SceSysrootForKernel_8747D415

Version NID
0.990-3.60 0x8747D415

Registers the function used by #SceSysrootForKernel_B27B7530.

int SceSysrootForKernel_8747D415(void *func);

SceSysrootForKernel_B27B7530

Version NID
0.990-3.60 0xB27B7530

Calls the function registered by #SceSysrootForKernel_8747D415.

Used by SceKernelBusError.

SceSysrootForKernel_82FC6405

Version NID
0.990-3.60 0x82FC6405

Registers the function used by #SceSysrootForKernel_CD4B84F7.

Used by SceKernelBusError.

int SceSysrootForKernel_82FC6405(void *func);

SceSysrootForKernel_CD4B84F7

Version NID
0.990-3.60 0xCD4B84F7

Calls the function registered by #SceSysrootForKernel_82FC6405.

Used by SceKernelBusError.

SceSysrootForKernel_733C243E

Version NID
0.990-3.60 0x733C243E

Registers many Sysroot SceProcessmgr callbacks.

int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);

SceSysrootForKernel_7334F1E8

Version NID
3.60 0x7334F1E8

Calls SceProcessmgr#SceProcessmgrForKernel_C77C2085 function registered by #SceSysrootForKernel_733C243E.

int SceSysrootForKernel_7334F1E8(SceUID pid);

SceSysrootForKernel_D29BCA77

Version NID
0.990-3.740.011 0xD29BCA77

Registers many Sysroot SceProcessmgr callbacks.

int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);

SceSysrootForKernel_DD7821AA

Version NID
0.990-3.60 0xDD7821AA

Registers the function called by #SceSysrootForKernel_340575CB.

int SceSysrootForKernel_DD7821AA(void *func);

SceSysrootForKernel_340575CB

Version NID
0.990-3.60 0x340575CB

Return some PID.

SceUID SceSysrootForKernel_340575CB(void);

sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel

Version NID
0.990-3.60 0xBE1EF51C

Registers the function called by #sceKernelSysrootCheckRemapCodeForUserForKernel.

int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);

sceKernelSysrootCheckRemapCodeForUserForKernel

Version NID
0.990-3.60 0xF8769E86

sceKernelSysrootAllocCurrentProcessHeapForKernel

Version NID
0.990-3.60 0x2F75C1DC
void *sceKernelSysrootAllocCurrentProcessHeapForKernel(SceSize size);

sceKernelSysrootCorelockUnlockForKernel

Version NID
0.931.010-3.740.011 0xAE55B7CC

Calls #SceCpuForKernel_A5C9DBBA.

void sceKernelSysrootCorelockUnlockForKernel(void);

SceSysrootForKernel_21F5790B

Version NID
0.931 not present
3.60 0x21F5790B

Registers a function related to kernel panic.

int SceSysrootForKernel_21F5790B(void *func);

SceSysrootForKernel_0DF574A9

Version NID
0.931 not present
3.60 0x0DF574A9

Calls the function related to kernel panic registered by #SceSysrootForKernel_21F5790B.

int SceSysrootForKernel_0DF574A9(void);

SceSysrootForKernel_2D6B2A79

Version NID
0.990-3.60 0x2D6B2A79

Registers a function related to kernel panic, called by #SceSysrootForKernel_CC7A0E63.

SceSysrootForKernel_CC7A0E63

Version NID
0.990-3.60 0xCC7A0E63

Calls a function related to kernel panic, registered by #SceSysrootForKernel_2D6B2A79.

// type: 1: kernel_assertion_or_panic, 3: kernel_exception
// size: must be <= 0x1000
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);

SceSysrootForKernel_1D84C4D4

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0x1D84C4D4

Get module name, fingerprint and base from address.

int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);

SceSysrootForKernel_5B5EBFB1

Version NID
0.990.000-3.740.011 0x5B5EBFB1

Registers pointer to SceLT5 used by #SceSysrootForKernel_E20F6FC8.

int SceSysrootForKernel_5B5EBFB1(uint a1);

SceSysrootForKernel_41636522

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0x41636522

Returns current SceLT5 value pointed by pointer registered using #SceSysrootForKernel_E20F6FC8. Long/low (64bit) time in microseconds. It is about "awake" uptime from system boot.

uint64_t SceSysrootForKernel_41636522(void);

SceSysrootForKernel_E20F6FC8

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0xE20F6FC8

Same as #SceSysrootForKernel_41636522 but "asynchronous".

Used by SceDebug Kernel Exceptions handlers.

uint64_t SceSysrootForKernel_E20F6FC8(void);

SceSysrootForKernel_1D8DB3A5

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0x1D8DB3A5

Same as #SceSysrootForKernel_41636522 but "asynchronous".

Returns 0 on success, 0x80020006 if pTime is a NULL pointer.

int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);

sceKernelSysrootCorelockLockForKernel

Version NID
0.931.010-3.740.011 0x8E4B61F1

Calls #SceCpuForKernel_9D72DD1B.

int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);

SceSysrootForKernel_06182D59

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0x06182D59

Reimplementation:

int SceSysrootForKernel_06182D59(int idx) {
	return *(uint32_t *)(pSysroot + 0x20) + (idx << 0x5);
}
int SceSysrootForKernel_06182D59(int idx);

SceSysrootForKernel_7385CADE

Version NID
0.931.010-0.990.000 not present
1.000.071-3.740.011 0x7385CADE

Get current syscall's PID.

// Returns KERNEL_PID if the function has not been set
SceUID SceSysrootForKernel_7385CADE(void);

SceSysrootForKernel_D441DC34

Version NID
0.931.010-0.990.000 not present
1.000.071-3.740.011 0xD441DC34

Calls a callback registered by #SceSysrootForKernel_26458702, related to syscall frame printing on kernel panic.

sceKernelSysrootGetSysrootClassItemsizeForKernel

Version NID
0.990.000-3.740.011 0xEEB867C0

This is a guessed name. Derived from get_SceKernelSysrootClass_itemsize.

On System Software version 0.990, returns hardcoded value 0x470.

On System Software version 3.200.010, returns hardcoded value 0x440.

On System Software version 3.600.011, returns hardcoded value 0x41C.

SceSize sceKernelSysrootGetSysrootClassItemsizeForKernel(void);

sceKernelGetSysrootClassObjectForKernel

Version NID
0.990.000-3.740.011 0x085C2BCB

This is a guessed name. Derived from get_SceKernelSysrootClass_object.

SceKernelObject *sceKernelGetSysrootClassObjectForKernel(void);

sceKernelSysrootGetLibraryDBForKernel

Version NID
0.990.000-2.060.011 0xCD70C9D7
2.100.081-3.740.011 not present

Equivalent to sceKernelGetProcessLibdbForKernel(0x10005) in 3.60

// size is 0x34-bytes on FW 2.00
void *sceKernelSysrootGetLibraryDBForKernel(void *pSysroot);

sceKernelSysrootSetLibraryDBForKernel

Version NID
0.990.000-2.060.011 0xCB58A0F4
2.100.081-3.740.011 not present

Maybe sets a pointer to the library stub structure. See Modules.

// size is 0x34-bytes on FW 2.00
int sceKernelSysrootSetLibraryDBForKernel(void *pSysroot, void *pLibDb);

sceKernelSysrootGetProcessLibraryDBForKernel

Version NID
0.990.000-2.060.011 0xF1037820
2.100.081-3.740.011 not present

Equivalent to sceKernelGetProcessLibdbForKernel(pid) in System Software version 3.600.011.

The return value of this function is an integer on error, but returns a pointer to LibraryDB on success.

// size is 0x34-bytes on FW 2.00
int sceKernelSysrootGetProcessLibraryDBForKernel(SceUID pid);

sceKernelSysrootAllocForKernel

Version NID
0.931.010-3.360.011 0xB0149E69
3.500.011-3.740.011 Not present

Allocates memory from the "Sysroot heap". The Sysroot heap is located after SceSysroot structure and consumes the rest of the page. Allocations from this "heap" are permanent and cannot be returned - there is no sceKernelSysrootFreeForKernel.

Usage of this function is not recommended because of the lack of a "free" function. Use SceSysmem#sceKernelAllocForKernel instead.

void *sceKernelSysrootAllocForKernel(SceSize size);

sceKernelSysrootSetStatusForKernel

Version NID
0.990-3.740.011 0xA84676E3
status description
3 Global malloc heap initialization completed.
4 Start initialization for load the module
0x10 Initialization to load the module is complete
0x100 First process create
0x1000 Kernel boot completed.
int sceKernelSysrootSetStatusForKernel(SceUInt32 status);

sceKernelSysrootGetProcessCBExitDeleteThreadForKernel

Version NID
0.990-3.60 0xBBFD2E3C

sceKernelSysrootGetCurrentProcessCBForKernel

Version NID
0.990-3.60 0x9991B1AF

sceKernelSysrootGetCurrentThreadAttrForKernel

Version NID
0.990-3.60 0x73601453
int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);

sceKernelSysrootGetCurrentTimeForKernel

Version NID
0.990 0x4FCFA359
SceRtcTick *sceKernelSysrootGetCurrentTimeForKernel(void);

sceKernelSysrootGetSystemTimeForKernel

Version NID
0.990-1.692.000 0xE0D41319
3.60 not present
int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)

sceKernelSysrootGetSystemTimeLowForKernel

Version NID
0.990-1.692.000 0x2464329D
3.60 not present
int sceKernelSysrootGetSystemTimeLowForKernel(void);

sceKernelSysrootAssertSysrootForKernel

Version NID
0.990-1.692.000 0x1B7F150F
3.60 not present

Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).

int sceKernelSysrootAssertSysrootForKernel(void *sysroot);

sceKernelSysrootSetVbaseResetVectorForKernel

Version NID
0.990-3.740.011 0x0F2F2B4E

sceKernelSysrootThreadMgrStartAfterProcessForKernel

Version NID
0.990-3.740.011 0x0EB5D7CD

sceKernelSysrootGetCurrentProcessForKernel

Version NID
0.931-0.996.090 0x5B7570C5

Return the current process id.

SceUID sceKernelSysrootGetCurrentProcessForKernel(void);

sceKernelSysrootTrapThreadAfterSyscallForKernel

Version NID
0.990-3.740.011 0x9139E22B

Calls a callback registered by #SceSysrootForKernel_26458702.

Prints syscall_critical_usage.

sceKernelSysrootReturnFromExcpToThreadForKernel

Version NID
0.931-3.740.011 0xDADFF828

Used in SceExcpmgr.

int sceKernelSysrootReturnFromExcpToThreadForKernel(void);

sceKernelSysrootBacktraceForKernel

Version NID
0.931-3.740.011 0xCC893F37

See also SceKernelModulemgr#SceBacktraceForDriver.

int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);

sceKernelSysrootPrintBacktraceForKernel

Version NID
0.931-3.740.011 0x491CE8DF

See also SceKernelModulemgr#SceBacktraceForDriver.

int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);

sceKernelSysrootRegisterBacktraceForKernel

Version NID
0.940-3.010.031 0x1C307A31
3.60 not present
int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());

sceKernelSysrootGetSharedMemoryForKernel

Version NID
0.990-3.740.011 0xC8C8C321

sceKernelSysrootSetSharedMemoryForKernel

Version NID
0.990-3.740.011 0xFBB91741

sceKernelSysrootGetUIDEntryHeapForKernel

Version NID
0.990-3.740.011 0x88DE85EF

Temp name was sceKernelSysrootGetPUIDEntryHeapForKernel.

Gets the UID Entry Heap of the process.

Kernel process's UID entry heap is the GUIDEntryHeap. All other process' UID entry heaps are PUID heaps.

int sceKernelSysrootGetUIDEntryHeapForKernel(SceUID pid, void **entryHeap);

sceKernelSysrootGetStatusForKernel

Version NID
0.990-3.740.011 0x5C426B19
int sceKernelSysrootGetStatusForKernel(void);

sceKernelSysrootIofilemgrStartForKernel

Version NID
0.990-3.60 0xF6A6D205

SceSysrootForKernel_F9FB9A2A

Version NID
0.990.000-2.060.011 0xF9FB9A2A
2.100.081-3.740.011 not present

Registers the function called by #sceKernelSysrootGetCurrentAddressSpaceCBForKernel.

This function has been removed since System Software 2.100.081 because its feature was moved to #SceSysrootForKernel_D29BCA77.

int SceSysrootForKernel_F9FB9A2A(void *func);

sceKernelSysrootGetCurrentAddressSpaceCBForKernel

Version NID
0.940-3.740.011 0x63EBB05B

Gets the current Address Space's control block via TPIDRPRW.

This function calls a callback registered by #SceSysrootForKernel_F9FB9A2A on System Software version < 2.10 and by #SceSysrootForKernel_D29BCA77 on System Software version >= 2.10, if it was registered, else a fallback callback. The fallback callback is registered by #SceSysrootForKernel_E635DFCC on System Software version < 2.10 and by #SceSysrootForKernel_26458702 on System Software version >= 2.10.

SceUIDAddressSpaceObject *sceKernelSysrootGetCurrentAddressSpaceCBForKernel(void);

SceSysrootForKernel_BF82931F

Version NID
1.500.151-3.740.011 0xBF82931F

Calls the function registered by #SceSysrootForDriver_2BE874EF.

No usage seen on CEX OS. Maybe used in DEX/TOOL OS.

int SceSysrootForKernel_BF82931F(int maybe_app_id, void *pOut);

SceSysrootForKernel_6D111FA7

Version NID
1.500.151-3.740.011 0x6D111FA7

Calls the function registered by #SceSysrootForDriver_3B19B06B.

Used only in SceCoredump.

int SceSysrootForKernel_6D111FA7(int maybe_app_id, void *pOut);

SceSysrootForKernel_2A03DFA1

Version NID
3.60 0x2A03DFA1

Calls the function registered by #SceSysrootForDriver_70AD47A9.

Used only in SceCoredump.

// pOut: A buffer of at least 0xF8 bytes
int SceSysrootForKernel_2A03DFA1(void *pOut);

sceKernelSysrootAppMgrSpawnProcessForKernel

Version NID
0.990-3.60 0x3ACACD22

sceKernelSysrootGetCachedSecureModuleInfoForKernel

Version NID
3.60 0xF10AB792

Temp name was sceKernelSysrootGetSmSelfInfoForKernel.

Index SM SELF location
0 os0:sm/gcauthmgr_sm.self
1 os0:sm/rmauth_sm.self
2 os0:sm/encdec_w_portability_sm.self
int sceKernelSysrootGetCachedSecureModuleForKernel(SceCachedSecureModule id, SceCachedSecureModuleInfo *pInfo);

sceKernelSysrootGetProcessSelfAuthInfoForKernel

Version NID
0.931-3.60 0x4F0A4066

Temp name was sceSysrootGetSelfAuthInfoForKernel.

int sceKernelSysrootGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *pSelfAuthInfo);

sceKernelSysrootGetProcessTitleIdForKernel

Version NID
3.60 0xEC3124A3

Temp name was sceSysrootGetProcessTitleIdForPidForKernel.

int sceKernelSysrootGetProcessTitleIdForKernel(SceUID pid, char *title_id, SceSize len);

sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0xB39CD708

Registers the function called by #sceKernelSysrootGetFunctionNameByNIDForKernel.

int sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel(void *func);

sceKernelSysrootGetFunctionNameByNIDForKernel

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0x0B79E220

Mirror of SceSysLibTrace#sceNidsymtblGetFunctionNameByNIDForDriver.

int sceKernelSysrootGetFunctionNameByNIDForKernel(SceNID funcnid, const char **name);

SceSysrootForKernel_26458702

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0x26458702

Registers some callbacks for example the fallback callback called by #sceKernelSysrootGetCurrentAddressSpaceCBForKernel.

SceSysrootForKernel_B171CC2D

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0xB171CC2D

Register some ModuleMgr handlers.

Used by SceKernelModulemgr.

int SceSysrootForKernel_B171CC2D(SceSysrootModulemgrHandlers *pHandlers);

sceKernelSysrootGetProcessSyscallInfoForKernel

Version NID
3.60 0xFF9F80FF
int sceKernelSysrootGetProcessSyscallInfoForKernel(SceUID pid, const void *PC, SceSyscallInfo *pInfo);

sceKernelSysrootGetVbaseResetVectorForKernel

Version NID
0.990-3.60 0xCC85905B

Returns the exception vectors base address. The address of the exception vectors for the CPU i is: sceKernelSysrootGetVbaseResetVectorForKernel() + 0x40 * i.

void *sceKernelSysrootGetVbaseResetVectorForKernel(void);

sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel

Version NID
3.60 0x71DB83A2

Registers SceSblPostSsMgr#sceSblLicMgrGetLicenseStatusForDriver.

int sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel(int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)());

sceKernelSysrootLicMgrGetLicenseStatusForKernel

Version NID
3.60 0x377895EB

Called by sceSblAuthMgrAuthHeaderForKernel before Cmep request.

int sceKernelSysrootLicMgrGetLicenseStatusForKernel(void);

sceKernelSysrootGetSysrootForKernel

Version NID
0.990.000-3.740.011 0x3E455842

Temp name was sceKernelGetSysbaseForKernel.

Returns pointer to SceUIDSysrootObject in SceSysmem.

SceUIDSysrootObject *sceKernelSysrootGetSysrootForKernel(void);

sceKernelSysrootGetKblParamForKernel

Version NID
0.931-3.740.011 0x9DB56D1F

Temp name was sceKernelGetSysrootBufferForKernel, sceSysrootGetSysrootBufferForKernel.

Returns pointer to KBL Param.

SceKblParam *sceKernelSysrootGetKblParamForKernel(void);

sceKernelSysrootGetSoCRevisionForKernel

Version NID
0.990.000-3.740.011 0xD3872270

return pSysroot->soc_revision;

int sceKernelSysrootGetSoCRevisionForKernel(void);

sceKernelSysrootGetPervasiveUnkDwordForKernel

Version NID
0.990.000-3.740.011 0xFFD6E24D

This is a guessed name.

Returns value initially read from physical address 0xE3100004 (ScePervasiveMisc + 0x4).

return pSysroot->pervasive_unk_dword;

int sceKernelSysrootGetPervasiveUnkDwordForKernel(void);

sceKernelSysrootGetKermitRevisionForKernel

Version NID
0.990.000-3.740.011 0x403B509E

return pSysroot->kermit_revision;

Used by SceKernelBusError, SceSysStateMgr.

// Return value is 0x1FFFF-masked, at least on recent System Software versions.
SceUInt32 sceKernelSysrootGetKermitRevisionForKernel(void);

sceKernelSysrootGetErnieSleepFactorForKernel

Version NID
0.996.090-3.740.011 0xAB3CC7D0

This is a guessed name.

See KBL Param#Sleep Factor.

return kbl_param->sleep_factor;

int sceKernelSysrootGetErnieSleepFactorForKernel(void);

sceKernelSysrootGetErnieWakeupFactorForKernel

Version NID
0.990.000-3.740.011 0x2F97041A

This is the official name. Temp name was sceSysrootGetWakeupFactorForKernel.

See KBL Param#Wakeup Factor.

return kbl_param->wakeup_factor;

int sceKernelSysrootGetErnieWakeupFactorForKernel(void);

sceKernelSysrootGetSessionIdForKernel

Version NID
0.931.010-1.81 not present
2.000.081-3.740.011 0x84783B71

Writes kbl_param->session_id to buffer.

pSessionId buffer size is 0x10 bytes.

int sceKernelSysrootGetSessionIdForKernel(char *pSessionId);

sceKernelSysrootIsExternalBootModeForKernel

Version NID
0.990.000-3.740.011 0x89D19090

return *(int *)(kbl_param->boot_type_indicator_1) & 1;

int sceKernelSysrootIsExternalBootModeForKernel(void);

sceKernelSysrootIsSomeBootModeForKernel

Version NID
0.990-0.996.090 not present
1.000.071-3.740.011 0x7B7F8171

This is a guessed name. A possible name is sceKernelIsAllowSdCardFromMgmt.

Used by SceSdif, SceExfatfs.

SceExfatfs will mount sd0: instead of gro0:/grw0: when this function returns SCE_TRUE.

return (*(int *)(kbl_param->boot_type_indicator_1) >> 19) & 1;

Returns true if boot_type_indicator_1 has flag 0x80000 ?sd mode? - (Mgmt bit 1)

int sceKernelSysrootIsSomeBootModeForKernel(void);

sceKernelSysrootIsExternalBootMode2ForKernel

Version NID
0.990.000-3.740.011 0x7918D44E

This is a guessed name. Temp name was sceSysrootIsSomeBootMode2ForKernel. A possible name is sceKernelIsAllowFwCheckSkip.

return kbl_param->boot_type_indicator_1[2] & 1;

Return true if boot_type_indicator_1 has flag 0x10000 but it seems to be never set in external (release) second_loader. It allows to bypass current fw version check for module loading.

int sceKernelSysrootIsExternalBootMode2ForKernel(void);

sceKernelSysrootIsUartModeForKernel

Version NID
0.931.010-3.740.011 0xAE7A8F1D

This is a guessed name. Temp name was sceSysrootIsSomeModeForKernel.

Returns true if (kbl_param->boot_flags[1] != 0xFF).

Used to check if UART must be initialized or not.

int sceKernelSysrootIsUartModeForKernel(void);

sceKernelSysrootIsSafeModeForKernel

Version NID
0.990.000-3.740.011 0x834439A7
int sceKernelSysrootIsSafeModeForKernel(void);

sceKernelSysrootIsUpdateModeForKernel

Version NID
0.990.000-3.740.011 0xB0E1FC67
int sceKernelSysrootIsUpdateModeForKernel(void);

sceKernelSysrootIsBsodRebootForKernel

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0x4373AC96

return ((pKblParam->wakeup_factor) & 0x7Fu) == 0x17;

int sceKernelSysrootIsBsodRebootForKernel(void);

sceKernelSysrootIsUsbEnumWakeupForKernel

Version NID
0.996.090-3.740.011 0x79C9AE10
if ( *(int *)(kbl_param->unk_C0) & 0x90000 )
  return 1;
else
  return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) == 0xF;
int sceKernelSysrootIsUsbEnumWakeupForKernel(void);

sceKernelSysrootIsUnknownRebootForKernel

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0xE4EA1960

return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) <= 1;

int sceKernelSysrootIsUnknownRebootForKernel(void);

sceKernelSysrootIsManufacturingModeForKernel

Version NID
0.940-3.740.011 0x55392965

This is a guessed name. Temp name was sceSysrootUseExternalStorageForKernel.

When returns true it allows loading sd0:psp2config.skprx.

Returns true when Manufacturing Mode flag is set:

return (*(int *)(kbl_param->boot_type_indicator_1) >> 2) & 1;

int sceKernelSysrootIsManufacturingModeForKernel(void);

sceKernelSysrootUseInternalStorageForKernel

Version NID
3.60 0x50FE3B4D

Returns true when use internal storage flag is not set:

return *(char *)(kbl_param->boot_flags[5]) & 1 ^ 1;

int sceKernelSysrootUseInternalStorageForKernel(void);

sceKernelSysrootGetThreadAccessLevelForKernel

Version NID
3.60 0x20009397

Calls int (__cdecl *GetThreadAccessLevel)(); // 0x344 on 3.60

int sceKernelSysrootGetThreadAccessLevelForKernel(void);

sceKernelSysrootAllocRemoteProcessHeapForKernel

Version NID
0.990-3.60 0xD351EBC8

Temp name was sceKernelAllocHeapMemoryForKernel.

Same as sceKernelAllocHeapMemoryWithOptForDriver but does set pid to 0x1000B.

Checks that pid is 0x10013 or 0x10005 (kernel).

void* sceKernelSysrootAllocRemoteProcessHeapForKernel(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelSysrootGetModulePrivateForKernel

Version NID
0.990-3.60 0x37EC12BB

data : 3: system memory (0xDC-bytes), 7: some process data (?-bytes), 9: kbl module cb (0xAC-bytes)

void *sceKernelSysrootGetModulePrivateForKernel(int idx);

sceKernelSysrootSetModulePrivateForKernel

Version NID
0.990.000-3.740.011 0x7A7E7C0C
void sceKernelSysrootSetModulePrivateForKernel(int idx, void *data);

sceKernelSysrootSetSysrootForKernel

Version NID
0.931.010-3.740.011 0x36916C30
void sceKernelSysrootSetSysrootForKernel(SceUID sysroot_uid);

sceKernelSysrootProcessmgrStart2ForKernel

Version NID
0.931.011-3.740.011 0x62E8F511

sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel

Version NID
0.940-3.740.011 0x256B2394
sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel(SceUID pid, SceUID modid, SceUInt32 stopReason, SceUInt64 time);

sceKernelSysrootSetIsUserModeThreadFuncForKernel

Version NID
0.931.010-2.060.011 0x5BD911A8
2.100.081-3.740.011 not present

This is a guessed name.

This function has been removed since System Software version 2.100.081 because its feature is now provided by #sceKernelSysrootRegisterDbgpHandlerForKernel.

int sceKernelSysrootSetIsUserModeThreadFuncForKernel(void *func);

sceKernelSysrootIsUserModeThreadForKernel

Version NID
0.931.011-3.740.011 0x7FC7A163

sceKernelSysrootGetSecureStatusForKernel

Version NID
0.940 0x0A63CA5E
3.60 not present

return *(uint *)some_buf->field_0x28 & 1;

int sceKernelSysrootGetSecureStatusForKernel(void);

sceKernelSysrootIsSecureStateForKernel

Version NID
0.940 0x3193DAB2
3.60 not present

return (*(uint *)some_buf->field_0x28 ^ 1) & 1;

SceBool sceKernelSysrootIsSecureStateForKernel(void);

sceKernelSysrootIsColdBootForKernel

Version NID
0.940-3.60 0xD7198963

return (*(uint *)some_buf->field_0x28 & 10; // FW 3.60 in IDA PRO

return ((*(uint *)some_buf->field_0x28 ^ 0x10) << 0x1b) >> 0x1f; // FW 0.940 in Ghidra

int sceKernelSysrootIsColdBootForKernel(void);

SceSysrootForDriver

SceSysrootForDriver_4B8C305A

Version NID
?3.60? 0x4B8C305A

Variable of 12 bytes holding the AutoClockDown idle context.

Used by SceLowio for the AutoClockDown idle loop.

See also: SceSysmem#sceKernelSysrootDisableAutoClockDownForDriver, SceSysmem#sceKernelSysrootEnableAutoClockDownForDriver.

num_active_cores is usually initialized to 0x4. However, if the console is in product mode (as per KBL_Param#Boot_type_indicator_1), then the initialization value is 0x14 instead, which disables the AutoClockDown.

struct low_power_idle_context {
    /* backup of ScePervasiveBaseClk registers */
    uint32_t arm_baseclk_config[2];
    /* counter used to clock down ARM when all cores are idle */
    uint32_t num_active_cores; // default: 4, AutoClockDown disabled: 0x14
};

SceSysrootForDriver_6219CC14

Version NID
3.60-3.65 0x6219CC14

Used in SceUlobjMgr#SceUlobjMgrForDriver_332F2E58.

int SceSysrootForDriver_6219CC14(int a1, int a2, int a3, int a4, int a5);

SceSysrootForDriver_F804F761

Version NID
0.931.010-3.18 not present
3.300.041-3.740.011 0xF804F761

Official name might be sceKernelSysrootHasSDCardSupportForDriver.

This function always returns SCE_FALSE on some release System Software versions, for example 3.500.000 and 3.600.011.

Used in SceSdstor and SceVshBridge#vshSdGetCardInfo.

If this function returns SCE_TRUE, then SceSdif#get_sd_context_part_validate_sd(1) is called.

SceBool SceSysrootForDriver_F804F761(void);

sceKernelSysrootSetVipRpcDebugFuncForDriver

Version NID
3.60 0xA6A0A038

This is a guessed name.

void sceKernelSysrootSetVipRpcDebugFuncForDriver(SceKernelSysrootVipRpcDebugFunc func);

sceKernelSysrootClearVipRpcDebugFuncForDriver

Version NID
3.60 0x0ECD711E

This is a guessed name.

void sceKernelSysrootClearVipRpcDebugFuncForDriver();

sceKernelSysrootGetVipRpcDebugFuncForDriver

Version NID
3.60 0x483EF108

This is a guessed name.

SceKernelSysrootVipRpcDebugFunc sceKernelSysrootGetVipRpcDebugFuncForDriver();

sceKernelSysrootSetVeneziaRpcDebugFuncForDriver

Version NID
3.60 0x47F19DD3

This is a guessed name.

void sceKernelSysrootSetVeneziaRpcDebugFuncForDriver(SceKernelSysrootVeneziaRpcDebugFunc func);

sceKernelSysrootClearVeneziaRpcDebugFuncForDriver

Version NID
3.60 0x5B106EB3

This is a guessed name.

void sceKernelSysrootClearVeneziaRpcDebugFuncForDriver();

sceKernelSysrootGetVeneziaRpcDebugFuncForDriver

Version NID
3.60 0x49843C16

This is a guessed name.

SceKernelSysrootVeneziaRpcDebugFunc sceKernelSysrootGetVeneziaRpcDebugFuncForDriver();

sceKernelApiDeclareErrorMsgForDriver

Version NID
3.65 0x8CD02748

sceKernelApiDeclareTypeRawForDriver

Version NID
3.65 0x8A760856

sceKernelApiDeclareTypeInt32ForDriver

Version NID
3.65 0xD86BD6DC

sceKernelApiDeclareTypeUInt32ForDriver

Version NID
3.65 0x6E0BC27C

sceKernelApiDeclareTypeInt64ForDriver

Version NID
3.65 0x08B8F1D0

sceKernelApiDeclareTypeUInt64ForDriver

Version NID
0.931-0.990 not present
3.60-3.65 0x2A5DBD38

Sets a value to 3.

void sceKernelApiDeclareTypeUInt64ForDriver(void);

sceKernelSysrootGetTimebaseClockFrequencyForDriver

Version NID
0.931.010-2.060.011 not present
2.500.071-3.740.011 0xBFD8F2A2

Calls a function registered by #SceSysrootForDriver_C94C76FA.

Used by SceGpuEs4, only on DevKit.

SceUInt32 sceKernelSysrootGetTimebaseClockFrequencyForDriver(void);

SceSysrootForDriver_C94C76FA

Version NID
0.931.010-3.360.011 not present
3.500.011-3.740.011 0xC94C76FA

Registers some Sysroot functions related to clock frequency.

int SceSysrootForDriver_C94C76FA(SceSysrootForDriver_C94C76FA_struct *pParam);

SceSysrootForDriver_2BE874EF

Version NID
1.500.151-3.740.011 0x2BE874EF

Registers the function called by #SceSysrootForKernel_BF82931F.

Used only in SceAppMgr.

int SceSysrootForDriver_2BE874EF(void *func);

SceSysrootForDriver_3B19B06B

Version NID
1.500.151-3.740.011 0x3B19B06B

Registers the function called by #SceSysrootForKernel_6D111FA7.

Used only in SceAppMgr.

int SceSysrootForDriver_3B19B06B(void *func);

SceSysrootForDriver_70AD47A9

Version NID
1.500.151-3.740.011 0x70AD47A9

Registers the function called by #SceSysrootForKernel_2A03DFA1.

Used only in SceAppMgr.

int SceSysrootForDriver_70AD47A9(void *func);

SceSysrootForDriver_AA770EF7

Version NID
0.931.010-3.360.011 not present
3.500.011-3.740.011 0xAA770EF7

Registers the function called by #SceSysrootForDriver_591BB490.

The function is registered from SceTty2uart only if DIP Switch 211 is set.

int SceSysrootForDriver_AA770EF7(void *func);

SceSysrootForDriver_591BB490

Version NID
0.931.010-3.360.011 not present
3.500.011-3.740.011 0x591BB490

Calls the function registered by #SceSysrootForDriver_AA770EF7.

Gets tty2uart information into a 0x1000-sized buffer, similarly to #sceKernelGetTtyInfoForDriver. Returns some size, maybe size of the written tty2uart buffer.

Used only in SceCoredump.

// size: usually 0x1000
int SceSysrootForDriver_591BB490(int magic_or_size, void *pBuf, SceSize size);

SceSysrootForDriver_C5EAF5F7

Version NID
0.990.000-3.740.011 0xC5EAF5F7

Registers the function called by #SceSysrootForDriver_47724459.

int SceSysrootForDriver_C5EAF5F7(void *func);

SceSysrootForDriver_47724459

Version NID
0.990.000-3.740.011 0x47724459

Calls the function registered by #SceSysrootForDriver_C5EAF5F7.

SceSysrootForDriver_D4457D4F

Version NID
0.931.010 not present
0.990.000-3.740.011 0xD4457D4F

Registers the function called by #SceSysrootForDriver_40F28DC6.

int SceSysrootForDriver_D4457D4F(void *func);

SceSysrootForDriver_40F28DC6

Version NID
0.990-3.740.011 0x40F28DC6

Calls the function registered by #SceSysrootForDriver_D4457D4F.

sceKernelSysrootGetCompiledSdkVersionByPidForDriver

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0xCAE820B2

Temp name was sceKernelGetProcessHeapIDForDriver.

Calls a callback registered by #SceSysrootForKernel_D29BCA77.

Used in SceKernelModulemgr functions that load modules, for example SceKernelModulemgr#sceKernelStartModuleForPidForKernel.

int sceKernelSysrootGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);

SceSysrootForDriver_8747D415

Version NID
0.990-3.60 0x8747D415

Used by SceDeci4pSDfMgr.

Registers the function called by #SceSysrootForDriver_B27B7530.

int SceSysrootForDriver_8747D415(void *func);

SceSysrootForDriver_B27B7530

Version NID
0.990-3.60 0xB27B7530

Calls the function registered by #SceSysrootForDriver_8747D415.

sceKernelSysrootSetGetBuserrorDataFuncForDriver

Version NID
0.990-3.60 0x82FC6405

This is a guessed name.

Registers the function called by #sceKernelSysrootGetBuserrorDataForDriver.

int sceKernelSysrootSetGetBuserrorDataFuncForDriver(void *func);

sceKernelSysrootGetBuserrorDataForDriver

Version NID
0.990-3.60 0xCD4B84F7

This is a guessed name.

Calls the function registered by #sceKernelSysrootSetGetBuserrorDataFuncForDriver.

SceSysrootForDriver_FF2DD7AB

Version NID
3.60 0xFF2DD7AB

Registers something.

typedef struct SceSysrootForDriver_FF2DD7AB_struct { // size is 0x1C on FW 3.60
  SceSize size; // Size of this structure
  char unk_4[0x18];
} SceSysrootForDriver_FF2DD7AB_struct;

int SceSysrootForDriver_FF2DD7AB(SceSysrootForDriver_FF2DD7AB_struct *pData);

SceSysrootForDriver_3AE319DA

Version NID
3.60 0x3AE319DA

Used by SceSyscon.

Get something registered by #SceSysrootForDriver_FF2DD7AB.

int SceSysrootForDriver_3AE319DA(void);

sceKernelSysrootGetHardwareFlagsForDriver

Version NID
3.60 0x46E72428

This is a guessed name. Temp name was sceSysrootIsAuCodecIcConexantForDriver.

Writes kbl_param->hardware_flags to buffer.

pFlags buffer size is 0x10 bytes.

int sceKernelSysrootGetHardwareFlagsForDriver(void *pFlags);

sceKernelSysrootGetHardwareInfoForDriver

Version NID
3.60 0x930B1342

return kbl_param->hardware_info;

int sceKernelSysrootGetHardwareInfoForDriver(void);

sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver

Version NID
3.60 0xE541959B
int sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver(void *func);

sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver

Version NID
3.60 0x9421B223
int sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver(void);

sceKernelSysrootSDfCtlSetBootParameterForDriver

Version NID
3.60 0x7AAC4EE7
// bootparam max size is 0x80 bytes
int sceKernelSysrootSDfCtlSetBootParameterForDriver(const char *bootparam);

sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver

Version NID
3.60 0x35875119

Registers the function called by #sceKernelSysrootUtMgrGetTrilithiumBufferForDriver.

int sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver(void *func);

sceKernelSysrootUtMgrGetTrilithiumBufferForDriver

Version NID
0.931.010-3.01 not present
3.180.011-3.740.011 0xD75D4F37

Used in SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel to overwrite fSELF authinfo.

Returns 0 on success, 0x800f1a02 on error.

int sceKernelSysrootUtMgrGetTrilithiumBufferForDriver(SceUtokenDecrypted *buffer);

sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver

Version NID
0.931.010-1.06 not present
1.500.151-3.740.011 0xA12C9950

Registers the function called by #sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver.

The function is SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465.

int sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver(void *func);

sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver

Version NID
3.60 0x56D85EB0

Used by SceSblACMgr.

Calls the function registered by #sceKernelSysrootSetSceSblPostSsMgrForDriver_56D85EB0FuncForDriver.

The function is SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465.

sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver

Version NID
0.931.010-0.996 not present
1.000.071-3.740.011 0xE25D2FD5

Registers the functions called by #sceKernelSysrootSblUtMgrHasUNK1FlagForDriver.

int sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver(void *func);

sceKernelSysrootSblUtMgrHasUNK1FlagForDriver

Version NID
0.931.010-0.996 not present
1.000.071-3.740.011 0x26AA237C

Calls the function registered by #sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver.

int sceKernelSysrootSblUtMgrHasUNK1FlagForDriver(void);

sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver

Version NID
3.60 0xE2E88E3E

Registers the function called by #sceKernelSysrootSblUtMgrHasUNK2FlagForDriver.

int sceKernelSysrootsceSetSblUtMgrHasUNK2FlagFuncForDriver(void *func);

sceKernelSysrootSblUtMgrHasUNK2FlagForDriver

Version NID
3.60 0xE2515A08

Calls the function registered by #sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver.

Used by SceSblACMgr#sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver.

int sceKernelSysrootSblUtMgrHasUNK2FlagForDriver(void);

sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver

Version NID
0.931-3.18 not present
3.300.041-3.740.011 0xEE5D6CE9
int sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver(void *func);

sceKernelSysrootUtMgrHasNpTestFlagForDriver

Version NID
0.931-3.18 not present
3.300.041-3.740.011 0xA43599E9
int sceKernelSysrootUtMgrHasNpTestFlagForDriver(void);

SceSysrootForDriver_2D6B2A79

Version NID
0.990-3.60 0x2D6B2A79

Registers a function related to kernel panic, called by #SceSysrootForDriver_CC7A0E63 or #SceSysrootForKernel_CC7A0E63.

SceSysrootForDriver_CC7A0E63

Version NID
0.990-3.60 0xCC7A0E63

Calls a function related to kernel panic, registered by #SceSysrootForDriver_2D6B2A79 or #SceSysrootForKernel_2D6B2A79.

// type: 1: kernel_assertion_or_panic, 3: kernel_exception
// size: must be <= 0x1000
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForDriver_CC7A0E63(int type, SceSize size, const char *pBuf);

sceKernelSysrootDisableAutoClockDownForDriver

Version NID
0.931 not present
3.60 0xEE934615

Derived from SceVshBridge#vshKernelDisableAutoClockDown.

Atomically adds 0x10 to SceSysrootForDriver_4B8C305A.num_active_cores.

The correct return type may be void instead (currently, return value is the incremented num_active_cores).

int sceKernelSysrootDisableAutoClockDownForDriver(void);

sceKernelSysrootEnableAutoClockDownForDriver

Version NID
0.931 not present
3.60 0xEEF091A7

Derived from SceVshBridge#vshKernelEnableAutoClockDown.

Atomically substracts 0x10 from SceSysrootForDriver_4B8C305A.num_active_cores.

The correct return type may be void instead (currently, return value is the decremented num_active_cores).

Used by SceCompat, ScePower, SceKernelDmacMgr, SceSblAuthMgr, SceSblSmschedProxy, SceSblSsSmComm.

int sceKernelSysrootEnableAutoClockDownForDriver(void);

SceSysrootForDriver_6050A467

Version NID
3.60 0x6050A467

Debug related. Returns an error when called because there is no handler set for retail.

int SceSysrootForDriver_6050A467(SceUID pid);

SceSysrootForDriver_F4340469

Version NID
3.60 0xF4340469

Coredump related. Called during process load. Something is same as in #SceSysrootForDriver_6050A467.

int SceSysrootForDriver_F4340469(int something, SceUID pid, ...);

sceKernelSysrootRegisterCoredumpTriggerForDriver

Version NID
0.990-3.60 0xDD473B05
int sceKernelSysrootRegisterCoredumpTriggerForDriver(void *func);

sceKernelSysrootCoredumpTriggerForDriver

Version NID
0.990-3.60 0xCD8CD242

Used by SceDeci4pDbgp.

int sceKernelSysrootCoredumpTriggerForDriver(int a1, int a2, int a3, SceCoredumpForDriver_A7D214A7_Opt *pOpt);

sceKernelSysrootRegisterCoredumpCancelForDriver

Version NID
0.990-3.60 0x400B9793
int sceKernelSysrootRegisterCoredumpCancelForDriver(void *func);

sceKernelSysrootCoredumpCancelForDriver

Version NID
0.990-3.60 0x80FBC69D
int sceKernelSysrootCoredumpCancelForDriver(int a1);

sceKernelSysrootSetProcessHandlerForDriver

Version NID
0.931-0.990 not present
3.60 0x0F07C3FC

Registers some handlers.

int sceKernelSysrootSetProcessHandlerForDriver(SceSysrootProcessHandler *pHandler);

sceKernelSysrootClearProcessHandlerForDriver

Version NID
0.931-0.990 not present
3.60 0x5A7FFDC1
void sceKernelSysrootClearProcessHandlerForDriver(void);

SceSysrootForDriver_421EFC96

Version NID
0.931-1.692 not present
1.800.071-3.740.011 0x421EFC96

Calls SceSysrootProcessHandler's on_process_created.

Used only by SceAppMgr and called on process creation.

Hooked to make it return 0 (success) for example in:

int SceSysrootForDriver_421EFC96(int maybe_pid, int maybe_modid, int a3);

sceKernelSysrootSWBkptGetOriginalOpcodeForDriver

Version NID
0.990.000-3.740.011 0x9CFF80F9

This is a guessed name.

int sceKernelSysrootSWBkptGetOriginalOpcodeForDriver(SceUID pid, void *address, SceUInt32 *opcode);

SceSysrootForDriver_571E5B79

Version NID
0.990.000-3.740.011 0x571E5B79

Calls SceSysrootProcessHandler's unk_4.

SceSysrootForDriver_51F9C118

Version NID
3.60-3.65 0x51F9C118

Calls SceSysrootProcessHandler's unk_18.

Used in SceProcessmgr#SceProcessmgrForKernel_8729DE79.

// a3: second argument of SceProcessmgrForKernel_8729DE79
int SceSysrootForDriver_51F9C118(SceUID pid, SceUID modid, int a3, void* maybe_process_info, SceUInt64 time);

SceSysrootForDriver_582616EC

Version NID
3.60-3.65 0x582616EC

Calls SceSysrootProcessHandler's unk_24.

Used in SceProcessmgr#SceProcessmgrForKernel_8729DE79.

// a3: second argument of SceProcessmgrForKernel_8729DE79
int SceSysrootForDriver_582616EC(SceUID pid, SceUID modid, int a3);

sceKernelSysrootDbgpSuspendProcessAndWaitResumeForDriver

Version NID
0.990-3.60 0x256B2394

sceKernelSysrootGetShellPidForDriver

Version NID
0.990-3.60 0x05093E7B
SceUID sceKernelSysrootGetShellPidForDriver(void);

sceKernelSysrootAppMgrSpawnProcessForDriver

Version NID
0.990-3.60 0x3ACACD22

sceKernelSysrootInformUpdateStartedForDriver

Version NID
0.990-3.60 0x9A486846
int sceKernelSysrootInformUpdateStartedForDriver(int number1, int number2, const char *str, SceSize len);

sceKernelSysrootInformUpdateOngoingForDriver

Version NID
0.990-3.60 0x9EC02A41
int sceKernelSysrootInformUpdateOngoingForDriver(int number1, int number2);

sceKernelSysrootInformUpdateFinishedForDriver

Version NID
0.990-3.60 0x217B2871
int sceKernelSysrootInformUpdateFinishedForDriver(int number, const char *str, SceSize len);

sceKernelSysrootSetSwInfoIntForDriver

Version NID
0.990-3.60 0x631141E2
int sceKernelSysrootSetSwInfoIntForDriver(char *str, SceSize len, SceUInt32 number);

sceKernelSysrootSetSwInfoStrForDriver

Version NID
0.990-3.60 0x17DD213C
int sceKernelSysrootSetSwInfoStrForDriver(char *str1, SceSize len1, char *str2, SceSize len2);

sceKernelSysrootSetSwInfoBinForDriver

Version NID
0.990-3.60 0x9E96D990
int sceKernelSysrootSetSwInfoBinForDriver(char *str1, SceSize size1, char *str2, SceSize size2);

sceKernelSysrootSetGetSystemSwVersionFuncForDriver

Version NID
3.60 0x3276086B

Temp name was sceKernelSysrootSetSystemSwVersionForDriver.

Used by SceSblUpdateMgr.

void sceKernelSysrootSetGetSystemSwVersionFuncForDriver(void *func);

sceKernelSysrootGetSystemSwVersionForDriver

Version NID
3.60-3.65 0x67AAB627

Returns System Software version as int from SceSysmem memory. For exemple: 0x0365000 on 3.65.

int sceKernelSysrootGetSystemSwVersionForDriver(void);

sceKernelSysrootIsSafeModeForDriver

Version NID
0.990-3.60 0x834439A7
int sceKernelSysrootIsSafeModeForDriver(void);

sceKernelSysrootIsUpdateModeForDriver

Version NID
3.60 0xB0E1FC67
int sceKernelSysrootIsUpdateModeForDriver(void);

sceKernelSysrootGetModelInfoForDriver

Version NID
0.931 not present
3.60 0x4D98B15B

This is a guessed name, based on "sysroot->model_info".

Returns sysroot->model_info.

Used only in SceProcessmgr initializeBudget() on module start. According to model_info, ScePhyMemPartShell is allocated with different parameters.

SceUInt32 sceKernelSysrootGetModelInfoForDriver(void);

SceSysrootForDriver_ED688AEE

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0xED688AEE

Registers the callback called by #SceSysrootForDriver_F404026C.

SceSysrootForDriver_ED688AEE(void* cb);

SceSysrootForDriver_F404026C

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0xF404026C

Calls the callback registered by #SceSysrootForDriver_ED688AEE.

sceKernelSysrootCheckModelCapabilityForDriver

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0x8AA268D6

This is an official name. Name derived from #sceKernelSysrootCheckModelCapability.

Each model capability corresponds to a bit in a Sysroot field derived from Syscon Hardware Info and Hardware Info 2.

Model capabilities:

  • 0: unknown
  • 1: Multi-controllers support
  • 2: unknown
  • 4: unknown
  • 5: unknown
  • 6: unknown
  • 7: unknown, ?OLED display?
  • 8: unknown, ?LCD display?
  • 9: unknown, set on almost all models
  • 10: unknown
  • 11: SD card support
  • 12: unknown
  • 13: unknown
Case Model Model capabilities (raw) Model capabilities (bits set)
ErnieHwInfo & 0xFF0000 <= 0x410000 / Unknown Model 0x10100 0x604 2, 9, 10
ErnieHwInfo & 0xFF0000 == 0x510000 0x20100 0x1232 1, 4, 5, 9, 12
ErnieHwInfo & 0xFF0000 == 0x600000 0x10150 0x604 2, 9, 10
ErnieHwInfo & 0xFF0000 == 0x700000 0x20100 0x1232 1, 4, 5, 9, 12
ErnieHwInfo & 0xFF0000 == 0x720000 0x20110 0x232 1, 4, 5, 9
ErnieHwInfo & 0xFF0000 == 0x800000 0x10200 0x604 2, 9, 10
ErnieHwInfo & 0xFF0000 == 0x820000 0x10220 0x604 2, 9, 10
PDEL-10xx in PS TV Emulation mode 0x20101 0x252 1, 4, 6, 9
(ErnieHwInfo2 & 0x9 == 0) && PSTV or PSTVEmu - 0x80 7
ErnieHwInfo2 & 0x9 != 0 - 0x100 8
(Model == 0x20110) && (ErnieHwInfo2 & 0x100 != 0) - 0x1000 12
(Model == 0x20110) && (ErnieHwInfo2 & 0x100 == 0) - & ~0x1000 UNSET 12
ErnieHwInfo2 & 0x200 != 0 - 0x2000 13

Used in SceCtrl, SceSdstor, SceUsbEtherRtl and SceVshBridge.

int sceKernelSysrootCheckModelCapabilityForDriver(int capability);

sceKernelSysrootGetSyscallFrameForDriver

Version NID
3.60-3.65 0x44EA3197
SceSyscallFrame *sceKernelSysrootGetSyscallFrameForDriver(void);

sceKernelSysrootRegisterInitCallbackForDriver

Version NID
0.990-3.60 0x778D0966
// idx: 0-8
// idx 8: func = ScePower/SceMsif functions
int sceKernelSysrootRegisterInitCallbackForDriver(const void *func, SceUInt32 idx, SceUInt32 arg, SceUInt32 *ret);

sceKernelSysrootInvokeInitCallbackForDriver

Version NID
0.990-3.60 0x93CD44CD
// idx: 0-8, 5: disable NSKBL, more...?
int sceKernelSysrootInvokeInitCallbackForDriver(int idx);

sceKernelSysrootInvokeInitCallbackExForDriver

Version NID
0.931-0.990 not present
0.990-3.60 0x7C2C10E2

This is a guessed name.

// idx: 0-8, 5: disable NSKBL, more...?
// unk: argument passed to the init callback
int sceKernelSysrootInvokeInitCallbackExForDriver(int idx, int unk);

SceKernelUtilsForDriver

sceAesDecrypt1ForDriver

Version NID
0.990-3.60 0xD8678061

Perform normal AES decrypt.

int sceAesDecrypt1ForDriver(void *ctx, const void *src, void *dst);

sceAesDecrypt2ForDriver

Version NID
3.60 0xE39CD272

Perform AES decrypt using encryption round key.

int sceAesDecrypt2ForDriver(void *ctx, const void *src, void *dst);

sceAesEncrypt1ForDriver

Version NID
0.990-3.60 0xC2A61770

Perform AES encrypt. There are two functions that are the same on 1.69.

int sceAesEncrypt1ForDriver(void *ctx, const void *src, void *dst);

sceAesEncrypt2ForDriver

Version NID
1.69-3.60 0x302947B6

Perform AES encrypt. Similar to sceAesEncrypt1ForDriver.

int sceAesEncrypt2ForDriver(void *ctx, const void *src, void *dst);

sceAesInit1ForDriver

Version NID
1.69-3.60 0xF12B6451

This sets up the AES engine. ctx is a 0x3C0 byte buffer (on FW 1.69). blocksize and keysize values are in bits. 128/196/256 are supported values.

last arg to subroutine is 0

int sceAesInit1ForDriver(void *ctx, int blocksize, int keysize, const void *key);

sceAesInit2ForDriver

Version NID
3.60 0xEDA97D6D

last arg to subroutine is 1

int sceAesInit2ForDriver(void *ctx, int blocksize, int keysize, const void *key);

sceAesInit3ForDriver

Version NID
3.60 0x72408E29

last arg to subroutine is 2

int sceAesInit3ForDriver(void *ctx, int blocksize, int keysize, const void *key);

SceKernelUtilsForDriver_C76A7685

Version NID
3.60 0xC76A7685

Looks like it relates to AES InvMixColumns.

SceKernelUtilsForDriver_60ED6EA9

Version NID
3.60 0x60ED6EA9

Equivalent to AES getSBox32Value

sceDeflateDecompressForDriver

Version NID
3.60 0x8AF1FAD4

sceDeflateDecompressPartialForDriver

Version NID
3.60 0x3D74CCDF

sceGzipDecompressForDriver

Version NID
3.60 0x367EE3DF

sceGzipGetCommentForDriver

Version NID
3.60 0xCD3AE08F

sceGzipGetCompressedDataForDriver

Version NID
3.60 0x63619124

sceGzipGetInfoForDriver

Version NID
3.60 0xFFC6A10F

sceGzipGetNameForDriver

Version NID
3.60 0xF901FD3E

sceGzipIsValidForDriver

Version NID
3.60 0xD8FAEFD4

sceHmacSha1DigestForDriver

Version NID
3.60 0x29A28957
int sceHmacSha1DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);

sceHmacSha224DigestForDriver

Version NID
3.60 0x7F2A7B99
int sceHmacSha224DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);

sceHmacSha256DigestForDriver

Version NID
3.60 0x83EFA1CC
int sceHmacSha256DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);

sceMt19937GlobalInitForDriver

Version NID
3.60 0xD428CC2A

cp_timestamp_2 is gotten from SceKblParam.

int sceMt19937GlobalInitForDriver(uint32_t cp_timestamp_2);

sceMt19937GlobalUIntInRangeForDriver

Version NID
0.990-3.60 0x875B2A1C

Temp name was sceMt19937GlobalUninitForDriver.

// Both the address and size must be aligned on four bytes.
int sceMt19937GlobalUIntInRangeForDriver(void *pBase, SceSize length);

sceMt19937InitForDriver

Version NID
3.60 0x4C9A5730

sceMt19937UIntForDriver

Version NID
3.60 0x92AEDFBC

sceSfmt19937FillArray32ForDriver

Version NID
3.60 0x2B30548B

sceSfmt19937FillArray64ForDriver

Version NID
3.60 0x49B41540

sceSfmt19937GenRand32ForDriver

Version NID
3.60 0xBBE4701A

sceSfmt19937GenRand64ForDriver

Version NID
3.60 0x45DEAAD6

sceSfmt19937InitByArrayForDriver

Version NID
3.60 0x33AE1203

sceSfmt19937InitGenRandForDriver

Version NID
3.60 0xAB48C3CA

sceSha1BlockInitForDriver

Version NID
3.60 0xE4390FFA
int sceSha1BlockInitForDriver(void* ctx);

sceSha1BlockResultForDriver

Version NID
3.60 0x48F24106
int sceSha1BlockResultForDriver(void* ctx, void *digest);

sceSha1BlockUpdateForDriver

Version NID
3.60 0x478A6F3C
int sceSha1BlockUpdateForDriver(void* ctx, const void *data, int size);

sceSha1DigestForDriver

Version NID
3.60 0x87DC7F2F
int sceSha1DigestForDriver(const void *data, int size, void *digest);

sceSha224BlockInitForDriver

Version NID
3.60 0xC762EA6D
int sceSha224BlockInitForDriver(void* ctx);

sceSha224BlockResultForDriver

Version NID
3.60 0xFBF2A442
int sceSha224BlockResultForDriver(void* ctx, void *digest);

sceSha224BlockUpdateForDriver

Version NID
3.60 0x7556E611
int sceSha224BlockUpdateForDriver(void* ctx, const void *data, int size);

sceSha224DigestForDriver

Version NID
3.60 0x9EA9D4DC
int sceSha224DigestForDriver(const void *data, int size, void *digest);

sceSha256BlockInitForDriver

Version NID
3.60 0xD909FA2C
int sceSha256BlockInitForDriver(void* ctx);

sceSha256BlockResultForDriver

Version NID
3.60 0x4899CD4B
int sceSha256BlockResultForDriver(void* ctx, void *digest);

sceSha256BlockUpdateForDriver

Version NID
3.60 0x236A9097
int sceSha256BlockUpdateForDriver(void* ctx, const void *data, int size);

sceSha256DigestForDriver

Version NID
0.931-3.60 0xA773A6A8
int sceSha256DigestForDriver(const void *data, SceSize size, void *digest);

sceZlibDecompressForDriver

Version NID
3.60 0x900148DB

sceZlibGetCompressedDataForDriver

Version NID
3.60 0x01EB6C45

sceZlibGetInfoForDriver

Version NID
3.60 0x5B9BCD75

sceXorshift128ForDriver

Version NID
0.990 not present
3.60 0x335AF34D

Similar implementation as xorshift128.

int sceXorshift128ForDriver(SceUInt32 *state);

SceKernelUtilsForDriver_B55C69B7

Version NID
3.60 0xB55C69B7

If buffer is full of zeroes, then each of the four dwords of buffer are set to 1. Always success and always return 0.

Used in SceProcessmgr.

int SceKernelUtilsForDriver_B55C69B7(SceUInt32 *buffer);

SceZlibForDriver

This library was moved to SceSblPostSsMgr#SceZlibForDriver on FW 1.800.071.

zlib compression library.

zlibVersion

Version NID
3.200.010 0x517BC5F7
const char *zlibVersion(void);

inflateInit

Version NID
3.200.010 0x81D0667B

This function have alias.

int inflateInit(SceZlibStream *strm, const char *version, int stream_size);

SceZlibForDriver_723495A5

Version NID
0.940-3.60 0x723495A5
int SceZlibForDriver_723495A5(SceZlibStream *strm, const char *version, int stream_size);

inflateInit2_

Version NID
3.200.010 0x0BDDF66A

This function have alias.

int inflateInit2_(SceZlibStream *strm, int windowBits, const char *version, int stream_size);

SceZlibForDriver_21A03034

Version NID
3.200.010 0x21A03034
int SceZlibForDriver_21A03034(SceZlibStream *strm, int windowBits, const char *version, int stream_size);

inflateInit_2

Version NID
3.200.010 0x44DA19D2

This function have alias.

int inflateInit_2(SceZlibStream *strm, const char *version, int stream_size);

SceZlibForDriver_B03E109B

Version NID
3.200.010 0xB03E109B
int SceZlibForDriver_B03E109B(SceZlibStream *strm, const char *version, int stream_size);

inflateInit2_2

Version NID
3.200.010 0xA1E7E8B3

This function have alias.

int inflateInit2_2(SceZlibStream *strm, int a2, const char *version, int stream_size);

SceZlibForDriver_AC2F8437

Version NID
3.200.010 0xAC2F8437
int SceZlibForDriver_AC2F8437(SceZlibStream *strm, int a2, const char *version, int stream_size);

inflate

Version NID
3.200.010 0xD4A85178

This function have alias.

int inflate(SceZlibStream *strm, int flush);

SceZlibForDriver_E4F34A68

Version NID
1.60-3.60 0xE4F34A68

inflateSetDictionary

Version NID
1.60-3.60 0x7B16DBD6

This function have alias.

int inflateSetDictionary(SceZlibStream *strm, const void *dictionary, int dictLength);

SceZlibForDriver_00561385

Version NID
3.200.010 0x00561385
int SceZlibForDriver_00561385(SceZlibStream *strm, const void *dictionary, int dictLength);

inflateEnd

Version NID
3.200.010 0x9030BAE4

This function have alias.

int inflateEnd(SceZlibStream *strm);

SceZlibForDriver_134E91EA

Version NID
3.200.010 0x134E91EA
int SceZlibForDriver_134E91EA(SceZlibStream *strm);

inflateCopy

Version NID
3.200.010 0x4C27A382

This function have alias.

int inflateCopy(SceZlibStream *dst, SceZlibStream *src);

SceZlibForDriver_89B30588

Version NID
3.200.010 0x89B30588
int SceZlibForDriver_89B30588(SceZlibStream *dst, SceZlibStream *src);

inflateSyncPoint

Version NID
3.200.010 0x4CB63BCD

This function have alias.

int inflateSyncPoint(SceZlibStream *strm);

SceZlibForDriver_834CC4A2

Version NID
3.200.010 0x834CC4A2
int SceZlibForDriver_834CC4A2(SceZlibStream *strm);

deflate

Version NID
1.60-3.60 0xE859D60F

This function have alias.

int deflate(SceZlibStream *strm, int flush);

SceZlibForDriver_5B718E55

Version NID
3.200.010-3.60 0x5B718E55

Used by SceCoredump.

int SceZlibForDriver_5B718E55(SceZlibStream *strm, int flush);

deflateReset

Version NID
1.60-3.60 0x68CFEA45

This function have alias.

This function could be deflateResetKeep.

int deflateReset(SceZlibStream *strm);

SceZlibForDriver_211D25F5

Version NID
3.200.010 0x211D25F5
int SceZlibForDriver_211D25F5(SceZlibStream *strm);

crc32

Version NID
1.60-3.60 0xE0CE06C0

This function have alias.

unsigned long crc32(unsigned long crc, const unsigned char *buf, z_size_t len);

SceZlibForDriver_3370B9AD

Version NID
3.200.010 0x3370B9AD
unsigned long SceZlibForDriver_3370B9AD(unsigned long crc, const unsigned char *buf, z_size_t len);

adler32

Version NID
1.60-3.60 0x98619620

This function have alias.

SceZlibForDriver_7E823337

Version NID
3.200.010 0x7E823337

deflateInit2_2

Version NID
3.60 0x20A122F8

May be an initialization function.

Used by SceCoredump.

This function have alias.

int deflateInit2_2(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);

SceZlibForDriver_BE5CE88A

Version NID
3.200.010 0xBE5CE88A
int SceZlibForDriver_BE5CE88A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);

deflateEnd

Version NID
3.60 0x5492B3F2

Used by SceCoredump.

This function have alias.

int deflateEnd(SceZlibStream *strm);

SceZlibForDriver_A5D70E95

Version NID
3.200.010 0xA5D70E95
int SceZlibForDriver_A5D70E95(SceZlibStream *strm);

deflateInit_

Version NID
3.60 0x25F28DA7

This function have alias.

int deflateInit_(SceZlibStream *strm, int level, const char *version, int stream_size);

SceZlibForDriver_520CAA7F

Version NID
3.200.010 0x520CAA7F
int SceZlibForDriver_520CAA7F(SceZlibStream *strm, int level, const char *version, int stream_size);

SceZlibForDriver_05F712FE

Version NID
3.200.010 0x05F712FE

This function have alias.

SceZlibForDriver_67A085C4

Version NID
3.200.010 0x67A085C4

SceZlibForDriver_0FA805A3

Version NID
3.200.010 0x0FA805A3

This function have alias.

int SceZlibForDriver_0FA805A3(SceZlibStream *strm, int a2, SceUInt16 a3);

SceZlibForDriver_1C344E27

Version NID
3.200.010 0x1C344E27
int SceZlibForDriver_1C344E27(SceZlibStream *strm, int a2, SceUInt16 a3);

deflateCopy

Version NID
3.200.010 0x1E135CC1

This function have alias.

int deflateCopy(SceZlibStream *dst, SceZlibStream *src);

SceZlibForDriver_3252D28C

Version NID
3.200.010 0x3252D28C
int SceZlibForDriver_3252D28C(SceZlibStream *dst, SceZlibStream *src);

SceZlibForDriver_35E0108C

Version NID
3.200.010 0x35E0108C

This function have alias.

int SceZlibForDriver_35E0108C(SceZlibStream *strm);

SceZlibForDriver_E2DF5A8B

Version NID
3.200.010 0xE2DF5A8B
int SceZlibForDriver_E2DF5A8B(SceZlibStream *strm);

zError

Version NID
3.200.010 0x3B4466F4

This function have alias.

const char *zError(int err);

SceZlibForDriver_3F33F55F

Version NID
3.200.010 0x3F33F55F
const char *SceZlibForDriver_3F33F55F(int err);

inflateReset

Version NID
3.200.010 0x408311E8

This function have alias.

int inflateReset(SceZlibStream *strm);

SceZlibForDriver_EEC6D267

Version NID
3.200.010 0xEEC6D267
int SceZlibForDriver_EEC6D267(SceZlibStream *strm);

SceZlibForDriver_4EE6C080

Version NID
3.200.010 0x4EE6C080

This function have alias.

SceZlibForDriver_93168F72

Version NID
3.200.010 0x93168F72

SceZlibForDriver_5377643A

Version NID
3.200.010 0x5377643A

This function have alias.

SceZlibForDriver_7C40CC39

Version NID
3.200.010 0x7C40CC39

deflateInit_2

Version NID
3.200.010 0x5A0078D6

This function have alias.

int deflateInit_2(SceZlibStream *strm, int level, const char *version, int stream_size);

SceZlibForDriver_AD23EEBB

Version NID
3.200.010 0xAD23EEBB
int SceZlibForDriver_AD23EEBB(SceZlibStream *strm, int level, const char *version, int stream_size);

SceZlibForDriver_6ED5B677

Version NID
3.200.010 0x6ED5B677

This function have alias.

SceZlibForDriver_7993ADAB

Version NID
3.200.010 0x7993ADAB

SceZlibForDriver_7048F14C

Version NID
3.200.010 0x7048F14C

This function have alias.

SceZlibForDriver_E323828B

Version NID
3.200.010 0xE323828B

SceZlibForDriver_82167CD9

Version NID
3.200.010 0x82167CD9

This function have alias.

SceZlibForDriver_E94663DD

Version NID
3.200.010 0xE94663DD

SceZlibForDriver_86FF6C8B

Version NID
3.200.010 0x86FF6C8B

This function have alias.

SceZlibForDriver_904AA7AE

Version NID
3.200.010 0x904AA7AE

SceZlibForDriver_89A13883

Version NID
3.200.010 0x89A13883

This function have alias.

SceZlibForDriver_D9BDC778

Version NID
3.200.010 0xD9BDC778

SceZlibForDriver_938F34FA

Version NID
3.200.010 0x938F34FA

This function have alias.

SceZlibForDriver_BC022D38

Version NID
3.200.010 0xBC022D38

deflateInit2_

Version NID
3.200.010 0xE6EB524C

This function have alias.

int deflateInit2_(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);

SceZlibForDriver_F2D8FC1A

Version NID
3.200.010 0xF2D8FC1A
int SceZlibForDriver_F2D8FC1A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);

SceKernelSuspendForDriver

Used to register handlers for handling suspend/resume related events.

sceKernelLockSuspendForDriver

Version NID
0.990.000-3.740.011 0x4DF40893

This is a guessed name.

Called in SceProcessmgr#sceKernelStartProcessForKernel and SceProcessmgr#sceKernelStartProcessExtForKernel just before starting a process.

Called just before NVS write.

int sceKernelLockSuspendForDriver(SceUInt32 a1);

sceKernelUnlockSuspendForDriver

Version NID
0.990.000-3.740.011 0x2BB92967

This is a guessed name.

Called in SceProcessmgr#sceKernelStartProcessForKernel and SceProcessmgr#sceKernelStartProcessExtForKernel just after starting a process.

Called just after NVS write.

int sceKernelUnlockSuspendForDriver(SceUInt32 a1);

sceKernelLockSuspendProcForDriver

Version NID
0.931-3.740.011 0x254525F8

This is a guessed name.

Temp name was sceKernelPowerLockForDriver.

Used in SceProcessmgr#sceKernelPowerLock.

int sceKernelPowerLockForDriver(SceUInt32 a1);

sceKernelUnlockSuspendProcForDriver

Version NID
0.931-3.740.011 0x230495ED

This is a guessed name.

Temp name was sceKernelPowerUnlockForDriver.

Used in SceProcessmgr#sceKernelPowerUnlock.

int sceKernelPowerUnlockForDriver(SceUInt32 a1);

SceKernelSuspendForDriver_FE2118BD

Version NID
0.990.000-3.740.011 0xFE2118BD

sceKernelPowerSetIdleCallbackForDriver

Version NID
0.990.000-3.740.011 0xE677B343

This is guessed name.

SceKernelSuspendForDriver_B4B13615

Version NID
0.990.000-3.740.011 0xB4B13615

SceKernelSuspendForDriver_AEA9440D

Version NID
0.990.000-3.740.011 0xAEA9440D

SceKernelSuspendForDriver_81D9E41C

Version NID
0.990.000-3.740.011 0x81D9E41C

SceKernelSuspendForDriver_6A503956

Version NID
0.990.000-3.740.011 0x6A503956

SceKernelSuspendForDriver_250ACD90

Version NID
0.990.000-3.740.011 0x250ACD90
int SceKernelSuspendForDriver_250ACD90(const SceKernelSuspendPowerCallback *pPowerCallback);

SceKernelSuspendForDriver_0A6CA124

Version NID
0.990.000-3.740.011 0x0A6CA124

SceKernelSuspendForDriver_0106C0F0

Version NID
0.990.000-3.740.011 0x0106C0F0

sceKernelRegisterSysEventHandlerForDriver

Version NID
0.990.000-3.740.011 0x04C05D10

Temp name was sceKernelSuspendRegisterCallbackForDriver.

Registers a function for handling suspend/resume. resume is 0 if we are currently suspending and 1 if we are currently resuming. opt is passed from the registration. Registration adds an entry to a linked list and returns the block id for the new entry.

Returns the suspend_handler_id.

typedef int (* SceKernelSysEventHandler)(int resume, int event, void *param, void *argp);

SceUID sceKernelRegisterSysEventHandlerForDriver(const char *name, SceKernelSysEventHandler handler, void *argp);

SceKernelSuspendForDriver_CE7A2207

Version NID
0.990.000-3.740.011 0xCE7A2207

Registers a handler for a suspend event.

// idx: ex: 0x15
// args: can be 0
SceUID SceKernelSuspendForDriver_CE7A2207(SceUInt idx, void *handler, void *args);

SceKernelSuspendForDriver_105C5752

Version NID
0.990.000-3.740.011 0x105C5752

Registers a handler for a resume event.

// idx: ex: 0x15
// args: can be 0
SceUID SceKernelSuspendForDriver_105C5752(SceUInt idx, void *handler, void *args);

SceKernelSuspendForDriver_D4958E6F

Version NID
0.990.000-3.740.011 0xD4958E6F

Dispatch handler registered by #SceKernelSuspendForDriver_CE7A2207.

SceUID SceKernelSuspendForDriver_D4958E6F(void *args);

sceKernelUnregisterSysEventHandlerForDriver

Version NID
0.990.000-3.740.011 0xDD61D621

Call with the id returned from suspend_register_handler to remove the entry from the linked list and free the memory.

int sceKernelUnregisterSysEventHandlerForDriver(SceUID id);

sceKernelSysEventDispatchForDriver

Version NID
0.990.000-3.740.011 0xD4622EA8

This function goes through the linked list and calls each handler. If ppFailed is set, then the first handler that returns a negative value stops the call chain and returns the block id of the handler that broke the chain. Otherwise, this function invokes each handler and returns 0.

typedef struct _SceKernelSysEventDispatchSuspendParam {
	SceSize size;
	SceUInt32 unk_0x04;
	SceUInt32 unk_0x08;
	SceUInt32 unk_0x0C;
	void *pSuspendContextBuffer;
	SceUInt32 unk_0x14;
} SceKernelSysEventDispatchSuspendParam;

typedef struct _SceKernelSysEventDispatchResumeParam {
	SceSize size;
	SceUInt32 unk_0x04;
} SceKernelSysEventDispatchResumeParam;

int sceKernelSysEventDispatchForDriver(SceUInt32 resume, SceUInt32 eventid, void *param, void **ppFailed);

sceKernelPowerTickForDriver

Version NID
0.990.000-3.740.011 0xE0489831

Cancel specified idle timers to prevent entering in power save processing.

Returns 0 on success.

typedef enum SceKernelPowerTickType {
	/** Cancel all timers */
	SCE_KERNEL_POWER_TICK_DEFAULT			= 0,
	/** Cancel automatic suspension timer */
	SCE_KERNEL_POWER_TICK_DISABLE_AUTO_SUSPEND	= 1,
	/** Cancel OLED-off timer */
	SCE_KERNEL_POWER_TICK_DISABLE_OLED_OFF		= 4,
	/** Cancel OLED dimming timer */
	SCE_KERNEL_POWER_TICK_DISABLE_OLED_DIMMING	= 6
} SceKernelPowerTickType;

int sceKernelPowerTickForDriver(int type);

SceKernelSuspendForDriver_1FA2F8F1

Version NID
1.000.071-3.740.011 0x1FA2F8F1

Calls a power handler.

int SceKernelSuspendForDriver_1FA2F8F1(int a1, int a2);

SceKernelSuspendForDriver_F2B07167

Version NID
2.100.081-3.740.011 0xF2B07167

Registers a global variable used by #sceKernelPowerTickForDriver.

int SceKernelSuspendForDriver_F2B07167(int a1);

SceKernelSuspendForDriver_B5C58EE8

Version NID
2.100.081-3.740.011 0xB5C58EE8

Registers a global variable used by #sceKernelSysEventDispatchForDriver.

int SceKernelSuspendForDriver_B5C58EE8(int a1);

SceKernelSuspendForDriver_D6124071

Version NID
2.100.081-3.740.011 0xD6124071

Registers a global variable used by #sceKernelSysEventDispatchForDriver.

int SceKernelSuspendForDriver_D6124071(int a1);

SceKernelSuspendForDriver_0DE3CC02

Version NID
2.100.081-3.740.011 0x0DE3CC02

Registers a global variable used by #SceKernelSuspendForDriver_2BB92967.

int SceKernelSuspendForDriver_0DE3CC02(int a1);

SceKernelSuspendForDriver_4E5A3A23

Version NID
2.100.081-3.740.011 0x4E5A3A23

Registers a global variable used by #SceKernelSuspendForDriver_4DF40893.

int SceKernelSuspendForDriver_4E5A3A23(int a1);

SceKernelSuspendForDriver_C00826AC

Version NID
2.100.081-3.740.011 0xC00826AC

Registers a global variable used by #SceKernelSuspendForDriver_4DF40893.

int SceKernelSuspendForDriver_C00826AC(int a1);

SceKernelSuspendForDriver_8B3F02B8

Version NID
2.100.081-3.740.011 0x8B3F02B8

Registers a global variable used by #SceKernelSuspendForDriver_1FA2F8F1.

int SceKernelSuspendForDriver_8B3F02B8(int a1);

SceQafMgrForDriver

Provides many device permission checks including running app privilege checks, debugging enabled checks, and so on.

SceQafMgrForDriver_41E04800

Version NID
0.931 0x4F20A014
3.60 not present

SceQafMgrForDriver_082A4FC2

Version NID
0.931-3.60 0x082A4FC2

Temp name was sceSblQafMgrIsAllowHost0AccessForDriver. A potential name could be sceSblQafMgrIsAllowRemoteLoadForDriver.

Used by sceSblFwLoaderLockForDriver, SceKernelModulemgr, SceSysStateMgr and SceSblPostSsMgr.

Used by sceSblSpsfoMgrOpenForDriver.

When this flag is set, it allows for example to load some files from host0:, for example SPSFO and psp2config.skprx.

// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_082A4FC2(void);

sceSblQafMgrIsAllowGameDebugForDriver

Version NID
0.931-3.60 0x694D1096

This is a guessed name.

Only used by SceSblACMgr.

Might be something like sceSblQafMgrIsAllowUserAppDebug.

// (*(uint8_t *)(qaf + 0xB) & 4)
int sceSblQafMgrIsAllowGameDebugForDriver(void);

SceQafMgrForDriver_0E588747

Version NID
0.931-3.60 0x0E588747

Only used by SceRegistryMgr.

Returns true if the PSVita is an "Internal system".

// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_0E588747(void);

SceSblQafMgrForDriver_4BC1883F

Version NID
0.931-3.60 0x4BC1883F

Like a sceSblQafMgrIsAllowPSPEmuDevelopmentForDriver.

// (*(uint8_t *)(qaf + 0x6) & 2)
int SceSblQafMgrForDriver_4BC1883F(void);

sceSblQafMgrIsAllowSystemAppDebugForDriver

Version NID
0.931-3.60 0xCAD47130

Used by SceDeci4pDtracep and SceSblACMgr.

If it returns false, syscalls debug trace printf is disabled.

// (*(uint8_t *)(qaf + 0xD) & 2)
int sceSblQafMgrIsAllowSystemAppDebugForDriver(void);

sceSblQafMgrIsAllowKernelDebugForDriver

Version NID
0.931-3.60 0x382C71E8

Used by SceKernelModulemgr, SceExcpmgr, SceCrashDump, SceHdmi, SceKernelBlueScreenOfDeath.

// (*(uint8_t *)(qaf + 0xD) & 1)
int sceSblQafMgrIsAllowKernelDebugForDriver(void);

sceSblQafMgrIsAllowQAUpdateForDriver

Version NID
0.931-3.60 0x3CB55F98

Only used by SceSblUpdateMgr.

// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowQAUpdateForDriver(void);

sceSblQafMgrIsAllowForceUpdateForDriver

Version NID
0.931-3.60 0x8C423C18

Only used by SceSblUpdateMgr.

// (*(uint8_t *)(qaf + 0xF) & 2)
int sceSblQafMgrIsAllowForceUpdateForDriver(void);

SceQafMgrForDriver_52B4E164

Version NID
0.931-3.60 0x52B4E164

Only used by SceWlanBt and SceEnumWakeUp.

// (*(uint8_t *)(qaf + 0xD) & 1)
int SceQafMgrForDriver_52B4E164(void);

SceQafMgrForDriver_883E9465

Version NID
0.931-3.60 0x883E9465

Temp name was sceSblQafMgrIsAllowDecryptedBootConfigLoadForDriver.

Used by SceSysStateMgr only.

Allows loading psp2config.skprx as plaintext format.

// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_883E9465(void);

SceQafMgrForDriver_B9770A13

Version NID
0.931-3.60 0xB9770A13

Needed to be enabled to work with DIPSW 251 (Enable "dummytty0:"). Needed by SceSysStateMgr to allow loading host0:psp2config.rpath.

Used by SceKernelModulemgr and SceSysmodule.

// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_B9770A13(void);

sceSblQafMgrIsAllowRemotePlayDebugForDriver

Version NID
0.931-3.60 0xBFD5E463
// (*(uint8_t *)(qaf + 0xC) & 2)
int sceSblQafMgrIsAllowRemotePlayDebugForDriver(void);

SceQafMgrForDriver_E573F124

Version NID
0.931-3.60 0xE573F124
// (*(uint8_t *)(qaf + 0x0) & 0x10)
int SceQafMgrForDriver_E573F124(void);

sceSblQafMgrIsAllowMarlinTestForDriver

Version NID
1.03-3.60 0x10283EB8
// (*(uint8_t *)(qaf + 0xD) & 2)
int sceSblQafMgrIsAllowMarlinTestForDriver(void);

sceSblQafMgrIsAllowNearTestForDriver

Version NID
1.03-3.60 0x9644171D
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowNearTestForDriver(void);

SceQafMgrForDriver_AE033133

Version NID
3.60 0xAE033133

Only used by SceNpDrm.

// (*(uint8_t *)(qaf + 0x0) & 0x10)
int SceQafMgrForDriver_AE033133(void);

SceQafMgrForDriver_DEC6DF4E

Version NID
3.60 0xDEC6DF4E

Only used by SceNpDrm.

// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_DEC6DF4E(void);

sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver

Version NID
3.60 0xB7B195B2
// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver(void);

sceSblQafMgrIsAllowLoadMagicGateForDriver

Version NID
3.60 0x36E5312E
// (*(uint8_t *)(qaf + 0xB) & 0x10)
int sceSblQafMgrIsAllowLoadMagicGateForDriver(void);

sceSblQafMgrIsAllowDtcpIpResetForDriver

Version NID
3.60 0xE8B8F31F
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowDtcpIpResetForDriver(void);

sceSblQafMgrIsAllowControlIduAutoUpdateForDriver

Version NID
3.60 0xF8BFEE48
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowControlIduAutoUpdateForDriver(void);

sceSblQafMgrIsAllowKeepCoreFileForDriver

Version NID
3.60 0xC1EA75C8
// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowKeepCoreFileForDriver(void);

SceQafMgrForDriver_70A67A4B

Version NID
3.60 0x70A67A4B
// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_70A67A4B(void);

SceQafMgrForDriver_41E04800

Version NID
3.60 0x41E04800

Only used by SceAppMgr.

// (*(uint8_t *)(qaf + 0xB) & 4)
int SceQafMgrForDriver_41E04800(void);

SceQafMgrForDriver_7B14DC45

Version NID
3.60 0x7B14DC45

Only used by SceAppMgr.

// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_7B14DC45(void);

ScePmMgrForDriver

scePmMgrGetProductModeForDriver

Version NID
0.931-3.60 0x2AC815A2

Returns 0 on success, 0x800f0a29 on failure.

Gets kbl_param using sceKernelSysrootGetKblParamForKernel.

result = ((int *)(kbl_param->boot_type_indicator_1) >> 2) & 1; // manufacturing mode flag

int scePmMgrGetProductModeForDriver(char* result);

scePmMgrIsExternalBootModeForDriver

Version NID
3.60 0xBD1F193B

Gets kbl_param using sceKernelSysrootGetKblParamForKernel.

return (int *)(kbl_param->boot_type_indicator_1) & 1; // external boot mode flag

int scePmMgrIsExternalBootModeForDriver(void);

SceSblAIMgrForDriver

sceSblAIMgrGetSMIForDriver

Version NID
3.60 0x47D9CF13

SMI means Service / Manufacturing Information.

SMI is read from SceKblParam->min_fw_version.

int sceSblAIMgrGetSMIForDriver(SceUInt32 *pSMI);

sceSblAIMgrGetProductCodeForDriver

Version NID
3.60 0x14345161

Temp name was sceSblAIMgrGetTargetIdForDriver.

Product Code = Target Id

int sceSblAIMgrGetProductCodeForDriver(void);

sceSblAIMgrGetProductSubCodeForDriver

Version NID
3.60 0xB33CEC8F

Product Sub Code = model revision

int sceSblAIMgrGetProductSubCodeForDriver(void);

sceSblAIMgrIsTestForDriver

Version NID
3.60 0x3B638885

TEST = Internal Test Unit

Returns true if PsCode Product Code == 0x100.

int sceSblAIMgrIsTestForDriver(void);

sceSblAIMgrIsToolForDriver

Version NID
3.60 0x274663A0

TOOL = DevKit

Returns true if PsCode Product Code == 0x101.

int sceSblAIMgrIsToolForDriver(void);

sceSblAIMgrIsDEXForDriver

Version NID
3.60 0xF4B98F66

Returns true if PsCode Product Code == 0x102.

int sceSblAIMgrIsDEXForDriver(void);

sceSblAIMgrIsCEXForDriver

Version NID
3.60 0xD78B04A2

Returns true if PsCode Product Code 0x103-0x111 AND sceSblAIMgrIsSpecialCEXForDriver returns false.

int sceSblAIMgrIsCEXForDriver(void);

sceSblAIMgrIsVITAForDriver

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0x4273B97B

Returns sceSblAIMgrIsGenuineVITAForDriver. If the console is a PS TV, it returns false.

int sceSblAIMgrIsVITAForDriver(void);

sceSblAIMgrIsDolceForDriver

Version NID
0.931.010-2.060.011 not present
2.100.081-3.740.011 0x71608CA3

Returns sceSblAIMgrIsGenuineDolceForDriver if returns true else returns sceKernelCheckDipswForDriver(0x98).

int sceSblAIMgrIsDolceForDriver(void);

sceSblAIMgrIsGenuineVITAForDriver

Version NID
3.60 0x963CA644

Returns true if:

  • PsCode Product Code <= 0x111 AND sceSblAIMgrIsGenuineDolceForDriver returns false
  • sceSblAIMgrIsSpecialCEXForDriver returns true AND HardwareInfo != 0x700000 != 0x720000 != 0x510000
int sceSblAIMgrIsGenuineVITAForDriver(void);

sceSblAIMgrIsGenuineDolceForDriver

Version NID
3.60 0xC6E83F34
int sceSblAIMgrIsGenuineDolceForDriver(void);

sceSblAIMgrIsDiagForDriver

Version NID
3.60 0x6D5A3FC9

Temp name was sceSblAIMgrIsSpecialCEXForDriver, sceSblAIMgrIsCEXJpFatForDriver.

Returns true if PsCode Product Code == 0x103 (Japan), PsCode Product Sub Code == 0x10 (FAT chassis) and PsCode Factory Code == 0x24 (SCE labs).

int sceSblAIMgrIsDiagForDriver(void);

sceSblAIMgrIsToolDVT1ForDriver

Version NID
0.931-3.60 0xBB9D146B

Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 3.

int sceSblAIMgrIsToolDVT1ForDriver(void);

sceSblAIMgrIsToolRev4ForDriver

Version NID
3.60 0x37A79140

Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 4.

int sceSblAIMgrIsToolRev4ForDriver(void);

sceSblAIMgrIsToolDVT2ForDriver

Version NID
3.60 0xE5E47FF7

Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 5.

int sceSblAIMgrIsToolDVT2ForDriver(void);

sceSblAIMgrIsCEXPrototypeRev2ForDriver

Version NID
3.60 0xFF5784B9

Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 2.

int sceSblAIMgrIsCEXPrototypeRev2ForDriver(void);

sceSblAIMgrIsCEXPrototypeRev7ForDriver

Version NID
3.60 0x05F79D4A

Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 7.

int sceSblAIMgrIsCEXPrototypeRev7ForDriver(void);

SceProcEventForDriver

sceKernelUnregisterProcEventHandlerForDriver

Version NID
3.60 0x3DED57CC

Temp name was sceProcEventDeleteUidForDriver.

Wrapper to sceGUIDCloseForDriver.

int sceKernelUnregisterProcEventHandlerForDriver(int uid);

sceKernelRegisterProcEventHandlerForDriver

Version NID
0.990-3.60 0x2A43912D

Temp name was sceProcEventCreateEventForDriver.

Uses sceKernelCreateEventForDriver.

Returns uid.

typedef struct SceProcEventInvokeParam1 {
	SceSize size;                                     // SceProcEventInvokeParam1 struct size : 0x10
	int unk_0x04;
	int unk_0x08;
	int unk_0x0C;
} SceProcEventInvokeParam1;

typedef struct SceProcEventInvokeParam2 {
	SceSize size;                                     // SceProcEventInvokeParam2 struct size : 0x14
	SceUID pid;
	int unk_0x08;
	int unk_0x0C;
	int unk_0x10;
} SceProcEventInvokeParam2;

typedef struct SceProcEventHandler {
	SceSize size;                                                                               // SceProcEventHandler struct size : 0x1C
	int (* create)(SceUID pid, SceProcEventInvokeParam2 *pParam, void *pCommon);
	int (* exit)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon);                             // current process exit
	int (* kill)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon);                             // by SceShell
	int (* suspend)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);
	int (* resume)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);
	int (* event_notify)(int evtype, int phase, SceProcEventInvokeParam2 *pParam, void *pCommon);          //for arbitrary event types
} SceProcEventHandler;

/***
 * Registers a process event handler
 *
 * @param[in] name     - Name of the event handler
 * @param[in] pHandler - Pointer to the handler structure
 * @param[in] pCommon  - Arbitrary data passed to handlers
 *
 * @return Positive on success, < 0 on error.
 * @note Event handler pointers in pHandler may be NULL.
*/
SceUID sceKernelRegisterProcEventHandlerForDriver(const char *name, SceProcEventHandler *pHandler, void *pCommon);

sceKernelInvokeProcEventHandlerForDriver

Version NID
3.60 0x414CC813

Walks the list of registered process event handlers and invokes the ones related to the signaled event.

//Event type constants (for evtype parameter)
#define CREATE_EVENT  1   //<! Call create() handlers
#define EXIT_EVENT    2   //<! Call exit() handlers
#define KILL_EVENT    3   //<! Call kill() handlers
#define SUSPEND_EVENT 4   //<! Call suspend() handlers
#define RESUME_EVENT  5   //<! Call resume() handlers
//All other values result in event_notify() handlers being called

/***
 * Invoke process event handlers
 *
 * @param[in]  process - PID of the process for which event happened
 * @param[in]  evtype  - Event type
 * @param[in]  phase   - Unknown
 * @param[in]  pParam  - Pointer to handler parameter
 * @param[out] pFailer - Pointer to a variable that receives UID of a failing handler. May be NULL.
 * @param[in]  stop    - GUID of a handler that should stop execution
 *
 * @return Positive number on success, < 0 on error. 
 * Corresponds to the last executed handler's return value (or SCE_OK if none were executed).
 *
 * @note process, pFailer and stop are unofficial argument names
 *
 * Invocation is performed by walking the list in order (from first to last registered handler):
 *  - If the GUID of the handler matches the "stop" parameter, the handle is NOT executed and the function returns.
 *    This can be used to ensure only process event handlers registered before a specific one are executed.
 *  - If the handler has no function pointer corresponding to the evtype, execution continues with the next handler.
 *  - If the handler has a function pointer corresponding to the evtype, the function is called with the appropriate
 *    arguments. If the return value is positive, execution continues with the next handler. If the return value is
 *    negative, the handler has failed, the GUID of the failing handler is saved in *pFailer if non-NULL and the function
 *    returns directly.
*/
int sceKernelInvokeProcEventHandlerForDriver(ScePID pid, int evtype, int phase, void* pParam, SceUID *pFailer, SceUID stop);

SceDebugLed

sceKernelGetGPI

Version NID
3.60 0x14F582CF
int sceKernelGetGPI(void);

sceKernelSetGPO

Version NID
3.60 0x78E702D3
/**
 * @brief Output to LED
 *
 * This sets the content displayed on the DevKit LED.
 * @param[in]	uiBitd	Bit pattern. only low-order 8 bits are valid.
 */
int sceKernelSetGPO(SceUInt32 uiBits);

call_cb74

Version NID
3.60 0x2B6EABAD
void call_cb74(int a1, int a2, int a3, int a4);

call_cb78

Version NID
3.60 0x0E6B9890
void call_cb78(int a1, int a2, int a3, int a4);

SceDebugLedForDriver

GPI stands for General Purpose Input, and GPO stands for General Purpose Output.

sceKernelGetGPIForDriver

Version NID
3.60 0x14F582CF

Only SceDebugLedForDriver function used by SceCoredump.

int sceKernelGetGPIForDriver(void);

sceKernelSetGPIForDriver

Version NID
3.60 0x51C5325A
int sceKernelSetGPIForDriver(int value);

sceKernelGetGPOForDriver

Version NID
3.60 0x3BB289F7
int sceKernelGetGPOForDriver(void);

sceKernelSetGPOForDriver

Version NID
3.60 0x78E702D3
int sceKernelSetGPOForDriver(SceUInt32 uiBits);

sceKernelSetGPOMaskForDriver

Version NID
3.60 0x098473B0
sceKernelSetGPOMaskForDriver(int a1, int a2);

call_cb74

Version NID
3.60 0x2B6EABAD
void call_cb74(int a1, int a2, int a3, int a4);

set_cb74

Version NID
3.60 0x24173819
int set_cb74(void *cb);

call_cb78

Version NID
3.60 0x0E6B9890
void call_cb78(int a1, int a2, int a3, int a4);

set_cb78

Version NID
3.60 0xF62154E7
int set_cb78(void *cb);

SceDebugForKernel

sceKernelDebugModuleStart2ForKernel

Version NID
0.931-3.60 0xF624CE22
int sceKernelDebugModuleStart2ForKernel(void);

sceKernelRegisterKprintfHandlerForKernel

Version NID
0.931-3.60 0x10067B7B

Temp name was sceDebugSetHandlersForKernel.

int sceKernelRegisterKprintfHandlerForKernel(int (* handler)(int unk, const char *format, va_list args), void *argp);

sceKernelGetDebugPutcharHandlerForKernel

Version NID
3.60 0xE783518C

This is guessed name.

Temp name was sceDebugGetPutcharHandlerForKernel, sceKernelGetDebugPutcharForKernel.

Returns pointer to current debug putchar handler.

void *sceKernelGetDebugPutcharHandlerForKernel(void);

sceKernelRegisterDebugPutcharHandlerForKernel

Version NID
3.60 0xE6115A72

Temp name was sceDebugRegisterPutcharHandlerForKernel, sceKernelRegisterDebugPutcharForKernel.

Set debug print char handler.

int sceKernelRegisterDebugPutcharHandlerForKernel(int (* handler)(void *args, char c), void *args);

sceKernelDebugPutcharForKernel

Version NID
0.931-3.60 0x82D2EDCE

Temp name was sceDebugPutcharForKernel.

Print character to uart.

Return 1.

int sceKernelDebugPutcharForKernel(char c);

sceKernelTtyPutcharForKernel

Version NID
0.931-0.990 not present
3.60 0x254A4997

This is a guessed name.

Prints a character to the 0x1000-byte buffer returned by SceSysmem#sceKernelGetTtyInfoForDriver.

On success, returns printed size (always 1).

int sceKernelTtyPutcharForKernel(char c);

sceKernelStoppedForKernel

Version NID
0.931-0.990 0xF1F0C365
3.60 not present
int sceKernelStoppedForKernel(const char *pFile, const char *pFunc, int line);

panic_on_kernel_exception

Version NID
0.931 not present
3.60 0x082B8D6A
3.65 0xCCABDD98

Prints information about a Kernel Exception, ?and certainly calls SceCoredump?, then calls SceSysrootForKernel_0DF574A9 in an infinite loop.

This function doesn't return.

See SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel for the meaning of excpcode.

// excp_name can be:
// UNDEF - Undefined instruction
// PABT - Prefetch Abort
// DABT - Data Abort
// NEST - Nested? Same excpcode as UNDEF
void panic_on_kernel_exception(SceKernelDebugInfo *dbginfo, SceExcpmgrExceptionContext *excp_ctx, int excpcode, const char *excp_name);

register_unk_handler

Version NID
0.931 not present
3.60 0x66D82EC8

used by SceDeci4pSDbgp.

handler definition:

handler(int some_level, void *unk, const void *buf);
int register_unk_handler(void *handler);

sceKernelEnableCrashDumpForKernel

Version NID
0.931.010-1.81 not present
2.000.081-3.610.011 0xF857CDD6
3.630.011-3.740.011 0xA465A31A

This is a guessed name. Temp name was sceDebugDisableInfoDumpForKernel, sceKernelEnableInfoDumpForKernel.

Returns previous crash dump state.

int sceKernelEnableCrashDumpForKernel(SceBool enable);

register_log_buffer

Version NID
0.931 0x4703ECC4
3.60 not present
int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);

start_logging

Version NID
0.931 0x4C377B11
3.60 not present

Returns 1 if logging has been started successfully, -1 else.

int start_logging(int state);

stop_logging

Version NID
0.931 0x604F56AE
3.60 not present

If state is not zero, stops logging and return 1, else does nothing and return 0.

Returns 1 if logging has been stopped, 0 else.

int stop_logging(void);

refresh_logs

Version NID
0.931 0x04A3046D
3.60 not present
int refresh_logs(void);

_sceKernelPrintDebugLogForKernel

Version NID
0.931 0xEFDE973B
3.60 not present

If a2 is not zero, the current log buffer address is updated, else it is unchanged.

maxNum is guessed to be either the number of entries or the index of the chosen entry. Entry size is 0x40 bytes.

Uses sceKernelPrintfLevelForDriver to print.

int _sceKernelPrintDebugLogForKernel(int a1, int a2, int maxNum);

sceKernelPrintDebugLogForKernel

Version NID
0.931 0xBD5D0BB0
3.60 not present

Calls _sceKernelPrintDebugLogForKernel with maxNum = (log_buf_end - log_buf_start) / 0x40.

int sceKernelPrintDebugLogForKernel(int a1, int a2);

print_with_log_buffer

Version NID
0.931 0x904FF72D
3.60 not present
int print_with_log_buffer(const char *string, SceSize maxlen);

sceKernelPrintfCore0ForKernel

Version NID
0.931 0x2D7380FE
3.60 not present

Same as sceKernelPrintfForDriver but only prints if CPU ID is 0.

int sceKernelPrintfCore0ForKernel(const char *fmt, ...);

sceKernelPrintfLevelCore0ForKernel

Version NID
0.931 0x14241F51
3.60 not present

Same as sceKernelPrintfLevelForDriver but only prints if CPU ID is 0.

int sceKernelPrintfLevelCore0ForKernel(int level, const char *fmt, ...);

sceKernelSetDebugLevelForKernel

Version NID
0.931-3.60 0xBE2C05A2

Temp name was sceKernelSetMinimumLogLevelForKernel.

SceUInt32 sceKernelSetDebugLevelForKernel(SceUInt32 dbgLevel);

sceKernelGetDebugLevelForKernel

Version NID
0.931 0xDA6B6770
3.60 not present

Temp name was sceKernelGetMinimumLogLevelForKernel.

Returns the dbgLevel set by sceKernelSetDebugLevelForKernel.

SceUInt32 sceKernelGetDebugLevelForKernel(void);

sceKernelSetAssertLevelForKernel

Version NID
0.931-3.60 0xCE9060F1

Temp name was sceKernelSetMinimumAssertionLevelForKernel.

Overrides in memory g_assertLevel set by DIP switches 201 and 202.

Returns the previous assert level.

SceInt32 sceKernelSetAssertLevelForKernel(SceUInt32 assertLevel);

sceKernelGetAssertLevelForKernel

Version NID
0.931 0x374B7868
0.990-3.60 not present. Present in #SceDebugForDriver.

Temp name was sceKernelGetMinimumAssertionLevelForKernel.

Returns g_assertLevel from memory.

SceInt32 sceKernelGetAssertLevelForKernel(void);

SceDebugForKernel_BEF921A2

Version NID
0.931 not present
3.60-3.61 0xBEF921A2
3.63 0x5D6F0CFC
// buf size is 0x1000 bytes
// buf_400 size is 0x400 bytes
SceSSize SceDebugForKernel_BEF921A2(void *dst, int cpuId, SceUInt64 time, SceKernelDebugInfo *dbginfo, const void *excp_info_buf_0x400, int excpcode);

add_entry

Version NID
0.931-0.990 0x1208240D
3.60 not present
// ex: add_entry(0xA1, in_lr, 3, name); in SceSysmem
// ex: add_entry(0xAB, in_lr, 1, uid); in SceSysmem
// ex: add_entry(0xBB, in_lr, 0, param_4); in SceProcessmgr
int add_entry(SceSize maxlen, int a2, int a3, void *log_buffer_start);

add_entry2

Version NID
0.931 0x061A4657
3.60 not present
int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);

sceDebugRegisterBacktraceInternalForKernel

Version NID
0.931-3.610.011 0xEFF9962B
3.630.011-3.740.011 0x91E7D24F

This is a guessed name.

Registers a callback for SceKernelModulemgr#sceKernelBacktraceInternalForDriver.

If callback runs successfully (returns >= 0), value of pNumReturn is used as third argument of PrintBacktrace, else PrintBacktrace is not called at all.

int sceDebugRegisterBacktraceInternalForKernel(int (* callback)(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode));

sceDebugRegisterPrintBacktraceForKernel

Version NID
0.931-3.60 0xB5943011

This is a guessed name.

Registers a callback for SceKernelModulemgr#sceKernelPrintBacktraceForDriver.

int sceDebugRegisterPrintBacktraceForKernel(int (* callback)(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames));

sceKernelPrintSyscallFrameForKernel

Version NID
3.60 0x25E31E18
3.65 0xBCC8D0B2
// if pSyscallFrame is NULL, it will use the current syscall frame
// pResult is a pointer to a 0x10 bytes buffer and may be NULL
void sceKernelPrintSyscallFrameForKernel(SceUID pid, SceSyscallFrame *pSyscallFrame, SceUInt32 *pResult);

SceDebugForKernel_F1F861CF

Version NID
2.00-3.60 0xF1F861CF

Registers a callback that is called when a crash occur.

Used by SceKernelBlueScreenOfDeath.

int SceDebugForKernel_F1F861CF(void *cb);

SceDebugForKernel_1526DD83

Version NID
3.20 0x1526DD83

Register sceEventLogPutForDriver internal callback.

SceDebugForDriver

If AllowKernelDebug QA flag is not set, calls to functions with non-zero SceKernelDebugLevel are ignored.

sceKernelPrintfForDriver

Version NID
0.931-3.60 0x391B74B7

Temp name was sceDebugPrintfForDriver.

int sceKernelPrintfForDriver(const char *fmt, ...);

sceKernelVprintfForDriver

Version NID
0.931-3.60 0x411C0733
int sceKernelVprintfForDriver(const char *fmt, va_list arg);

sceKernelPrintfLevelForDriver

Version NID
0.931-3.60 0x1A3F2AA4
int sceKernelPrintfLevelForDriver(SceUInt32 level, const char *fmt, ...);

sceKernelVprintfLevelForDriver

Version NID
0.931-0.990 not present
3.60 0x611A158B
int sceKernelVprintfLevelForDriver(SceUInt32 level, const char *fmt, va_list arg);

sceKernelPrintfLevelWithInfoForDriver

Version NID
0.931-0.990 not present
3.60 0xD9703808

This is a guessed name.

Temp name was sceKernelPrintfLevelWithCtxForDriver.

int sceKernelPrintfLevelWithInfoForDriver(SceUInt32 level, int flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);

sceKernelPrintfWithInfoForDriver

Version NID
0.931-0.990 not present
3.60 0x02B04343

This is a guessed name.

Temp name was sceDebugPrintf2ForDriver, sceKernelVprintfLevelWithCtxForDriver.

int sceKernelPrintfWithInfoForDriver(SceUInt32 flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);

sceKernelAssertForDriver

Version NID
0.931-3.60 0x35A35322

Temp name was sceDebugPrintKernelAssertionForDriver.

Condition 0 can trigger "kernel stopped".

// 0.931-0.990:
// addr is maybe not an argument but the stack pointer got within the function
int sceKernelAssertForDriver(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);

// 3.60:
int sceKernelAssertForDriver(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);

sceKernelAssertLevelForDriver

Version NID
0.931-3.60 0xFD753E7A
// 0.931-0.990:
int sceKernelAssertLevelForDriver(int level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);

// 3.60:
int sceKernelAssertLevelForDriver(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);

sceKernelPrintfAssertLevelForDriver

Version NID
0.931 not present
0.990-3.60 0x821A2D59

This is a guessed name.

Temp name was sceDebugPrintfKernelAssertionForDriver, sceKernelVprintfAssertLevelForDriver.

// 0.990:
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr, const char *fmt, va_list arg);

// 3.50-3.60:
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *lr, const char *fmt, ...);

sceKernelGetAssertLevelForDriver

Version NID
0.931 not present. Present in #SceDebugForKernel.
0.990-3.60 0x374B7868

Temp name was sceKernelGetMinimumAssertionLevelForDriver.

Returns g_assertLevel from memory.

SceInt32 sceKernelGetAssertLevelForDriver(void);

sceKernelPanicForDriver

Version NID
0.931-0.990 not present
3.60 0x391B5B74

Temp name was sceDebugPrintKernelPanicForDriver.

int sceKernelPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr);

sceKernelPrintfPanicForDriver

Version NID
0.931-0.990 not present
3.60 0x00CCE39C
void sceKernelPrintfPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr, const char *fmt, ...);

sceKernelGetDebugTailLogForDriver

Version NID
0.931-0.990 not present
3.60 0x62466B0A

Temp name was sceKernelGetTtyInfoForDriver.

Gets tty tail log.

// max bufSize is 0x1000
int sceKernelGetDebugTailLogForDriver(void *pBuf, SceSize bufSize);

_sceEventLogPutForDriver

Version NID
0.931-0.990 not present
3.60 0x95B38C6C

Derived from SceVshBridge#_vshEventLogPut.

Calls SceSysmem#sceEventLogPutForDriver with KERNEL PID and SceSysmem#SceSysrootForKernel_D441DC34 return value as second argument.

// id: 10001 (SceProcessmgr), 20001 (SceWlanBt)
// index: 1, 2, 3, 4, 5 (SceProcessmgr), 1, 2, 3, 4 (SceWlanBt)
// a3: 0 (SceProcessmgr, SceWlanBt)
// bufSize: 0x1C (SceProcessmgr), 4 (SceWlanBt)
// max bufSize is 0x80
int _sceEventLogPutForDriver(int id, int index, int a3, void *pBuf, SceSize bufSize);

sceEventLogPutForDriver

Version NID
0.931-0.990 not present
3.60 0x912CF2BA

This is a guessed name.

// max bufSize is 0x80
int sceEventLogPutForDriver(SceUInt32 pid, int a2, int id, int index, int a5, void *pBuf, SceSize bufSize);

sceKernelGetEventLogForDriver

Version NID
0.931-0.990 not present
3.60 0xCC5365D3

Temp name was sceEventLogGetInfoForDriver.

Copy by blocks of 0x30 bytes (or maybe 0xC0 bytes).

// max bufSize is 0xC00 (0x40 blocks of size 0x30)
int sceKernelGetEventLogForDriver(SceKernelDebugEventLog *pBuf, SceSize bufSize, SceSize *pReadBlocks);

SceSysmemForTZS

sceKernelProcModeVAtoPAForTZS

Version NID
0.931 0x119B9547
0.990-3.73 not present
int sceKernelProcModeVAtoPAForTZS(SceUID pid, uint32_t mode, void *pVA, void **pPA);

sceKernelAllocPartitionStackMemBlockForTZS

Version NID
0.931 0x69022B7F
0.990-3.73 not present

sceKernelGetPhyPageResetForTZS

Version NID
0.940-1.80 0x3FEF6B39
3.60-3.73 not present

sceKernelDeleteHeapForTZS

Version NID
0.931-3.60 0x624454BC

sceKernelCreateHeapForTZS

Version NID
0.931-3.60 0x56A16D84

sceKernelAllocHeapMemoryWithOptionForTZS

Version NID
0.931-3.60 0xEA712806

sceKernelAllocHeapMemoryForTZS

Version NID
0.931-3.60 0x473871D8

sceKernelFreeHeapMemoryForTZS

Version NID
0.931-3.60 0x42FB5B12

sceKernelAllocUncacheHeapMemoryForTZS

Version NID
0.940-3.60 0x29DE887D

sceKernelAllocUncacheHeapMemoryWithOptionForTZS

Version NID
0.931-3.60 0x6A3FBAF0

sceKernelFreeUncacheHeapMemoryForTZS

Version NID
0.931-3.60 0x2F18E288

sceKernelNameHeapDeleteForTZS

Version NID
0.990-3.60 0xF459D09D

sceKernelNameHeapInsertForTZS

Version NID
0.990-3.60 0x42AD34AB

sceKernelSetSuspendIntrFuncForTZS

Version NID
0.940-1.80 0xB4306D21
3.60-3.73 not present

sceKernelSetResumeIntrFuncForTZS

Version NID
0.940-1.80 0x418111B0
3.60-3.73 not present

sceKernelAddressSpaceUnmapForTZS

Version NID
0.940-3.60 0x31273DC7

sceKernelGetMemBlockBaseForTZS

Version NID
0.931-3.60 0xE1DEDFF4
/**
 * @brief Get mapped base address of memory block.
 *
 * Get base address of memory block.
 * @param[in]	uid		block id
 * @param[out]	ppBase		base address of memory block
 * @retval	SCE_OK		success
 * @retval	<SCE_OK		Error
 */
int sceKernelGetMemBlockBaseForTZS(SceUID uid, void **ppBase);

sceKernelFreeMemBlockForTZS

Version NID
0.940-3.60 0x658EACE3

sceKernelAllocMemBlockForTZS

Version NID
0.940-3.60 0x402EB970
SceUID sceKernelAllocMemBlockForTZS(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelAllocPartitionMemBlockForTZS

Version NID
0.940-3.60 0x0028E26C

Temp name was sceKernelAllocMemBlockForPidForTZS.

SceUID sceKernelAllocPartitionMemBlockForTZS(SceUID pid, const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelVAtoPAForTZS

Version NID
0.931-3.60 0x1DEADF6C

This will write the physical address for a virtual address pVA to memory pointed to by ppPA.

Returns <0 on error, values >=0 indicate success.

int sceKernelVAtoPAForTZS(void *pVA, void **ppPA);

sceKernelVARangeToPAVectorForTZS

Version NID
0.931-3.60 0x9D43E416

sceKernelCreateAddressSpaceForTZS

Version NID
0.931 0x21906368
0.990-3.73 not present

SceSysmemForTZS_038EAEEE

Version NID
0.931-0.990 not present
3.60 0x038EAEEE

SceDipswForTZS

sceKernelCheckDipswForTZS

Version NID
0.940-3.60 0xA98FC2FD

SceUartForTZS

sceUartWriteForTZS

Version NID
0.990-3.60 0x3AFD5E71

SceDebugForTZS

sceKernelDebugModuleStart2ForTZS

Version NID
0.931 0x32E3D4B9
int sceKernelDebugModuleStart2ForTZS(void);

sceKernelRegisterKprintfHandlerForTZS

Version NID
0.931 0x0AD558D5
int sceKernelRegisterKprintfHandlerForTZS(int (*kprintf)(const char *fmt, ...), const void *args);

sceKernelDebugPutcharForTZS

Version NID
0.931 0xD36F27BA

Print character.

int sceKernelDebugPutcharForTZS(char c);

sceKernelStoppedForTZS

Version NID
0.931-0.990 0xCB502FD1
1.80 not present
int sceKernelStoppedForTZS(const char *maybe_pFile, const char *maybe_pFunc, int maybe_line);

sceKernelAssertForTZS

Version NID
0.931-3.60 0x2F9B8AA8
// 0.931-0.990:
int sceKernelAssertForTZS(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);

// 3.60:
int sceKernelAssertForTZS(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);

sceKernelAssertLevelForTZS

Version NID
3.60 0x618F89E6
// 3.60:
int sceKernelAssertLevelForTZS(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);

sceKernelGetAssertLevelForTZS

Version NID
3.60 0xF851BA4F

Returns g_assertLevel from memory.

SceInt32 sceKernelGetAssertLevelForTZS(void);

_sceKernelPrintDebugLogForTZS

Version NID
0.931 0x4FF6536C
int _sceKernelPrintDebugLogForTZS(int a1, int a2, int maxNum);

sceKernelPrintDebugLogForTZS

Version NID
0.931 0x85BF33E1
int sceKernelPrintDebugLogForTZS(int a1, int a2);

print_with_log_buffer

Version NID
0.931 0x1FD92289
int print_with_log_buffer(const char *msg, SceSize maxlen);

sceKernelPrintfForTZS

Version NID
0.931-1.80 0x1655E0E3
int sceKernelPrintfForTZS(const char *fmt, ...);

sceKernelPrintfLevelForTZS

Version NID
0.931-1.80 0xC70CBB58
int sceKernelPrintfLevelForTZS(int level, const char *fmt, ...);

sceKernelPrintfCore0ForTZS

Version NID
0.931 0x08F8AD70

Same as sceKernelPrintfForTZS but only prints if CPU ID is 0.

int sceKernelPrintfCore0ForTZS(const char *fmt, ...);

sceKernelPrintfLevelCore0ForTZS

Version NID
0.931-1.80 0xD4E6A0C0

Same as sceKernelPrintfLevelForTZS but only prints if CPU ID is 0.

int sceKernelPrintfLevelCore0ForTZS(int level, const char *fmt, ...);

sceKernelSetMinimumLogLevelForTZS

Version NID
0.931 0x898E417E
/**
 * @brief Specifies the minimum severity level for the output of logging information.
 *
 * Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.
 *
 * @param	minimumLogLevel	The minimum severity at which debugging messages should be output.
 * @retval	SCE_OK          The operation was completed successfully.
 * @retval	Negative value	Error code
 */
int sceKernelSetMinimumLogLevelForTZS(SceInt32 minimumLogLevel);

register_log_buffer

Version NID
0.931 0xF2A87E96
int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);

start_logging

Version NID
0.931 0x1FF65E15
int start_logging(int state);

stop_logging

Version NID
0.931 0x5A35E3E0

If state is not zero, stops logging and return 1, else does nothing and return 0.

Returns 1 if logging has been stopped, 0 else.

int stop_logging(void);

refresh_logs

Version NID
0.931 0x91B41C34
int refresh_logs(void);

add_entry

Version NID
0.931 0x95E1A80B
int add_entry(int a1, int a2, int a3, void *log_buffer_start);

add_entry2

Version NID
0.931 0x538319EB
int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);

register_unk_cb

Version NID
0.931 0x3598118B

The callback has this definition:

// unk: 2 or 3
int unk_cb(SceUID pid, void *buf, SceSize size, int *pOut, int unk);

If unk_cb runs successfully (return >= 0), pOut is used as third argument of unk_cb2, else unk_cb2 is not called at all.

int register_unk_cb(void *some_cb);

register_unk_cb2

Version NID
0.931 0xE844FC5A
0.990-3.60 not present

The callback has this definition:

int unk_cb2(SceUID pid, void *buf, int unk);
int register_unk_cb2(void *some_cb);

sceKernelPanicForTZS

Version NID
0.931 not present
1.80-3.60 0x563B623D

SceDebugForTZS_0D799DAE

Version NID
0.931-0.990 not present
3.60 0x0D799DAE
int SceDebugForTZS_0D799DAE(SceUInt32 msg_type, void *msg_ctx, const char *fmt, va_list arg);

SceDebugForTZS_D26EB4BB

Version NID
0.931-0.990 not present
3.60 0xD26EB4BB
int SceDebugForTZS_D26EB4BB(SceBool condition, SceUInt32 msg_type, void *msg_ctx, const char *fmt, ...);

SceCpuForTZS

  • 0.931: 0xACA39932: unknown, save context that will be restored with 0xCA74C9A2
  • 0.931: 0xCA74C9A2: unknown, restore context saved with 0xACA39932
  • 0.931: 0xE0B34336: unknown, same as SceCpuForKernel_9D72DD1B
  • 0.931-0.990: 0x40DEC1B6: sceKernelWaitForEvent
  • 0.931-0.990: 0xF42F079B: sceKernelSendEvent
  • 0.940: 0x1266F962: sceKernelAbort
  • 0.931-0.940: 0x98BF47D3: sceKernelGetVmaccessRange
  • 0.931: 0x49AD8B60: sceKernelSetFIQModeStack
  • 0.931: 0xC2A428F3: sceKernelSetMonModeStack
  • 0.931: 0xD9013440: sceKernelSetIRQModeStack
  • 0.931: 0xDF17E4A3: sceKernelSetUndModeStack
  • 0.931: 0xF832C341: sceKernelSetAbtModeStack
  • 0.931: 0xFB1D3114: sceKernelSetSvcModeStack
  • 0.931: 0xF6CE21EA: sceKernelPrintCpuMode
  • 3.60: 0x31E78A4B: unknown
  • 3.60: 0x4FED4BCE: unknown
  • 3.60: 0x7548CBCF: unknown
  • 3.60: 0xD4E7413D: unknown

1.80:

     NID 0: 0x0A15B41C: sceKernelL1DcacheCleanInvalidateAll
     NID 1: 0x17A88E69: sceKernelL1DcacheCleanRange
     NID 2: 0x190D96D5: sceKernelDcacheCleanRange
     NID 3: 0x2A0A3DC6
     NID 4: 0x2B6403F8: on FW 3.60, does nothing and returns -1. sceKernelCpuWaitL2Cache
     NID 5: 0x2FE24445: sceKernelCpuAtomicSet32
     NID 6: 0x308D7ABE: sceKernelCpuDcacheInvalidateMVACRange
     NID 7: 0x324727D1: sceKernelGetCpsr
     NID 8: 0x39FCFCC2: sceKernelDomainTextMemcpy
     NID 9: 0x44C423D3: sceKernelCpuId
     NID 10: 0x49B11FF8
     NID 11: 0x71FD9AB5: sceKernelSpinlockLowLock
     NID 12: 0x72CA4F7A: sceKernelGetSpsr
     NID 13: 0x75D87321: sceKernelCpuAtomicOrAndGet32
     NID 14: 0x7A5373EB: sceKernelDcacheCleanInvalidateRange
     NID 15: 0x7CCE9480: sceKernelDcacheCleanInvalidateAll
     NID 16: 0x864E3DED
     NID 17: 0x9E4C0D0D: on FW 3.60, does nothing and returns -1
     NID 18: 0xA5965CBF: sceKernelL1IcacheInvalidateEntireAllCore
     NID 19: 0xACF209F3: sceKernelSpinlockLowTrylockCpuSuspendIntr
     NID 20: 0xB421FAFD: sceKernelL1IcacheInvalidateRange
     NID 21: 0xB8F00FBE: sceKernelSpinlockLowUnlockCpuResumeIntr
     NID 22: 0xC4137AED: sceKernelPleFlushRequest
     NID 23: 0xCD98416C: sceKernelSpinlockLowUnlock
     NID 24: 0xCDD46655: sceKernelDcacheInvalidateRange
     NID 25: 0xD67A4356: sceKernelSpinlockLowLockCpuSuspendIntr
     NID 26: 0xEFD6F289: sceKernelCpuAtomicCompareAndSet8

SceSysclibForTZS

__stack_chk_fail

Version NID
1.80-3.60 0xE5457B97

__stack_chk_guard

Version NID
3.60 0xBA505B15

This is a variable.

strncpy

Version NID
0.940-3.60 0x361850BB

memcpy

Version NID
0.931-3.60 0xBE3AF2EE

memset

Version NID
0.931-3.60 0x956DB750

SceSysrootForTZS

sceKernelSysrootBacktraceForTZS

Version NID
0.931 0xF26A5E68

sceKernelSysrootPrintBacktraceForTZS

Version NID
0.931 0x463EA380

sceKernelSysrootShowCallerInfoForTZS

Version NID
0.931 0x2F3D9414

sceKernelSysrootGetModulePrivateForTZS

Version NID
0.931-1.80 0xC9DD8EB3

sceKernelSysrootSetModulePrivateForTZS

Version NID
0.931-1.80 0xEA572BD9

sceKernelSysrootSetSharedMemoryForTZS

Version NID
0.940-1.80 0x45EEB2E0

sceKernelSysrootGetKermitRevisionForTZS

Version NID
0.940-1.80 0xDB3DAB76

sceKernelSysrootGetSharedMemoryForTZS

Version NID
0.931-3.60 0x1C96096F

sceKernelSysrootCorelockLockForTZS

Version NID
0.931-1.80 0xD653194A

sceKernelSysrootGetVbaseMonitorVectorForTZS

Version NID
0.931-1.80 0xD4E6D8E8

sceKernelSysrootGetKernelMMUContextForTZS

Version NID
0.931-1.80 0xA8B7DAF9

sceKernelSysrootCorelockUnlockForTZS

Version NID
0.931-1.80 0x2F5FD9A8

sceKernelSysrootGetVbaseResetVectorForTZS

Version NID
0.931-1.80 0x2460ADFA

sceKernelIsColdBootForTZS

Version NID
0.940-1.80 0x0567B4B9

sceKernelIsSecureStateForTZS

Version NID
0.940 0xEFA54B46
3.60 not present

sceKernelSysrootGetErnieWakeupFactorForTZS

Version NID
0.940-1.80 0x8E871C6D

sceKernelSysrootGetKblParamForTZS

Version NID
0.931-1.80 0x29C1049E

Returns pointer to KBL Param buffer.

void *sceKernelSysrootGetKblParamForTZS(void);

sceKernelSysrootAllocForTZS

Version NID
0.940-1.80 0x1A9E1D28
void *sceKernelSysrootAllocForTZS(uint32_t size);

sceKernelSysrootGetModelInfoForTZS

Version NID
3.60 0xD6FBF445

This is guessed name.

sceSysrootGetSessionIdForTZS

Version NID
3.60 0xCC36643A

This is guessed name.

sceKernelSysrootGetSleepFactorForTZS

Version NID
3.60 0x7DA87A7F

This is guessed name.

sceKernelSysrootGetCoredumpEncryptionKeyForTZS

Version NID
3.60 0x32546BDB

This is guessed name.

SceQafMgrForTZS

sceSblQafManagerIsAllowKernelDebugForTZS

Version NID
0.990-1.80 0x54D22D74

return *(char *)(sceKernelSysrootGetKblParamForTZS() + 0x2D) & 1;

ScePmMgrForTZS

sceSblPmMgrGetProductModeForTZS

Version NID
0.990-3.60 0xCF554E69

SceSblAIMgrForTZS

sceSblAIMgrIsCEXForTZS

Version NID
0.990-3.60 0x536B38F4