Difference between revisions of "SceSysmem"

From Vita Development Wiki
Jump to navigation Jump to search
 
(351 intermediate revisions by 3 users not shown)
Line 25: Line 25:
 
|-
 
|-
 
| 0.990-1.692 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || 0xC7309957
 
| 0.990-1.692 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || 0xC7309957
 +
|-
 +
| 1.80-3.74 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || not present. Removed.
 
|-
 
|-
 
| 0.990-3.60 || [[SceSysmem#SceSysmem|SceSysmem]] || Non-secure || User || 0x37FE725A
 
| 0.990-3.60 || [[SceSysmem#SceSysmem|SceSysmem]] || Non-secure || User || 0x37FE725A
Line 44: Line 46:
 
| 0.990-3.65 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E
 
| 0.990-3.65 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E
 
|-
 
|-
| 0.990-1.69 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || 0x24878615
+
| 0.990-1.692 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || 0x24878615
 
|-
 
|-
| 1.80 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || Removed
+
| 1.80-3.74 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || not present. Removed.
 
|-
 
|-
 
| 0.990-3.65 || [[SceSysmem#SceSysclibForDriver|SceSysclibForDriver]] || Non-secure || Kernel || 0x7EE45391
 
| 0.990-3.65 || [[SceSysmem#SceSysclibForDriver|SceSysclibForDriver]] || Non-secure || Kernel || 0x7EE45391
Line 56: Line 58:
 
| 0.990-3.65 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4
 
| 0.990-3.65 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4
 
|-
 
|-
| 0.990-1.69 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E
+
| 0.990-1.692 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E
 
|-
 
|-
| 1.80 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || Moved to [[SceSblPostSsMgr]]
+
| 1.80-3.74 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || not present. Moved to [[SceSblPostSsMgr#SceZlibForDriver]].
 
|-
 
|-
 
| 0.990-3.65 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C
 
| 0.990-3.65 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C
Line 110: Line 112:
 
typedef struct SceSysrootForKernel_D29BCA77_struct SceSysrootForKernel_D29BCA77_struct;
 
typedef struct SceSysrootForKernel_D29BCA77_struct SceSysrootForKernel_D29BCA77_struct;
 
typedef struct SceSysrootForKernel_733C243E_struct SceSysrootForKernel_733C243E_struct;
 
typedef struct SceSysrootForKernel_733C243E_struct SceSysrootForKernel_733C243E_struct;
 +
 +
typedef struct SceKernelMMUContext { // size is 0xC on FWs 0.931-3.60
 +
  SceUInt32 TTBR1;
 +
  SceUInt32 DACR;
 +
  SceUInt32 CONTEXTIDR;
 +
} SceKernelMMUContext;
  
 
typedef SceUInt32 SceCachedSecureModule;
 
typedef SceUInt32 SceCachedSecureModule;
Line 328: Line 336:
 
         //Allocations are made from current process' "Unique" heap
 
         //Allocations are made from current process' "Unique" heap
 
         //Fails if TPIDRPRW is NULL
 
         //Fails if TPIDRPRW is NULL
void *(*sceKernelAllocCurrentProcessHeap)(SceSize size, SceKernelHeapMemoryOpt* opt);
+
void *(*sceKernelAllocCurrentProcessHeap)(SceSize size, SceKernelHeapMemoryOpt* pOpt);
SceInt32 (*sceKernelFreeCurrentProcessHeap)(void* ptr);
+
SceInt32 (*sceKernelFreeCurrentProcessHeap)(void* addr);
  
 
//Allocations are made from specified process' "Unique" heap
 
//Allocations are made from specified process' "Unique" heap
 
         //KERNEL_PID (0x10005), DummyProcessGame (0x10013) and DummyProcessSystem (0x10015) are accepted as PIDs
 
         //KERNEL_PID (0x10005), DummyProcessGame (0x10013) and DummyProcessSystem (0x10015) are accepted as PIDs
         void *(*sceKernelAllocRemoteProcessHeap)(ScePID process, SceSize size, SceKernelHeapMemoryOpt* opt);
+
         void *(*sceKernelAllocRemoteProcessHeap)(ScePID process, SceSize size, SceKernelHeapMemoryOpt* pOpt);
 
SceInt32 (*sceKernelFreeRemoteProcessHeap)(ScePID process, void* ptr);
 
SceInt32 (*sceKernelFreeRemoteProcessHeap)(ScePID process, void* ptr);
  
Line 377: Line 385:
 
SceInt32 (* funcGetProcessAddressSpaceCB)(SceUID pid, void **address_space_obj);
 
SceInt32 (* funcGetProcessAddressSpaceCB)(SceUID pid, void **address_space_obj);
 
SceInt32 (* sceKernelGetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
 
SceInt32 (* sceKernelGetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
SceInt32 (* sceKernelGetProcessTitleId)(SceUID pid, char *title_id, SceSize len); //Copies processObject->list_entry->process_name to title_id - maybe this should be GetProcessName?
+
SceInt32 (* sceKernelGetProcessTitleId)(SceUID pid, char *title_id, SceSize len); // Copies processObject->list_entry->process_name to title_id - maybe this should be GetProcessName?
 
SceInt32 (* sceKernelIncProcessResource)(SceUInt32 type); // Type must be < 0x3
 
SceInt32 (* sceKernelIncProcessResource)(SceUInt32 type); // Type must be < 0x3
 
SceInt32 (* sceKernelDecProcessResource)(SceUInt32 type); //^
 
SceInt32 (* sceKernelDecProcessResource)(SceUInt32 type); //^
Line 384: Line 392:
 
typedef struct SceSysrootProcessHandler { // size is 0x28 on FW 3.60
 
typedef struct SceSysrootProcessHandler { // size is 0x28 on FW 3.60
 
SceSize size;                                                      // Size of this structure
 
SceSize size;                                                      // Size of this structure
void (* unk_4)(SceUID pid, SceUID modid, int flags, uint64_t time); //!< process start shared modules
+
void (* unk_4)(SceUID pid, SceUID modid, int flags, SceUInt64 time); //!< process start shared modules
void (* exit)(SceUID pid, int flags, uint64_t time);
+
void (* exit)(SceUID pid, int flags, SceUInt64 time);
 
void (* kill)(SceUID pid);                                          //!< by SceShell
 
void (* kill)(SceUID pid);                                          //!< by SceShell
void (* unk_10)(SceUID pid, SceUID modid, uint64_t time);
+
void (* unk_10)(SceUID pid, SceUID modid, SceUInt64 time);
void (* unk_14)(SceUID pid, SceUID modid, uint64_t time);
+
void (* unk_14)(SceUID pid, SceUID modid, SceUInt64 time);
void (* unk_18)(SceUID pid, SceUID modid, uint64_t time);
+
void (* unk_18)(SceUID pid, SceUID modid, int a3, void* maybe_process_info, SceUInt64 time);
 
int (* on_process_created)(int a1, int a2, int a3);                //!< called when process is created
 
int (* on_process_created)(int a1, int a2, int a3);                //!< called when process is created
void (* unk_20)(SceUID pid, SceUID modid, uint64_t time);
+
void (* unk_20)(SceUID pid, SceUID modid, SceUInt64 time);
void (* unk_24)(SceUID pid, SceUID modid, int flags, uint64_t time);
+
void (* unk_24)(SceUID pid, SceUID modid, int flags, SceUInt64 time);
 
} SceSysrootProcessHandler;
 
} SceSysrootProcessHandler;
  
Line 768: Line 776:
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PPAV        0x00001000 // Official name may be HAS_PVECTOR
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PPAV        0x00001000 // Official name may be HAS_PVECTOR
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ROUNDUP      0x00002000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ROUNDUP      0x00002000
 +
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x4000      0x00004000 // Some options when registering SceKernelBlock with guid
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_DOMAIN      0x00010000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_DOMAIN      0x00010000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_NOPHYPAGE        0x00020000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_NOPHYPAGE        0x00020000
Line 836: Line 845:
 
} SceKernelFixedHeapInfo;
 
} SceKernelFixedHeapInfo;
  
typedef struct SceKernelHeapMemoryOpt { // size is 0x14 on FW 0.990
+
typedef struct SceKernelHeapMemoryOpt { // size is 0x14 on FW 0.990-3.60
 
SceSize size; // Size of this structure
 
SceSize size; // Size of this structure
uint32_t unk_4;
+
uint32_t unk_4; // ex: 0
SceSize alignment; // ex: 0x10
+
SceSize alignment; // ex: 0x10, 0x40
uint32_t unk_C; // ex: 0x20
+
uint32_t unk_C; // ex: 0, 0x20
uint32_t unk_10;
+
uint32_t unk_10; // ex: 0
 
} SceKernelHeapMemoryOpt;
 
} SceKernelHeapMemoryOpt;
  
Line 869: Line 878:
 
void *funcAlloc;
 
void *funcAlloc;
 
char unk2[0x8];
 
char unk2[0x8];
uint32_t magic; // always 0x4d95AEEC
+
uint32_t magic; // always 0x4D95AEEC
 
} SceAddressSpace;
 
} SceAddressSpace;
  
Line 882: Line 891:
 
SceSize size; // Size of this structure
 
SceSize size; // Size of this structure
 
int flag;
 
int flag;
SceKernelAddressSpaceCallback *data_0x08; // info dst buff ptr, need AddrSpace.flag = 2;
+
SceKernelAddressSpaceCallback *data_0x08; // info dst buff ptr, need AddrSpace.flag = 2;
 
void *TTBR1; // info dst buff ptr, need AddrSpace.flag |= 4;
 
void *TTBR1; // info dst buff ptr, need AddrSpace.flag |= 4;
 
} SceKernelAddressSpace;
 
} SceKernelAddressSpace;
Line 979: Line 988:
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_UNK 0x10002
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_UNK 0x10002
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_CDRAM 0x20001
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_CDRAM 0x20001
 +
 +
typedef struct SceKernelVSlot { // size is at least 0x40 on FW 3.65
 +
    char unk_0x0[0x18];
 +
    void* base_addr_or_offset;
 +
    char unk_0x1C[8];
 +
    void* some_struct;
 +
    char unk_0x28[0xC];
 +
    SceSize alloc_phy_size;
 +
    SceSize alloc_size;
 +
    int unk;
 +
} SceKernelVSlot;
  
 
typedef struct kernel_message_ctx { // size is 0x18 on FW 3.60
 
typedef struct kernel_message_ctx { // size is 0x18 on FW 3.60
Line 1,094: Line 1,114:
 
typedef SceVoid(*SceKernelSysrootVipRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);
 
typedef SceVoid(*SceKernelSysrootVipRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);
  
// This is a guessed name
+
// This is a guessed type name
typedef SceUInt32 SceKernelMemoryRefPerm;
+
typedef SceUInt32 SceKernelLockMode;
#define SCE_KERNEL_MEMORY_REF_PERM_0x10 0x10
+
#define SCE_KERNEL_LOCK_MODE_0x10 0x10
#define SCE_KERNEL_MEMORY_REF_PERM_0x20 0x20
+
#define SCE_KERNEL_LOCK_MODE_0x20 0x20
  
typedef struct SceKernelModulePrivate9 { // size is 0xAC-bytes on 3.60
+
typedef struct SceKernelModulePrivate9 { // size is 0xAC-bytes on FW 3.60
 
SceClass SceUIDModuleClass;
 
SceClass SceUIDModuleClass;
 
SceClass SceUIDLibraryClass;
 
SceClass SceUIDLibraryClass;
 
SceClass SceUIDLibStubClass;
 
SceClass SceUIDLibStubClass;
SceKernelProcessModuleInfo ProcModuleInfo;
+
SceKernelProcessLibdb libdb;
 
SceUID ScePsp2BootConfig_modid;
 
SceUID ScePsp2BootConfig_modid;
 
} SceKernelModulePrivate9;
 
} SceKernelModulePrivate9;
Line 1,781: Line 1,801:
 
== SceSysmemForKernel ==
 
== SceSysmemForKernel ==
  
=== sceKernelStrnlenFromUserForKernel ===
+
=== sceKernelSysmemModuleStartAfterProcessmgrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x9BC3DEAC
+
| 3.60-3.61 || 0xE7938BFB
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x4E74DA48
 
|}
 
|}
  
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source>
+
Temp name was sceKernelInitProcessMemoryForKernel.
 +
 
 +
Used by [[SceProcessmgr]].
 +
 
 +
<source lang="C">int sceKernelSysmemModuleStartAfterProcessmgrForKernel(void);</source>
  
=== SceSysmemForKernel_BD33EDDF ===
+
=== sceKernelSysmemCleanerForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xBD33EDDF
+
| 3.60-3.61 || 0x43E81C4B
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x50980298
 
|}
 
|}
  
Gets thread's name. Returns 0 on success.
+
?Implemented in internal system software.? Not implemented in external system software.
 
 
<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source>
 
  
=== scePUIDGetEntryInfoAllForKernel ===
+
=== sceKernelStrnlenFromUserForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2770A7D7
+
| 0.931 || 0x9BC3DEAC
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int scePUIDGetEntryInfoAllForKernel(int a1, int a2, int a3, int a4, int a5, void *pInfoAll);</source>
+
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source>
  
=== sceGUIDGetUIDVectorWeakByClassForKernel ===
+
=== sceKernelPhysicalMemWriteForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x59F577E8
+
| 0.931-0.990 || 0x4B86A751
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceGUIDGetUIDVectorWeakByClassForKernel(int a1, int a2, int a3, int a4, void *pUIDVectorWeak);</source>
+
Writes to physical address <code>pdest</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.
 +
 
 +
<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source>
  
=== scePUIDGetAttrForKernel ===
+
=== sceKernelPhysicalMemReadForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x86E83C0D
+
| 0.931-0.990 || 0xF96E3AE2
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID uid, void *pAttr);</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>
  
=== sceKernelGrowPhyMemPartForKernel ===
+
=== sceKernelCopyFromUser32DomainForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x6B3F4102
+
| 0.931 || 0xD530399A
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.
+
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source>
  
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source>
+
=== sceKernelCopyToUserProcTextDomainForKernel ===
 
 
=== sceKernelGrowPhyMemPartWithFlagsForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-3.60 || 0x30931572
 
|-
 
|-
| 3.60 || 0x775AA5E3
+
| 3.65 || 0x2995558D
 
|}
 
|}
  
Grows physical memory partition with flags.
+
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.
  
<source lang="C">int sceKernelGrowPhyMemPartWithFlagsForKernel(SceKernelPhyMemPart *pPhyMemPart, int flags, SceSize psize);</source>
+
This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.
  
=== sceKernelGetGrownPhyMemPartSizeForKernel ===
+
<source lang="c">SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);</source>
 +
 
 +
=== sceKernelCopyToUserProcTextDomainForDBGPForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0xE65EA709
 
|-
 
|-
| 3.60 || 0x4D809B47
+
| 3.63 || 0x4345C61F
 
|}
 
|}
  
This is a temp name.
+
=== sceKernelCopyToUserTextDomainForKernel ===
 
+
{| class="wikitable"
Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.
 
 
 
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source>
 
 
 
=== sceKernelAddressSpaceSetProcessForKernel ===
 
{| class="wikitable"
 
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2476B90F
+
| 3.60 || 0x67BAD5B4
 +
|-
 +
| 3.65 || 0x5EF1DAAF
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID uid, SceUID pid);</source>
+
This is a guessed name. Temp names were sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.
  
=== sceKernelAddressSpaceChangeMMUContextForKernel ===
+
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"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x653B0849
+
| 0.931 || Not present
 +
|-
 +
| 3.60-3.61 || 0xA6F95838
 +
|-
 +
| 3.63 || 0x499A9FFF
 
|}
 
|}
  
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.
+
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">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source>
+
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source>
  
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===
+
=== sceKernelRegisterClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x671A3444
+
| 0.990 || 0x11761B77
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Get information about a L1PT entry in the translation table of an address space. Pass the vaddress the target entry maps as <code>addr</code>.
+
=== sceKernelFindClassByNameForKernel ===
 
 
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source>
 
 
 
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xCB6E1C80
+
| 3.60 || 0x62989905
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0x7D87F706
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID uid, const void *addr, void *pInfo);</source>
+
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **class);</source>
  
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===
+
=== sceUIDRegisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x1A898F2E
+
| 0.931-0.990 || 0x59162CD7
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">
+
Calls [[#sceGUIDRegisterForKernel]].
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
 
  SceSize size; // Size of this structure
 
  char unk[0x4008];
 
} SceKernelAddressSpaceMMUL1AllInfo;
 
  
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID uid, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source>
+
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
  
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===
+
=== sceUIDObjectSetClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x1E1AA29B
+
| 0.931-0.990 || 0x226DE851
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
 
  SceSize size; // Size of this structure
 
  char unk[0x400];
 
} SceKernelAddressSpaceMMUL2AllInfo;
 
  
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID uid, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source>
+
=== sceKernelGetUIDHeapClassForKernel ===
 
 
=== sceKernelGetPhyPartKernelForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.61 || 0x4D38F861
+
| 3.60-3.61 || 0x4CCA935D
 
|-
 
|-
| 3.63-3.65 || 0x0164D817
+
| 3.63 || 0x7C878E94
 
|}
 
|}
  
return gpPhyPartKernel;
+
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source>
  
<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source>
+
=== sceKernelGetUIDMemBlockClassForKernel ===
 
 
=== sceKernelGetPhyPartToolForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.61 || 0xF8E95A5A
+
| 3.60-3.61 || 0xAF729575
 
|-
 
|-
| 3.63-3.65 || 0x0B1B4ACA
+
| 3.63 || 0x86681B64
 
|}
 
|}
  
<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source>
+
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</source>
  
=== SceSysmemForKernel_54E85275 ===
+
=== sceKernelGetUIDDLinkClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || not present
+
| 0.990-3.61 || 0xC105604E
 
|-
 
|-
| 3.60 || 0x54E85275
+
| 3.63 || 0xE4193EB6
 
|}
 
|}
  
Uses result from [[SceSysmem#sceKernelGetPhyPartToolForKernel]].
+
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source>
  
<source lang="C">
+
=== sceUIDGetUIDVectorByClassForKernel ===
// pPhyPartTool comes from sceKernelGetPhyPartToolForKernel
 
// pOut points to a structure of size 0xB0 bytes
 
int SceSysmemForKernel_54E85275(void *pPhyPartTool, void *pOut);
 
</source>
 
 
 
=== sceKernelGetPhyPartGameForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60-3.61 || 0xB60568F9
+
| 0.931-0.990 || 0xA2F03233
 
|-
 
|-
| 3.63 || 0x62800A6B
+
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">void *sceKernelGetPhyPartGameForKernel(void);</source>
+
Calls [[#sceGUIDGetUIDVectorByClassForKernel]].
  
=== sceKernelSetPhyPartGameForKernel ===
+
=== sceUIDGetProcUIDVectorByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60-3.61 || 0x77876A8D
+
| 0.990 || 0x51C08396
 
|-
 
|-
| 3.63 || 0x3753C584
+
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source>
+
=== scePUIDGetUIDVectorByClassForKernel ===
 
 
=== sceKernelGetPhyMemPartInfoCoreForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present
+
| 3.60-3.61 || 0xB16D5136
 
|-
 
|-
| 0.990-3.61 || 0x3650963F
+
| 3.63 || 0x08C05493
|-
 
| 3.63-3.65 || 0xB9B69700
 
 
|}
 
|}
  
<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source>
+
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]]. Maybe replacement for [[#sceUIDGetProcUIDVectorByClassForKernel]].
 +
 
 +
<source lang="C">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, int a2, int a3, int a4, int a5, SceSize *ret_num);</source>
  
=== sceKernelPhyMemLowAllocForKernel ===
+
=== sceKernelGetKernelAddressSpaceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x5E169FEF
+
| 3.60-3.61 || 0xC38B4D52
 +
|-
 +
| 3.63 || 0x2E5CC243
 
|}
 
|}
  
Allocate a range of physically contiguous "pages" from a PhyMemLow object.
+
<source lang="C">void* sceKernelGetKernelAddressSpaceForKernel(void);</source>
  
<source lang="C">
+
=== sceKernelCreateAddressSpaceForKernel ===
// 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 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x0FD6B756
+
| 0.990-3.60 || 0x4A3737F0
 +
|-
 +
| 3.65 || 0x8EE89D2C
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
// type must be 0x10002
+
// type: 0x10000001 (user AS)
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
+
// name: maybe titleid
 +
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelAddressSpace *pAS);
 
</source>
 
</source>
  
=== sceKernelGetPhyMemLowInfoForKernel ===
+
=== sceKernelDeleteAddressSpaceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x06A4DA6C
+
| 0.931-3.60 || 0xF2D7FE3A
 +
|-
 +
| 3.65 || 0x4A2E421D
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);
 
</source>
 
  
=== sceKernelPhyMemLowFreeForKernel ===
+
=== sceKernelAddressSpaceSetNameForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x18B99FDD
+
| 0.990-1.50 || not present
 +
|-
 +
| 3.60 || 0x7BD56D6D
 +
|-
 +
| 3.65 || 0xCEBC4963
 
|}
 
|}
  
Free a range of physical "pages" from a PhyMemLow object.
+
Used by [[SceProcessmgr]].
  
<source lang="C">
+
<source lang="C">int sceKernelAddressSpaceSetNameForKernel(SceUID guid, const char *name);</source>
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);
 
</source>
 
  
=== sceGUIDtoClassForKernel ===
+
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x66636970
+
| 0.931-3.60 || 0x67955EE9
 +
|-
 +
| 3.65 || 0x7DF07D60
 
|}
 
|}
  
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID uid);</source>
+
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, int a2, SceKernelPhyMemPart *pPhyMemPart);</source>
  
=== sceGUIDFindByObjectForKernel ===
+
=== sceKernelAddressSpaceCtrSetObjectHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x95ABFDC3
+
| 3.60-3.61 || 0xFC74A355
 +
|-
 +
| 3.63 || 0xFA348CB1
 
|}
 
|}
  
<source lang="C">int sceGUIDFindByObjectForKernel(uint32_t uid_or_flags_or_object);</source>
+
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
 
 
=== sceKernelRegisterClassForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x11761B77
+
| 0.931-3.60 || 0x89CE1F31
 +
|-
 +
| 3.65 || 0x36159CF5
 
|}
 
|}
  
=== sceKernelAllocKernelHeapForKernel ===
+
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source>
 +
 
 +
=== sceKernelAddressSpaceUnmapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x432EADA6
+
| 0.931-3.61 || 0xCE72839E
 +
|-
 +
| 3.63 || 0x73C38695
 
|}
 
|}
  
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
+
<source lang="C">int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int unk, void *vbase, SceSize size);</source>
 +
 
 +
3.60:
 +
<source lang="C">int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int flags, SceBool unk, uint32_t paddr, SceSize size);</source>
 +
 
 +
Example: in SceSysStateMgr:
 +
<source lang="C">
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);
 +
</source>
 +
 
 +
3.60
 +
 
 +
<source lang="C">
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
 +
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);
 +
</source>
  
=== sceUIDCreateEntryHeapForKernel ===
+
=== sceKernelAddressSpaceSetProcessForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x19CAEF35
+
| 0.990-3.61 || 0x2476B90F
 
|-
 
|-
| 3.65 || 0x89BEF058
+
| 3.63 || 0x5E772E19
 
|}
 
|}
  
<source lang="C">int sceUIDCreateEntryHeapForKernel(void);</source>
+
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID address_space, SceUID pid);</source>
  
=== sceUIDObjectSetClassForKernel ===
+
=== sceKernelAddressSpaceChangeMMUContextForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x226DE851
+
| 0.931-3.61 || 0x653B0849
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x20D01AFA
 
|}
 
|}
  
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>
+
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.
 +
 
 +
<source lang="C">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source>
  
=== sceGUIDGetEntryInfoAllForKernel ===
+
=== sceKernelAddressSpaceGetMMUContextForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2A79C51C
+
| 0.990 || not present
 +
|-
 +
| 3.10-3.61 || 0x9894B9E1
 +
|-
 +
| 3.63 || 0xA7C91D62
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUID uid, void *vectors, uint32_t nVector, void *out);</source>
+
This is a guessed name.
 +
 
 +
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID address_space, SceKernelMMUContext **ppCtx);</source>
  
=== sceGUIDNameForKernel ===
+
=== SceSysmemForKernel_FBEF93AA ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x250EE289
+
| 0.931 || not present
 +
|-
 +
| 0.990-3.01 || 0xFBEF93AA
 +
|-
 +
| 3.10-3.74 || not present
 
|}
 
|}
  
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>
+
Maybe gets MMU context.
 +
 
 +
<source lang="C">int SceSysmemForKernel_FBEF93AA(SceUID address_space, void* pOut);</source>
 +
 
 +
=== sceKernelAddressSpaceGetTimerVbaseForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60-3.61 || 0x7D92B2D3
 +
|-
 +
| 3.63 || 0xFA1A73DD
 +
|}
  
=== sceGUIDRegisterForKernel ===
+
=== SceSysmemForKernel_4492421F ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xAF42AAD5
+
| 3.60-3.61 || 0x4492421F
 +
|-
 +
| 3.63 || 0xC3EF4055
 
|}
 
|}
  
<source lang="C">int sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
+
Gets address space information.
 +
 
 +
<source lang="C">int SceSysmemForKernel_C3EF4055(SceUID address_space, void *pInfo);</source>
  
=== sceUIDRegisterForKernel ===
+
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x59162CD7
+
| 0.931-0.990 || 0x671A3444
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Calls sceGUIDRegisterForKernel.
+
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">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
+
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source>
  
=== SceSysmemForKernel_48D87E17 ===
+
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x48D87E17
+
| 0.931 || 0xCB6E1C80
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceKernelGetAddressSpaceMMUContextForKernel ===
+
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID address_space, const void *addr, void *pInfo);</source>
 +
 
 +
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xFBEF93AA
+
| 0.931-0.990 || 0x1A898F2E
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID uid, void *context);</source>
+
<source lang="C">
 +
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
 +
  SceSize size; // Size of this structure
 +
  char unk[0x4008];
 +
} SceKernelAddressSpaceMMUL1AllInfo;
  
=== sceKernelAllocSimpleMemBlockForKernel ===
+
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID address_space, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source>
 +
 
 +
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF81F4672
+
| 0.931 || 0x1E1AA29B
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
typedef struct SceKernelSimpleMemBlock {
+
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
char unk_0[0x14];
+
  SceSize size; // Size of this structure
void *base;
+
  char unk[0x400];
char unk_18[0x14];
+
} SceKernelAddressSpaceMMUL2AllInfo;
void *PhyPage;
 
SceSize size;
 
} SceKernelSimpleMemBlock;
 
  
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);
+
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID address_space, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source>
</source>
 
  
=== sceKernelGetSimpleMemBlockBaseForKernel ===
+
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0A8D14EC
+
| 0.990-3.61 || 0xCC7BB240
 +
|-
 +
| 3.63 || 0x0B5A3E93
 
|}
 
|}
  
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>
+
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>
  
=== sceKernelGetMemBlockInfoSimpleForKernel ===
+
=== sceKernelAddressSpaceVAtoPAForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2364A170
+
| 0.990-3.61 || 0xF2179820
 +
|-
 +
| 3.63 || 0x1BAF8C0B
 
|}
 
|}
  
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source>
+
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, uint32_t mode, void *pVA, void **pPA);</source>
  
 
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
 
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
Line 2,272: Line 2,362:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF7250E6C
+
| 0.990-3.61 || 0xF7250E6C
 +
|-
 +
| 3.63 || 0xA541E0CF
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID uid, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
+
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID address_space, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
  
=== sceKernelCreatePhyMemPartForKernel ===
+
=== sceKernelGetUIDAddressSpaceClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2E36E0C4
+
| 3.60-3.61 || 0xAF180A3F
 +
|-
 +
| 3.63 || 0x99D3BF76
 
|}
 
|}
  
Calls sceKernelCreatePhyMemPartByPbaseForKernel with pbase = 0.
+
This is a guessed name.
 
 
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart *pPhyMemPart);</source>
 
  
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
+
=== sceKernelAddressSpaceReferForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x63D83911
+
| 3.60-3.61 || 0x3F74E45C
 +
|-
 +
| 3.63 || 0x47C55DCC
 +
|}
 +
 
 +
This is a guessed name.
 +
 
 +
<source lang="C">int sceKernelAddressSpaceReferForKernel(SceUInt32 index, void **result);</source>
 +
 
 +
=== sceKernelCreatePhyMemPartForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931-3.61 || 0x2E36E0C4
 +
|-
 +
| 3.63 || 0xA2DFA383
 +
|}
 +
 
 +
Calls [[#sceKernelCreatePhyMemPartByPbaseForKernel]] with pbase = 0.
 +
 
 +
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart *pPhyMemPart);</source>
 +
 
 +
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931-3.61 || 0x63D83911
 +
|-
 +
| 3.63 || 0x5CC56F87
 
|}
 
|}
  
Line 2,327: Line 2,449:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2AEA9E09
+
| 0.931-3.61 || 0x2AEA9E09
 +
|-
 +
| 3.63 || 0x3F72B2E7
 
|}
 
|}
  
Line 2,337: Line 2,461:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2F6F9C2C
+
| 0.931-3.61 || 0x2F6F9C2C
 +
|-
 +
| 3.63 || 0x021053DD
 
|}
 
|}
  
Line 2,359: Line 2,485:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF4FA0575
+
| 0.931-3.61 || 0xF4FA0575
 +
|-
 +
| 3.63 || 0x029F5989
 
|}
 
|}
  
Line 2,375: Line 2,503:
 
</source>
 
</source>
  
=== sceUIDDeleteEntryHeapForKernel ===
+
=== sceKernelGetPhyMemPartInfoCoreForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF0C3FCFC
+
| 0.931 || not present
 +
|-
 +
| 0.990-3.61 || 0x3650963F
 
|-
 
|-
| 3.65 || 0xF6D09BD9
+
| 3.63-3.65 || 0xB9B69700
 
|}
 
|}
  
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID uid);</source>
+
<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source>
  
=== sceGUIDUnregisterForKernel ===
+
=== sceKernelGetPhyMemPartInfoForDebuggerForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xE79BBCF2
+
| 0.990-1.50 || not present
 +
|-
 +
| 3.60-3.61 || 0x54E85275
 +
|-
 +
| 3.63 || 0x73E03A38
 
|}
 
|}
  
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>
+
info size is 0xB0-bytes.
 +
 
 +
<source lang="C">int sceKernelGetPhyMemPartInfoForDebuggerForKernel(SceKernelPhyMemPart *pPhyMemPart, void *pInfo);</source>
  
=== sceGUIDGetEntryInfoClassForKernel ===
+
=== sceKernelGrowPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xE90CFD62
+
| 0.990-3.61 || 0x6B3F4102
 +
|-
 +
| 3.63 || 0x5B434019
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID uid, int a2, void *vectors, int nVector, void *pInfoClass);</source>
+
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.
 +
 
 +
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source>
  
=== sceKernelGetPhyPageResetForKernel ===
+
=== sceKernelGrowPhyMemPartByPbaseForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xEB350679
+
| 0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0x775AA5E3
 +
|-
 +
| 3.63 || 0x36FDA794
 
|}
 
|}
  
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>
+
Temp name was sceKernelGrowPhyMemPartWithFlagsForKernel.
 +
 
 +
Grows physical memory partition with pbase.
 +
 
 +
<source lang="C">int sceKernelGrowPhyMemPartByPbaseForKernel(SceKernelPhyMemPart *pPMP, SceUIntPtr pbase, SceSize psize);</source>
  
=== sceKernelFreePhyPageForKernel ===
+
=== sceKernelGetGrownPhyMemPartSizeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x00BC5B4A
+
| 0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0x4D809B47
 +
|-
 +
| 3.63 || 0xBC36755F
 
|}
 
|}
  
<source lang="C">int sceKernelFreePhyPageForKernel(uint32_t a1, int pPage, uint32_t a3, uint32_t a4);</source>
+
This is a guessed name.
 +
 
 +
Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.
 +
 
 +
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source>
  
=== sceKernelNameHeapInsertForKernel ===
+
=== SceSysmemForKernel_153A08A0 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x08AB3DAE
+
| 0.990-3.61 || 0x153A08A0
 +
|-
 +
| 3.63 || 0x6D563733
 
|}
 
|}
  
<source lang="C">int sceKernelNameHeapInsertForKernel(char *name, uint32_t flags, uint32_t *out);</source>
+
Adds 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.
 +
 
 +
<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source>
  
=== sceGUIDKernelCreateForKernel ===
+
=== sceKernelPhyMemPartAllocPhyPageForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xE6FAD50A
+
| 3.60-3.61 || 0xD449547B
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xB488C82E
 
|}
 
|}
  
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>
 
  
=== sceGUIDKernelCreateWithAttrForKernel ===
+
=== sceKernelResetPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x53E1FFDE
+
| 3.60 || 0xEEB85560
 +
|-
 +
| 3.65 || 0x9B7E673F
 
|}
 
|}
  
Create a GUID with the specified attribute.
+
Used by [[SceProcessmgr#sceKernelResetGameBudgetForKernel]].
 +
 
 +
Called with same argument as [[#sceKernelSetPhyPartGameForKernel]].
  
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);</source>
+
<source lang="C">int sceKernelResetPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
  
=== sceGUIDKernelCreateWithOptForKernel ===
+
=== sceKernelShowPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-0.995 || not present
+
| 3.60-3.61 || 0x5C257482
|-
 
| 0.996-3.60 || 0xDF0288D7
 
 
|-
 
|-
| 3.65 || 0xFB6390CE
+
| 3.63 || 0x8F0B5536
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.
+
?Implemented in internal system software.? Not implemented in external system software.
  
<source lang="c">
+
=== sceKernelAllocKernelHeapForKernel ===
typedef struct SceGUIDKernelCreateOpt { // size is at least 0x20 on FW 3.60
 
SceUInt32 attr;
 
SceUInt32 field_4;
 
SceUID uid;
 
SceUID pid;
 
SceUInt32 field_10;
 
SceUInt32 classAttr;
 
SceUInt32 uidAttr;
 
SceUID pid2;
 
} SceGUIDKernelCreateOpt;
 
 
 
SceUID sceGUIDKernelCreateWithOptForKernel(SceClass *pClass, const char *name, SceGUIDKernelCreateOpt *pOpt, SceKernelObject **ppEntry);
 
</source>
 
 
 
=== scePUIDReleaseObjectForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x3FCA782B
+
| 0.931-0.990 || 0x432EADA6
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID uid);</source>
+
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
  
=== scePUIDGetInfoForKernel ===
+
=== sceKernelGetHeapInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-3.61 || 0x91733EF4
 
|-
 
|-
| 3.60 || 0x12ED88AE
+
| 3.63 || 0x17DB1A0A
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
// pInfo size is 0x14 bytes
+
// 0.931-0.990:
int scePUIDGetInfoForKernel(SceUID pid, SceUID uid, void *pInfo);
+
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);
 +
 
 +
// 3.60:
 +
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceUInt32 level, SceKernelHeapInfo *pInfo);
 
</source>
 
</source>
  
=== sceGUIDGetEntryForKernel ===
+
=== sceKernelGetHeapInfoAllChunkForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x45F2A59C
+
| 0.931-0.990 || 0xAC4C0EB1
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceGUIDEntry **ppEntry);</source>
+
<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);</source>
  
=== sceGUIDGetVisibilityLevelForKernel ===
+
=== sceKernelGetHeapInfoByPtrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC69666C3
+
| 0.931-0.990 || not present
|}
 
 
 
=== sceGUIDSetVisibilityLevelForKernel ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| 3.60-3.61 || 0x68451777
 
|-
 
|-
| 3.60 || 0xCB8D03C0
+
| 3.63 || 0x80A75187
 
|}
 
|}
  
Sets visibilityLevel into guid's GUIDEntry.
+
Temp name was sceKernelGetHeapInfoByPointerForKernel.
  
<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source>
+
<source lang="C">int sceKernelGetHeapInfoByPtrForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>
  
=== sceGUIDFindByNameForKernel ===
+
=== sceKernelGetFixedHeapInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCEBA8031
+
| 3.60-3.61 || 0x4FA4A624
 +
|-
 +
| 3.63 || 0x890D9160
 
|}
 
|}
  
=== sceGUIDFindByNameAllForKernel ===
+
<source lang="C">int sceKernelGetFixedHeapInfoForKernel(SceUID heapid, SceKernelFixedHeapInfo *pInfo);</source>
 +
 
 +
=== sceKernelGetFixedHeapInfoByPointerForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4B5C85AC
+
| 0.990-3.61 || 0x219E90FD
 +
|-
 +
| 3.63 || 0xA24D2C8D
 
|}
 
|}
  
=== sceGUIDGetPIDForKernel ===
+
<source lang="C">
 +
// pObject is of size 0x30
 +
// pObject first 4 bytes are structure size
 +
int sceKernelGetFixedHeapInfoByPointerForKernel(void *pObject, SceKernelFixedHeapInfo *pInfo);</source>
 +
 
 +
=== sceKernelFixedHeapSetHookForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCF5A2311
+
| 3.60-3.61 || 0x8C8E2DD1
 +
|-
 +
| 3.63 || 0xD4511A52
 
|}
 
|}
  
Returns Process ID for guid.
+
<source lang="C">int sceKernelFixedHeapSetHookForKernel(SceUID heapid, void *hookdata);</source>
  
<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source>
+
=== sceKernelNameHeapInsertForKernel ===
 
 
=== sceGUIDSetPIDForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x812E7A53
+
| 0.990-3.61 || 0x08AB3DAE
 +
|-
 +
| 3.63 || 0xB628B46B
 
|}
 
|}
  
Sets Process ID for guid.
+
<source lang="C">int sceKernelNameHeapInsertForKernel(char *name, uint32_t flags, uint32_t *out);</source>
  
<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source>
+
=== sceKernelNameHeapGetInfoForKernel ===
 
 
=== sceGUIDSetCNOAForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8D6AF468
+
| 0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0xE443253B
 +
|-
 +
| 3.63 || 0x01194C2E
 
|}
 
|}
  
=== sceGUIDSetForKernel ===
+
=== sceKernelCreateObjectHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xD7B323EB
+
| 3.60-3.61 || 0x36830F46
 +
|-
 +
| 3.63 || 0x9D8F3BE8
 
|}
 
|}
  
Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.
+
<source lang="C">int sceKernelCreateObjectHeapForKernel(SceUID pid, int a2, void *pHeapHook, void *a4);</source>
 
 
<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
 
  
=== sceUIDGetProcUIDVectorByClassForKernel ===
+
=== SceSysmemForKernel_7FDF483A ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x51C08396
+
| 3.60-3.61 || 0x7FDF483A
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xEBFC8E10
 
|}
 
|}
  
=== sceUIDReferObjectWithLevelForKernel ===
+
A possible name could be sceKernelObjectHeapAllocForKernel.
 +
 
 +
=== sceKernelObjectHeapSetResourceLimitForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xF79B52B2
+
| 3.60-3.61 || 0x98E6905B
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xDFA1EB57
 
|}
 
|}
  
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source>
+
=== sceKernelObjectHeapSetResourceLimitAllForKernel ===
 
 
=== sceGUIDReferForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB3E2AA7A
+
| 3.60-3.61 || 0x5409397F
 +
|-
 +
| 3.63 || 0x067F2550
 
|}
 
|}
  
<source lang="C">int sceGUIDReferForKernel(SceUID pid, int guid);</source>
+
<source lang="C">int sceKernelObjectHeapSetResourceLimitAllForKernel(int a1, int a2, int a3);</source>
  
=== sceKernelPhysicalMemWriteForKernel ===
+
=== sceUIDCreateEntryHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x4B86A751
+
| 0.990-3.60 || 0x19CAEF35
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0x89BEF058
 
|}
 
|}
  
Writes to physical address <code>paddr</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.
+
<source lang="C">int sceUIDCreateEntryHeapForKernel(void);</source>
  
<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source>
+
=== sceUIDDeleteEntryHeapForKernel ===
 
 
=== sceKernelPhysicalMemReadForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xF96E3AE2
+
| 0.990-3.60 || 0xF0C3FCFC
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0xF6D09BD9
 
|}
 
|}
  
Temp name was memcpy_from_paddr.
+
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID uid);</source>
  
Dest must be a virtual address and src must be a physical address. Returns copied size on success.
+
=== sceUIDEntryHeapCloseAllPUIDForKernel ===
 
 
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source>
 
 
 
=== sceKernelAllocPartitionMemBlockForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x5FFE4B79
+
| 0.931-3.60 || 0xFAF96C1F
 
|-
 
|-
| 3.65 || 0x6DB45017
+
| 3.65 || 0x133024A5
 
|}
 
|}
  
Temp name was sceKernelAllocSystemCallTableForKernel.
+
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID uid);</source>
 
 
<source lang="C">
 
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);
 
</source>
 
  
=== sceUIDEntryHeapGetInfoForKernel ===
+
=== sceKernelUIDEntryHeapGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 2,692: Line 2,847:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 3.60 || 0x686AA15C
+
| 3.60-3.61 || 0x686AA15C
 +
|-
 +
| 3.63 || 0xCCD47B97
 
|}
 
|}
  
=== sceUIDEntryHeapCloseAllPUIDForKernel ===
+
Official name might also be sceUIDEntryHeapGetInfoForKernel.
 +
 
 +
=== sceUIDEntryHeapSetHookForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xFAF96C1F
+
| 3.60-3.61 || 0xCD985AEB
 
|-
 
|-
| 3.65 || 0x133024A5
+
| 3.63 || 0x666C878F
 
|}
 
|}
  
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID uid);</source>
+
?Implemented in internal system software.? Not implemented in external system software.
  
=== sceKernelNameHeapGetInfoForKernel ===
+
=== sceKernelPrintHeapSegmentListForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0x2EE50533
 
|-
 
|-
| 3.60 || 0xE443253B
+
| 3.63 || 0x82059651
 
|}
 
|}
  
=== sceKernelGetFixedHeapInfoByPointerForKernel ===
+
?Implemented in internal system software.? Not implemented in external system software.
 +
 
 +
=== sceGUIDRegisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x219E90FD
+
| 0.990-3.61 || 0xAF42AAD5
 +
|-
 +
| 3.63 || 0x6DB44A42
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
// pObject is of size 0x30
 
// pObject first 4 bytes are structure size
 
int sceKernelGetFixedHeapInfoByPointerForKernel(void *pObject, SceKernelFixedHeapInfo *pInfo);</source>
 
  
=== sceKernelGetHeapInfoAllChunkForKernel ===
+
=== sceGUIDUnregisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xAC4C0EB1
+
| 0.931-0.990 || 0xE79BBCF2
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID uid, SceKernelHeapInfo *pInfo);</source>
+
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>
  
=== sceKernelGetHeapInfoByPointerForKernel ===
+
=== sceGUIDOpenByGUIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || not present
+
| 0.990-3.61 || 0xCF53EEE4
 
|-
 
|-
| 3.60 || 0x68451777
+
| 3.63 || 0x89D33DF0
 
|}
 
|}
  
<source lang="C">int sceKernelGetHeapInfoByPointerForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>
+
=== sceGUIDNameForKernel ===
 
 
=== sceKernelGetHeapInfoForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x91733EF4
+
| 0.990 || 0x250EE289
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>
// 0.931-0.990:
 
int sceKernelGetHeapInfoForKernel(SceUID uid, SceKernelHeapInfo *pInfo);
 
  
// 3.60:
+
=== sceGUIDtoClassForKernel ===
int sceKernelGetHeapInfoForKernel(SceUID uid, SceUInt32 level, SceKernelHeapInfo *pInfo);
 
</source>
 
 
 
=== sceKernelFreeSimpleMemBlockForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA1FFA2C9
+
| 0.990-3.61 || 0x66636970
 +
|-
 +
| 3.63 || 0x368F1C36
 
|}
 
|}
  
=== sceKernelAllocForKernel ===
+
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID uid);</source>
 +
 
 +
=== sceGUIDGetObjectWithClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC0A4D2F3
+
| 0.990-3.61 || 0x7ABFA9A7
 
|-
 
|-
| 3.65 || 0x85571907
+
| 3.63 || 0x0E43E113
 
|}
 
|}
  
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>
+
Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.
 +
 
 +
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>
  
=== sceKernelAllocWithOptForKernel ===
+
=== sceGUIDGetUIDVectorByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA2CD1697
+
| 0.931-3.60 || 0xEC7D36EF
 +
|-
 +
| 3.65 || 0x52137FA3
 
|}
 
|}
 +
 +
Copy uid to vector by referring to all objects created by cls.
  
 
<source lang="C">
 
<source lang="C">
 
+
/*
typedef struct SceAllocOpt {
+
* num - max copy number
    SceSize size;  // 0x14
+
*/
    SceSize data04; // maybe len align?
+
int sceGUIDGetUIDVectorByClassForKernel(SceClass *cls, int vis_level, SceUID *vector, SceSize num, SceSize *ret_num);
    SceSize align;
 
    int data0C;
 
    int data10;
 
} SceAllocOpt;
 
 
 
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);
 
 
 
 
</source>
 
</source>
  
=== sceKernelFreeForKernel ===
+
=== sceGUIDGetUIDVectorWeakByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xABAB0FAB
+
| 3.60-3.61 || 0x59F577E8
 
|-
 
|-
| 3.65 || 0x4233C16D
+
| 3.63 || 0xE9957329
 
|}
 
|}
<source lang="C">
 
void sceKernelFreeForKernel(void *ptr);
 
</source>
 
  
=== sceGUIDGetObjectWithClassForKernel ===
+
<source lang="C">int sceGUIDGetUIDVectorWeakByClassForKernel(int a1, int a2, int a3, int a4, void *pUIDVectorWeak);</source>
 +
 
 +
=== sceGUIDGetEntryForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x7ABFA9A7
+
| 3.60-3.61 || 0x45F2A59C
 +
|-
 +
| 3.63 || 0xFF464A49
 
|}
 
|}
  
Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.
+
<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceGUIDEntry **ppEntry);</source>
  
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>
+
=== sceGUIDGetEntryInfoAllForKernel ===
 
 
=== SceSysmemForKernel_C38D61FC ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xC38D61FC
+
| 0.990-3.61 || 0x2A79C51C
 +
|-
 +
| 3.63 || 0x3BF0DE65
 
|}
 
|}
  
Calls [[#SceSysmemForDriver_89A44858]].
+
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUID uid, void *vectors, uint32_t nVector, void *out);</source>
  
=== sceUIDGetObjectForKernel ===
+
=== sceGUIDGetEntryInfoClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xC4893914
+
| 0.990-3.61 || 0xE90CFD62
 +
|-
 +
| 3.63 || 0x71E934DB
 
|}
 
|}
  
Calls [[#sceGUIDGetObjectForDriver]].
+
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID uid, int a2, void *vectors, int nVector, void *pInfoClass);</source>
  
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source>
+
=== scePUIDGetEntryInfoAllForKernel ===
 
 
=== scePUIDReferObjectForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x620E00E7
+
| 3.60-3.61 || 0x2770A7D7
 +
|-
 +
| 3.63 || 0x3C3005EE
 
|}
 
|}
  
<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source>
+
<source lang="C">int scePUIDGetEntryInfoAllForKernel(int a1, int a2, int a3, int a4, int a5, void *pInfoAll);</source>
  
=== SceSysmemForKernel_7C797940 ===
+
=== sceKernelGetPhyPartKernelForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x7C797940
+
| 0.931-3.61 || 0x4D38F861
 +
|-
 +
| 3.63-3.65 || 0x0164D817
 
|}
 
|}
  
Calls [[#SceSysmemForKernel_620E00E7]] or [[#sceGUIDReferObjectForDriver]].
+
return gpPhyPartKernel;
 +
 
 +
<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source>
  
=== sceKernelCopyFromUser32DomainForKernel ===
+
=== sceKernelGetPhyPartToolForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xD530399A
+
| 0.990-3.61 || 0xF8E95A5A
 
|-
 
|-
| 3.60 || not present
+
| 3.63-3.65 || 0x0B1B4ACA
 
|}
 
|}
  
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source>
+
<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source>
  
=== sceKernelCopyToUserProcTextDomainForKernel ===
+
=== sceKernelGetPhyPartGameForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x30931572
+
| 3.60-3.61 || 0xB60568F9
 
|-
 
|-
| 3.65 || 0x2995558D
+
| 3.63-3.65 || 0x62800A6B
 
|}
 
|}
  
Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.
+
<source lang="C">void *sceKernelGetPhyPartGameForKernel(void);</source>
  
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.
+
=== sceKernelSetPhyPartGameForKernel ===
 
 
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>
 
 
 
=== sceKernelCopyToUserTextDomainForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x67BAD5B4
+
| 3.60-3.61 || 0x77876A8D
 
|-
 
|-
| 3.65 || 0x5EF1DAAF
+
| 3.63-3.65 || 0x3753C584
 
|}
 
|}
  
This is a guessed name. Temp names were sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.
+
<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source>
  
Similar to [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]], but performed in the current address space.
+
=== sceKernelPhyMemLowAllocForKernel ===
 
 
In 3.60, 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"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || Not present
+
| 0.931-3.61 || 0x5E169FEF
 
|-
 
|-
| 3.60 || 0xA6F95838
+
| 3.63 || 0xEA98CCE1
 
|}
 
|}
  
This is a guessed name. Temp names were sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.
+
Allocate a range of physically contiguous "pages" from a PhyMemLow object.
  
Similar to [[SceSysmem#sceKernelCopyToUserTextDomainForKernel|sceKernelCopyToUserTextDomain]], but doesn't perform any DCache clean.
+
<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>
  
Uses the same DACR, 0x15450FC3, for the copy.
+
=== sceKernelPhyMemLowPA2VAForKernel ===
 
 
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source>
 
 
 
=== sceUIDtoObjectForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xED221825
+
| 0.931-3.61 || 0x0FD6B756
 
|-
 
|-
| 3.65 || 0xFA6C098C
+
| 3.63 || 0x2CFD8C9A
 
|}
 
|}
  
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].
+
<source lang="C">
 +
// type must be 0x10002
 +
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
 +
</source>
  
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>
+
=== sceKernelGetPhyMemLowInfoForKernel ===
 
 
=== sceGUIDOpenByGUIDForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCF53EEE4
+
| 0.931-0.990 || 0x06A4DA6C
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceGUIDGetUIDVectorByClassForKernel ===
+
<source lang="C">
 +
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
 +
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);
 +
</source>
 +
 
 +
=== sceKernelPhyMemLowFreeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xEC7D36EF
+
| 0.931-3.61 || 0x18B99FDD
 
|-
 
|-
| 3.65 || 0x52137FA3
+
| 3.63 || 0x844DF3DA
 
|}
 
|}
  
Copy uid to vector by referring to all objects created by cls.
+
Free a range of physical "pages" from a PhyMemLow object.
  
 
<source lang="C">
 
<source lang="C">
/*
+
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)
* num - max copy number
+
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);
*/
 
int sceGUIDGetUIDVectorByClassForKernel(SceClass *cls, int vis_level, SceUID *vector, SceSize num, SceSize *ret_num);
 
 
</source>
 
</source>
  
=== scePUIDGetUIDVectorByClassForKernel ===
+
=== sceKernelAllocMemBlockByCommandForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB16D5136
+
| 3.60-3.61 || 0xCA91B9D5
 +
|-
 +
| 3.63 || 0x455B0A4C
 
|}
 
|}
  
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]].
+
<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">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, int a2, int a3, int a4, int a5, SceSize *ret_num);</source>
+
int sceKernelAllocMemBlockByCommandForKernel(SceKernelMemBlockAllocCommand *pCommand);
 +
</source>
  
=== sceUIDGetUIDVectorByClassForKernel ===
+
=== sceKernelAllocSimpleMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xA2F03233
+
| 0.990-3.61 || 0xF81F4672
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x814CDCC5
 
|}
 
|}
  
It is simply a wrapper for [[#sceGUIDGetUIDVectorByClassForKernel]].
+
<source lang="C">
 
+
typedef struct SceKernelSimpleMemBlock {
=== sceKernelCreateAddressSpaceForKernel ===
+
char unk_0[0x14];
{| class="wikitable"
+
void *base;
 +
char unk_18[0x14];
 +
void *PhyPage;
 +
SceSize size;
 +
} SceKernelSimpleMemBlock;
 +
 
 +
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);
 +
</source>
 +
 
 +
=== sceKernelGetSimpleMemBlockBaseForKernel ===
 +
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x4A3737F0
+
| 0.990-3.61 || 0x0A8D14EC
 
|-
 
|-
| 3.65 || 0x8EE89D2C
+
| 3.63 || 0x39D5A3B7
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>
// type: 0x10000001 (user AS)
 
// name: maybe titleid
 
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelAddressSpace *pAS);
 
</source>
 
  
=== sceKernelDeleteAddressSpaceForKernel ===
+
=== sceKernelGetMemBlockInfoAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF2D7FE3A
+
| 3.60-3.61 || 0xFEF54604
 
|-
 
|-
| 3.65 || 0x4A2E421D
+
| 3.63 || 0x1D19C864
 
|}
 
|}
  
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>
+
<source lang="C">int sceKernelGetMemBlockInfoAllForKernel(void *pPart, int level, void *pInfoBuffer);</source>
  
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
+
=== sceKernelGetMemBlockInfoSimpleForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x89CE1F31
+
| 0.990-3.61 || 0x2364A170
 
|-
 
|-
| 3.65 || 0x36159CF5
+
| 3.63 || 0xBA441FD0
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source>
+
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source>
 +
 
 +
=== sceKernelGetMemBlockTypeForKernel ===
  
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x67955EE9
+
| 3.60-3.61 || 0x289BE3EC
 
|-
 
|-
| 3.65 || 0x7DF07D60
+
| 3.63 || 0xD44FE44B
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, int a2, SceKernelPhyMemPart *pPhyMemPart);</source>
+
<source lang="c">
 +
/***
 +
* Gets the memory block type of a memory block
 +
*
 +
* @param[in] uid - SceUID of the memory block
 +
* @param[out] type - Type of the memory block identified by uid
 +
*
 +
* @return 0 on success, < 0 on error.
 +
*/
 +
int sceKernelGetMemBlockTypeForKernel(SceUID uid, unsigned int *type);</source>
  
=== sceKernelAddressSpaceUnmapForKernel ===
+
=== sceKernelFreeSimpleMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xCE72839E
+
| 0.990-3.61 || 0xA1FFA2C9
 +
|-
 +
| 3.63 || 0xA4DB88E1
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int unk, void *vbase, SceSize size);</source>
+
=== sceKernelAllocPartitionMemBlockForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931-3.60 || 0x5FFE4B79
 +
|-
 +
| 3.65 || 0x6DB45017
 +
|}
  
3.60:
+
Temp name was sceKernelAllocSystemCallTableForKernel.
<source lang="C">int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int flags, int unk, uint32_t paddr, SceSize size);</source>
 
  
Example: in SceSysStateMgr:
 
 
<source lang="C">
 
<source lang="C">
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
+
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);
 
 
</source>
 
</source>
  
3.60
+
=== sceKernelPartitionGetInfoForKernel ===
 
+
{| class="wikitable"
<source lang="C">
+
|-
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
+
! Version !! NID
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);
 
</source>
 
 
 
=== sceKernelAddressSpaceVAtoPAForKernel ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| 3.60-3.61 || 0x7BE4D3D1
 
|-
 
|-
| 0.990-3.60 || 0xF2179820
+
| 3.63 || 0xFB101B86
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, uint32_t mode, void *pVA, void **pPA);</source>
+
<source lang="C">int sceKernelPartitionGetInfoForKernel(SceUID part_id, void *pInfo);</source>
  
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
+
=== sceKernelGetPhyPageResetForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCC7BB240
+
| 0.990-3.61 || 0xEB350679
 +
|-
 +
| 3.63 || 0x8FD11E02
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>
+
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>
 
 
=== sceKernelFindClassByNameForKernel ===
 
  
 +
=== sceKernelFreePhyPageForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x62989905
+
| 0.990-3.61 || 0x00BC5B4A
 
|-
 
|-
| 3.65 || 0x7D87F706
+
| 3.63 || 0x193A9D2F
 
|}
 
|}
  
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **class);</source>
+
<source lang="C">int sceKernelFreePhyPageForKernel(uint32_t a1, int pPage, uint32_t a3, uint32_t a4);</source>
 
 
=== sceKernelGetMemBlockTypeForKernel ===
 
  
 +
=== sceGUIDKernelCreateForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x289BE3EC
+
| 0.990 || 0xE6FAD50A
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">
+
Create a GUID with default attribute (0x30000).
/***
 
* 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>
 
  
=== sceKernelGetUIDHeapClassForKernel ===
+
<source lang="C">int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
  
 +
=== sceGUIDKernelCreateWithAttrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4CCA935D
+
| 0.990-3.61 || 0x53E1FFDE
 +
|-
 +
| 3.63 || 0x6D26B066
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source>
+
Create a GUID with the specified attribute.
  
=== sceKernelGetUIDMemBlockClassForKernel ===
+
<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 || 0xAF729575
+
| 0.990-0.995 || not present
 +
|-
 +
| 0.996-3.60 || 0xDF0288D7
 +
|-
 +
| 3.65 || 0xFB6390CE
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</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>
  
=== sceKernelGetUIDDLinkClassForKernel ===
+
=== SceSysmemForKernel_BD33EDDF ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC105604E
+
| 0.931 || 0xBD33EDDF
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source>
+
Gets thread's name. Returns 0 on success.
 +
 
 +
<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source>
  
=== SceSysmemForKernel_7BD56D6D ===
+
=== scePUIDGetAttrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || not present
+
| 3.60-3.61 || 0x86E83C0D
|-
 
| 3.60 || 0x7BD56D6D
 
 
|-
 
|-
| 3.65 || 0xCEBC4963
+
| 3.63 || 0x96BD47D1
 
|}
 
|}
  
Official name might be sceKernelSetAddressSpaceName.
+
<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID uid, void *pAttr);</source>
  
Used by [[SceProcessmgr]].
+
=== scePUIDReleaseObjectForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990-3.61 || 0x3FCA782B
 +
|-
 +
| 3.63 || 0xCE561224
 +
|}
  
<source lang="C">int SceSysmemForKernel_7BD56D6D(SceUID guid, const char *name);</source>
+
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID puid);</source>
  
=== SceSysmemForKernel_9C7B62AB ===
+
=== scePUIDGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x9C7B62AB
+
| 0.990 || not present
 +
|-
 +
| 3.60-3.61 || 0x12ED88AE
 +
|-
 +
| 3.63 || 0x857701D4
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
// name max length is 31 characters
+
// pInfo size is 0x14 bytes
int SceSysmemForKernel_9C7B62AB(const char *name, SceUInt32 flag);
+
int scePUIDGetInfoForKernel(SceUID pid, SceUID puid, void *pInfo);
 
</source>
 
</source>
  
=== SceSysmemForKernel_153A08A0 ===
+
=== sceGUIDGetVisibilityLevelForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x153A08A0
+
| 3.60-3.61 || 0xC69666C3
 +
|-
 +
| 3.63 || 0x4E923101
 
|}
 
|}
  
Add 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.
+
=== sceGUIDSetVisibilityLevelForKernel ===
 
 
<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source>
 
 
 
=== SceSysmemForKernel_942D15FC ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x942D15FC
+
| 3.60-3.61 || 0xCB8D03C0
 +
|-
 +
| 3.63 || 0xE8CC2166
 
|}
 
|}
  
Used to get GUID by name.
+
Sets visibilityLevel into guid's GUIDEntry.
  
<source lang="C">int SceSysmemForKernel_942D15FC(const char *name, SceSize namelen, int unk_guid_global_value);</source>
+
<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source>
  
=== SceSysmemForKernel_C8672A3D ===
+
=== sceGUIDFindByObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC8672A3D
+
| 0.990-3.61 || 0x95ABFDC3
 +
|-
 +
| 3.63 || 0xEC90AA11
 
|}
 
|}
  
<source lang="C">int SceSysmemForKernel_C8672A3D(int unk);</source>
+
<source lang="C">
 +
// return value: to reverse, should be either SceUID guid or void* pObj
 +
int sceGUIDFindByObjectForKernel(uint32_t uid_or_ptr);
 +
</source>
  
=== sceKernelInitProcessMemoryForKernel ===
+
=== sceGUIDFindByNameForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE7938BFB
+
| 3.60-3.61 || 0xCEBA8031
 +
|-
 +
| 3.63 || 0xBDE00106
 
|}
 
|}
  
This is guessed name.
+
<source lang="C">
 +
// return value: to reverse, should be either SceUID guid or void* pObj
 +
int sceGUIDFindByNameForKernel(const char* name);
 +
</source>
  
Used by [[SceProcessmgr]]
+
=== SceSysmemForKernel_942D15FC ===
 
 
<source lang="C">int sceKernelInitProcessMemoryForKernel(void);</source>
 
 
 
== SceSysmemForDriver ==
 
 
 
=== sceUIDGetDefaultClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xFE28F5EB
+
| 3.60-3.61 || 0x942D15FC
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xEB48682E
 
|}
 
|}
  
<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source>
+
Computes MurmurHash.
 +
 
 +
Used to get GUID by name.
 +
 
 +
<source lang="C">int SceSysmemForKernel_942D15FC(const char* key, SceSize len, SceUInt32 seed);</source>
  
=== sceUIDtoClassForDriver ===
+
=== sceGUIDFindByNameAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x65B9B393
+
| 3.60-3.61 || 0x4B5C85AC
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xF49C0BE8
 
|}
 
|}
  
Calls sceGUIDtoClassForKernel.
+
<source lang="C">
 +
// return value: to reverse, should be either SceUID guid or void* pObj
 +
int sceGUIDFindByNameAllForKernel(const char* name);
 +
</source>
  
<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source>
+
=== sceGUIDGetPIDForKernel ===
 
 
=== scePUIDGetClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xE9728A12
+
| 3.60-3.61 || 0xCF5A2311
 +
|-
 +
| 3.63 || 0xBD42A0FC
 
|}
 
|}
  
Temp name was sceKernelGetClassForPidForUidForDriver.
+
Returns Process ID for guid.
  
<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID uid, SceClass **ppClass);</source>
+
<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source>
  
=== sceGUIDGetClassForDriver ===
+
=== sceGUIDSetPIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC74B0152
+
| 3.60-3.61 || 0x812E7A53
 +
|-
 +
| 3.63 || 0x46DF8C8A
 
|}
 
|}
  
Temp name was sceKernelGetClassForUidForDriver.
+
Sets Process ID for guid.
  
<source lang="c">int sceGUIDGetClassForDriver(SceUID uid, SceClass **ppClass);</source>
+
<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source>
  
=== sceUIDClassInitForDriver ===
+
=== sceGUIDSetCNOAForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xE6D75E99
+
| 3.60-3.61 || 0x8D6AF468
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x5EDDEEB5
 
|}
 
|}
  
<source lang="C">int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);</source>
+
Setting Class Name Object Attr.
  
=== scePUIDOpenByNameWithExactClassForDriver ===
+
=== sceGUIDSetForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xB800123C
+
| 0.931-3.61 || 0xD7B323EB
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xBF275C5A
 
|}
 
|}
  
This is a guessed name. Previous name was <code>add_heap</code>.
+
Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.
  
Equivalent to [[SceSysmem#scePUIDOpenByNameWithClassForDriver|scePUIDOpenByNameWithClass]], but the object's class must match exactly the provided <code>pClass</code>.
+
<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
  
<source lang="C">SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID process, const char *name, const SceClass *pClass);</source>
+
=== sceUIDReferObjectWithLevelForKernel ===
 
 
=== sceKernelIsSubclassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x6484D03E
+
| 0.990 || 0xF79B52B2
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">SceBool sceKernelIsSubclassForDriver(SceClass *parentClass, SceClass *class);</source>
+
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source>
  
=== sceGUIDNameForDriver ===
+
=== sceGUIDReferForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xB2BB6216
+
| 3.60-3.61 || 0xB3E2AA7A
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x188C8742
 
|}
 
|}
  
<source lang="C">char *sceGUIDNameForDriver(SceUID id);</source>
+
<source lang="C">int sceGUIDReferForKernel(SceUID pid, int guid);</source>
  
=== sceKernelGetMemBlockAllocSizeForDriver ===
+
=== sceKernelAllocForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x63E5754B
+
| 0.990-3.60 || 0xC0A4D2F3
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0x85571907
 
|}
 
|}
  
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID id, SceSize *size);</source>
+
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>
  
=== sceUIDGetClassInfoAllForDriver ===
+
=== sceKernelAllocWithOptForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x3EF32C6C
+
| 3.60-3.61 || 0xA2CD1697
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0xCF3C3F7A
 
|}
 
|}
  
<source lang="C">int sceUIDGetClassInfoAllForDriver(SceClassInfo_0990 *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);</source>
+
<source lang="C">
 +
 
 +
typedef struct SceAllocOpt {
 +
    SceSize size;  // 0x14
 +
    SceSize data04; // maybe len align?
 +
    SceSize align;
 +
    int data0C;
 +
    int data10;
 +
} SceAllocOpt;
 +
 
 +
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);
 +
 
 +
</source>
  
=== sceUIDCloseForDriver ===
+
=== sceKernelFreeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x32C5F628
+
| 0.990-3.60 || 0xABAB0FAB
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0x4233C16D
 
|}
 
|}
 +
<source lang="C">
 +
void sceKernelFreeForKernel(void *ptr);
 +
</source>
  
if (a2 & 0x40000000) == 0 calls sceGUIDCloseForDriver else scePUIDCloseForDriver.
+
=== SceSysmemForKernel_C38D61FC ===
 
 
<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source>
 
 
 
=== SceSysmemForDriver_F09A7D09 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xF09A7D09
+
| 0.990 || 0xC38D61FC
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Calls sceGUIDCloseForDriver.
+
Calls [[#SceSysmemForDriver_89A44858]].
  
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source>
+
=== sceUIDGetObjectForKernel ===
 
 
=== switch_ttb_for_pid ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69 || 0x6F2ACDAE
+
| 0.931-0.990 || 0xC4893914
 
|-
 
|-
| 1.80 || Removed
+
| 3.60 || not present
 
|}
 
|}
  
Changes the TTBR to point to the tables for a given PID.
+
Calls [[#sceGUIDGetObjectForDriver]].
  
<source lang="c">int switch_ttb_for_pid(SceUID pid);</source>
+
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source>
  
=== sceKernelAllocHeapMemoryForDriver ===
+
=== scePUIDReferObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x7B4CB60A
+
| 0.990-3.61 || 0x620E00E7
 +
|-
 +
| 3.63 || 0x2C15615F
 
|}
 
|}
  
Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.
+
<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source>
  
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.
+
=== SceSysmemForKernel_7C797940 ===
 
 
<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source>
 
 
 
=== sceKernelAllocHeapMemoryFromGlobalHeapForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7750CEA7
+
| 0.931-0.990 || 0x7C797940
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uid = -1 (global heap <code>uid</code>).
+
Calls [[#SceSysmemForKernel_620E00E7]] or [[#sceGUIDReferObjectForDriver]].
  
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapForDriver(SceSize size);</source>
+
=== sceUIDtoObjectForKernel ===
 
 
=== sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0B4ED16A
+
| 0.990-3.60 || 0xED221825
 +
|-
 +
| 3.65 || 0xFA6C098C
 
|}
 
|}
  
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uid = -1 (global heap <code>uid</code>).
+
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].
  
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
+
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>
  
=== sceKernelAllocHeapMemoryWithOptForDriver ===
+
=== sceKernelVSlotMapProcMemoryForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB415B5A8
+
| 3.60-3.61 || 0xFAD03241
 +
|-
 +
| 3.63 || 0x14D3807B
 
|}
 
|}
  
Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.
+
<source lang="C">int sceKernelVSlotMapProcMemoryForKernel(SceUID pid, void* addr, SceSize size, SceUInt32 flag, SceKernelVSlot *pVslot, int *pBaseAddrOrOffset);</source>
  
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
+
=== sceKernelVSlotUnmapProcMemoryForKernel ===
 
 
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
 
 
=== sceKernelAllocHeapMemoryWithOptionForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x49D4DD9B
+
| 3.60-3.61 || 0x789CD5BF
 +
|-
 +
| 3.63 || 0x4EEF69C7
 
|}
 
|}
  
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.
+
<source lang="C">int sceKernelVSlotUnmapProcMemoryForKernel(SceKernelVSlot* pVslot);</source>
  
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
+
=== SceSysmemForKernel_48D87E17 ===
 
 
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
 
 
=== sceKernelAllocMemBlockWithInfoForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xD44F464D
+
| 0.990-3.61 || 0x48D87E17
 +
|-
 +
| 3.63 || 0x1380E144
 
|}
 
|}
  
Temp name was sceKernelAllocMemBlockExtForDriver.
+
=== SceSysmemForKernel_9C7B62AB ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990-3.61 || 0x9C7B62AB
 +
|-
 +
| 3.63 || 0x634D0D0C
 +
|}
  
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source>
+
<source lang="C">
 +
// name max length is 31 characters
 +
int SceSysmemForKernel_9C7B62AB(const char *name, SceUInt32 flag);
 +
</source>
  
=== sceKernelAllocMemBlockForDriver ===
+
=== SceSysmemForKernel_C8672A3D ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.65 || 0xC94850C9
+
| 3.60-3.61 || 0xC8672A3D
 +
|-
 +
| 3.63 || 0xABA5313C
 
|}
 
|}
  
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">int SceSysmemForKernel_C8672A3D(int unk);</source>
 
 
To allocate a kernel RW block of memory, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW</code>.
 
 
 
To allocate a block of memory with a specific physical address, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW</code> or <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW</code>, <code>pOpt->attr = 2</code>, and <code>pOpt->paddr = physical address</code>.
 
 
 
To allocate a block of memory that is kernel executable, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.
 
 
 
To allocate a block of memory that is physically contiguous, specify <code>type = 0x30808006</code>, <code>pOpt->attr = 0x200004</code> and an alignment to <code>pOpt->alignment</code>.
 
 
 
To allocate a block of memory inside the CDRAM, specify <code>type = 0x40404006</code>.
 
  
<source lang="c">SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source>
+
=== SceSysmemForKernel_01DE3AB7 ===
 
 
=== sceKernelAllocMemBlockForDebuggerForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-1.50 || 0x59F3159C
+
| 3.60-3.61 || 0x01DE3AB7
 +
|-
 +
| 3.63 || 0xF57A97A0
 
|}
 
|}
  
Same as sceKernelAllocMemBlockForDriver but authorize null pOpt.
+
Return 0.
 
 
<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source>
 
  
=== sceKernelCreateClassForDriver ===
+
=== SceSysmemForKernel_07FEBBCA ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x61317102
+
| 3.60-3.61 || 0x07FEBBCA
 +
|-
 +
| 3.63 || 0xDCEF10B2
 
|}
 
|}
  
<source lang="c">int sceKernelCreateClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);</source>
+
=== SceSysmemForKernel_080BA2F3 ===
 
 
=== sceKernelCreateHeapForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9328E0E8
+
| 3.60-3.61 || 0x080BA2F3
 +
|-
 +
| 3.63 || 0x2F526AB8
 
|}
 
|}
  
The heap pool is thread safe.
+
=== SceSysmemForKernel_114E6476 ===
 
 
<source lang="C">
 
// pOpt can be NULL
 
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);
 
</source>
 
 
 
=== sceUIDKernelCreateForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x7FC849B1
+
| 3.60-3.61 || 0x114E6476
 
|-
 
|-
| 3.60 || not present
+
| 3.63 || 0x5FD15C6E
 
|}
 
|}
  
Calls sceGUIDKernelCreateForKernel.
+
=== SceSysmemForKernel_FDC0EA11 ===
 
 
Create a UID with default attribute (0x30000).
 
 
 
<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
 
 
 
=== sceUIDKernelCreate2ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0xFDC0EA11
 
|-
 
|-
| 3.60 || 0x56A13E90
+
| 3.63 || 0x8EE8B917
 
|}
 
|}
  
Temp name was sceKernelCreateUidObj2ForDriver.
+
=== SceSysmemForKernel_F1433852 ===
 
 
Create a UID with default attribute (0x30000).
 
 
 
<source lang="c">SceUID sceUIDKernelCreate2ForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
 
 
 
=== sceGUIDCreateForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x89A44858
+
| 3.60-3.61 || 0xF1433852
 +
|-
 +
| 3.63 || 0x0B36F7F9
 
|}
 
|}
  
Temp name was sceKernelCreateUidObjForUidForDriver.
+
=== SceSysmemForKernel_ECF9435A ===
 
 
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>
 
 
 
=== scePUIDOpenByGUIDForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xBF209859
+
| 3.60-3.61 || 0xECF9435A
 +
|-
 +
| 3.63 || 0xFCB5745A
 
|}
 
|}
  
Temp name was sceKernelCreateUserUidForDriver.
+
=== SceSysmemForKernel_ECC68E7B ===
 
 
<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID uid);</source>
 
 
 
=== scePUIDOpenByGUIDWithFlagsForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCED1547B
+
| 3.60-3.61 || 0xECC68E7B
 +
|-
 +
| 3.63 || 0x05822B82
 
|}
 
|}
  
Temp name was sceKernelCreateUserUidForClassForDriver.
+
=== SceSysmemForKernel_EC1293D2 ===
 
 
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source>
 
 
 
=== scePUIDOpenByNameForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x513B9DDD
+
| 3.60-3.61 || 0xEC1293D2
 +
|-
 +
| 3.63 || 0x40965FD1
 
|}
 
|}
  
Temp name was sceKernelCreateUserUidForNameForDriver.
+
=== SceSysmemForKernel_E68A9F1B ===
 
 
<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source>
 
 
 
=== scePUIDOpenByNameWithClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x8DA0BCA5
+
| 3.60-3.61 || 0xE68A9F1B
 +
|-
 +
| 3.63 || 0x1DE4953F
 
|}
 
|}
  
Equivalent to [[SceSysmem#scePUIDOpenByNameForDriver|scePUIDOpenByNameForDriver]], but object's class is checked to be a subclass of provided <code>pClass</code> before opening.
+
=== SceSysmemForKernel_D514BB56 ===
 
 
<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(ScePID process, const char *name, SceClass *pClass);</source>
 
 
 
=== sceKernelDeleteHeapForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0xD6437637
+
| 3.60-3.61 || 0xD514BB56
 +
|-
 +
| 3.63 || 0x4E6D8BC3
 
|}
 
|}
  
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source>
+
=== SceSysmemForKernel_131CEF52 ===
 
 
=== sceGUIDCloseForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x047D32F2
+
| 3.60-3.61 || 0x131CEF52
 +
|-
 +
| 3.63 || 0x17D3D4BD
 
|}
 
|}
  
Temp name was sceKernelDeleteUidForDriver.
+
=== SceSysmemForKernel_17F1AA22 ===
 
 
<source lang="C">int sceGUIDCloseForDriver(SceUID uid);</source>
 
 
 
=== scePUIDCloseForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x84A4AF5E
+
| 3.60-3.61 || 0x17F1AA22
 +
|-
 +
| 3.63 || 0x31FA81B5
 
|}
 
|}
  
Temp name was sceKernelDeleteUserUidForDriver.
+
Return 0.
  
<source lang="c">int scePUIDCloseForDriver(SceUInt32 flag_or_addr_or_pid, SceUID uid);</source>
+
=== SceSysmemForKernel_1E11F41D ===
 
 
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF3BBE2E1
+
| 3.60-3.61 || 0x1E11F41D
 +
|-
 +
| 3.63 || 0x6DBDA03B
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.
+
Return 0.
  
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source>
+
=== SceSysmemForKernel_210DB518 ===
 
 
=== sceKernelFindMemBlockByAddrForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x8A1742F6
+
| 3.60-3.61 || 0x210DB518
 +
|-
 +
| 3.63 || 0x1F84FE44
 
|}
 
|}
  
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source>
+
<source lang="C">SceUIDPartitionObject *SceSysmemForKernel_1F84FE44(void *pAS, int pindex);</source>
  
=== sceKernelFindProcMemBlockByAddrForDriver ===
+
=== SceSysmemForKernel_21285F40 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x857F1D5A
+
| 3.60-3.61 || 0x21285F40
 +
|-
 +
| 3.63 || 0x7CDB7655
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockByAddrForPidForDriver.
+
=== SceSysmemForKernel_22708F14 ===
 
 
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source>
 
 
 
=== sceKernelIsAccessibleRangeForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9C78064C
+
| 3.60-3.61 || 0x22708F14
 +
|-
 +
| 3.63 || 0x456ECB54
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockForDriver.
+
=== SceSysmemForKernel_22A26637 ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60-3.61 || 0x22A26637
 +
|-
 +
| 3.63 || 0xAD19285A
 +
|}
  
Also exported as [[#sceKernelIsAccessibleRangeForDebugger]].
+
=== SceSysmemForKernel_22F79E82 ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60-3.61 || 0x22F79E82
 +
|-
 +
| 3.63 || 0x201E970B
 +
|}
  
?Returns 0 on success (if is accessible range)?
+
=== SceSysmemForKernel_2658EE0A ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60-3.61 || 0x2658EE0A
 +
|-
 +
| 3.63 || 0x2C7B8D65
 +
|}
  
<source lang="c">int sceKernelIsAccessibleRangeForDriver(SceUInt32 mode, const void *pVA, SceSize size);</source>
+
Return 0.
  
=== sceKernelIsAccessibleRangeProcForDriver ===
+
=== SceSysmemForKernel_C6F04370 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9F6E45E3
+
| 3.60-3.61 || 0xC6F04370
 +
|-
 +
| 3.63 || 0x02DAD732
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockForPidForDriver.
+
=== SceSysmemForKernel_C2F7D8A4 ===
 
 
Also exported as [[#sceKernelIsAccessibleRangeProcForDebugger]].
 
 
 
?Returns 0 on success (if is accessible range)?
 
 
 
<source lang="C">int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source>
 
 
 
=== sceKernelFirstDifferentBlock32UserForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBDA6E42B
+
| 3.60-3.61 || 0xC2F7D8A4
 +
|-
 +
| 3.63 || 0x797C858B
 
|}
 
|}
  
<source lang="c">int sceKernelFirstDifferentBlock32UserForDriver(unsigned int *ptr, int value, int byte_size);</source>
+
=== SceSysmemForKernel_C0BF149E ===
 
 
=== sceKernelFirstDifferentBlock32UserForPidForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x8334454F
+
| 3.60-3.61 || 0xC0BF149E
 +
|-
 +
| 3.63 || 0x100B4029
 
|}
 
|}
  
Looks for an integer in userspace.
+
=== SceSysmemForKernel_BF04FC83 ===
 
 
<source lang="c">int sceKernelFirstDifferentBlock32UserForPidForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);</source>
 
 
 
=== sceKernelFirstDifferentBlock64UserForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBB3B02C2
+
| 3.60-3.61 || 0xBF04FC83
 +
|-
 +
| 3.63 || 0xCE16AD91
 
|}
 
|}
  
<source lang="c">int sceKernelFirstDifferentBlock64UserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source>
+
=== SceSysmemForKernel_BF0294E4 ===
 
 
=== sceKernelFirstDifferentBlock64UserForPidForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE83855FD
+
| 3.60-3.61 || 0xBF0294E4
 +
|-
 +
| 3.63 || 0x791D6205
 
|}
 
|}
  
<source lang="c">int sceKernelFirstDifferentBlock64UserForPidForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source>
+
=== SceSysmemForKernel_BC2E2B2B ===
 
 
=== sceKernelFreeHeapMemoryForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x3EBCE343
+
| 3.60-3.61 || 0xBC2E2B2B
 +
|-
 +
| 3.63 || 0x42834422
 
|}
 
|}
  
Temp name was sceKernelMemPoolFreeForDriver.
+
Return 0.
  
<source lang="c">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source>
+
=== SceSysmemForKernel_B8D769C6 ===
 
 
=== sceKernelFreeHeapMemoryFromGlobalHeapForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xFB817A59
+
| 3.60-3.61 || 0xB8D769C6
 +
|-
 +
| 3.63 || 0xDBEACE2C
 
|}
 
|}
  
<source lang="c">int sceKernelFreeHeapMemoryFromGlobalHeapForDriver(void *ptr);</source>
+
=== SceSysmemForKernel_B543A23C ===
 
 
=== sceKernelFreeMemBlockForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.65 || 0x009E1C61
+
| 3.60-3.61 || 0xB543A23C
 +
|-
 +
| 3.63 || 0x9F1A9AA6
 
|}
 
|}
  
<source lang="C">int sceKernelFreeMemBlockForDriver(SceUID uid);</source>
+
=== SceSysmemForKernel_B339A865 ===
 
 
=== sceKernelGetMemBlockPARangeForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x98C15666
+
| 3.60-3.61 || 0xB339A865
 +
|-
 +
| 3.63 || 0x320E907F
 
|}
 
|}
  
Previous name was sceKernelGetMemBlockAddrPairForUidForDriver
+
Returns 0.
 
 
Returns the physical address and size (pRange) of the memory block if it is physically continuous.
 
 
 
<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source>
 
  
=== sceKernelGetMemBlockBaseForDriver ===
+
=== SceSysmemForKernel_AD5A83E3 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA841EDDA
+
| 3.60-3.61 || 0xAD5A83E3
 +
|-
 +
| 3.63 || 0xBF70207B
 
|}
 
|}
  
<source lang="C">
+
=== SceSysmemForKernel_A88F6D88 ===
/**
 
* @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>
 
 
 
=== sceKernelGetMemBlockVBaseForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB81CF0A3
+
| 3.60-3.61 || 0xA88F6D88
 +
|-
 +
| 3.63 || 0x441E6BE9
 
|}
 
|}
  
Temp name was sceKernelGetMemBlockKernelPageForDriver.
+
=== SceSysmemForKernel_A504BA60 ===
 
 
<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source>
 
 
 
=== sceKernelGetMemBlockMappedBaseForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0B1FD5C3
+
| 3.60-3.61 || 0xA504BA60
 +
|-
 +
| 3.63 || 0xCAB15F74
 
|}
 
|}
  
<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source>
+
=== SceSysmemForKernel_9C53F457 ===
 
 
=== sceKernelGetMemBlockPAVectorForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x19A51AC7
+
| 3.60-3.61 || 0x9C53F457
 +
|-
 +
| 3.63 || 0x9C23DFF7
 
|}
 
|}
  
Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.
+
=== SceSysmemForKernel_8FB73A29 ===
 
 
<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source>
 
 
 
=== scePUIDGetEntryHeapNameForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x09896EB7
+
| 3.60-3.61 || 0x8FB73A29
 +
|-
 +
| 3.63 || 0x17F12DCE
 
|}
 
|}
  
Real name might be scePUIDGetEntryHeapNameForDriver. Temp name was sceKernelGetNameForPidByUidForDriver.
+
=== SceSysmemForKernel_8B07BB52 ===
 
 
<source lang="C">int scePUIDGetEntryHeapNameForDriver(SceUID pid, SceUID uid, char **pName);</source>
 
 
 
=== sceGUIDGetNameForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA78755EB
+
| 3.60-3.61 || 0x8B07BB52
 +
|-
 +
| 3.63 || 0x16A54BFE
 
|}
 
|}
  
This is a guessed name, but near. Temp name was sceKernelGetNameForUidForDriver.
+
=== SceSysmemForKernel_876A7F44 ===
 
 
<source lang="C">int sceGUIDGetNameForDriver(SceUID guid, char **pName);</source>
 
 
 
=== sceGUIDGetName2ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE655852F
+
| 3.60-3.61 || 0x876A7F44
 +
|-
 +
| 3.63 || 0xF3DB2D71
 
|}
 
|}
  
This is a guessed name, but near. Temp name was sceKernelGetNameForUid2ForDriver.
+
=== SceSysmemForKernel_7FD757FE ===
 
 
<source lang="C">const char* sceGUIDGetName2ForDriver(SceUID guid);</source>
 
 
 
=== sceUIDtoObjectWrapperForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xAB7AC3D1
+
| 3.60-3.61 || 0x7FD757FE
 +
|-
 +
| 3.63 || 0x660DC18A
 
|}
 
|}
  
This is a guessed name.
+
=== SceSysmemForKernel_7DC46969 ===
 
 
Calls [[#sceUIDtoObjectForKernel]].
 
 
 
<source lang="C">SceKernelObject *sceUIDtoObjectWrapperForDriver(SceUID uid);</source>
 
 
 
=== sceGUIDGetObjectForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0FC24464
+
| 3.60-3.61 || 0x7DC46969
 +
|-
 +
| 3.63 || 0x8450BFF7
 
|}
 
|}
  
Temp name was sceKernelGUIDGetObjectForDriver.
+
Returns 1.
 
 
<source lang="c">int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
 
  
=== scePUIDGetObjectForDriver ===
+
=== SceSysmemForKernel_72E7BFAC ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xFE6D7FAE
+
| 3.60-3.61 || 0x72E7BFAC
 +
|-
 +
| 3.63 || 0x93D0A183
 
|}
 
|}
  
Temp name was sceKernelGetObjectForPidForUidForDriver.
+
=== SceSysmemForKernel_71869119 ===
 
+
{| class="wikitable"
<source lang="c">int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);</source>
 
 
 
=== sceGUIDReferObjectForDriver ===
 
{| class="wikitable"
 
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0F5C84B7
+
| 3.60-3.61 || 0x71869119
 +
|-
 +
| 3.63 || 0x6E82D5A0
 
|}
 
|}
  
Temp name was sceKernelGetObjectForUidForDriver.
+
=== SceSysmemForKernel_6BB6AF94 ===
 
 
<source lang="c">int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
 
 
 
=== sceGUIDReferObjectWithLevelForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60-3.61 || 0x6BB6AF94
 
|-
 
|-
| 3.60 || 0xF6DB54BA
+
| 3.63 || 0x03A2CAF0
 
|}
 
|}
  
Temp name was sceKernelGetObjectForUidForAttrForDriver.
+
=== SceSysmemForKernel_68CB9266 ===
 
 
<source lang="c">int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);</source>
 
 
 
=== sceGUIDReferObjectWithClassLevelForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x77066FD1
+
| 3.60-3.61 || 0x68CB9266
 +
|-
 +
| 3.63 || 0x3717C322
 
|}
 
|}
  
<source lang="c">int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);</source>
+
=== SceSysmemForKernel_6427560F ===
 
 
=== sceGUIDReferObjectWithClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x00ED6C14
+
| 3.60-3.61 || 0x6427560F
 +
|-
 +
| 3.63 || 0xB591E49F
 
|}
 
|}
  
Temp name was sceKernelGetObjForUidForDriver.
+
=== SceSysmemForKernel_64133268 ===
 
 
<source lang="c">int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
 
 
 
=== sceGUIDReferObjectWithSubclassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x72A98D17
+
| 3.60-3.61 || 0x64133268
 +
|-
 +
| 3.63 || 0x40870E74
 
|}
 
|}
  
Temp name was sceKernelGetObjectForUidForClassTreeForDriver.
+
=== SceSysmemForKernel_61C2AA52 ===
 
 
<source lang="c">int sceGUIDReferObjectWithSubclassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
 
 
 
=== sceKernelVAtoPAForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x8D160E65
+
| 3.60-3.61 || 0x61C2AA52
 +
|-
 +
| 3.63 || 0x48D2E408
 
|}
 
|}
  
Temp name was sceKernelGetPaddrForDriver.
+
=== SceSysmemForKernel_60735311 ===
 
 
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(void *pVA, void **pPA);</source>
 
 
 
=== sceKernelProcVAtoPAForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xC51934BD
+
| 3.60-3.61 || 0x60735311
 +
|-
 +
| 3.63 || 0xD124075A
 
|}
 
|}
  
<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source>
+
=== SceSysmemForKernel_571660AA ===
 
 
=== sceKernelProcModeVAtoPAForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x61A67D32
+
| 3.60-3.61 || 0x571660AA
 +
|-
 +
| 3.63 || 0x93344755
 
|}
 
|}
  
Temp name was sceKernelGetPaddrForPidForDriver.
+
=== SceSysmemForKernel_53A2E272 ===
 
 
<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, SceUInt32 mode, void *pVA, void **pPA);</source>
 
 
 
=== sceKernelVARangeToPAVectorForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xE68BEEBD
+
| 3.60-3.61 || 0x53A2E272
 +
|-
 +
| 3.63 || 0x1FF2749A
 
|}
 
|}
  
Temp name was sceKernelGetPaddrListForDriver.
+
=== SceSysmemForKernel_48750A5A ===
 
 
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 sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
 
 
 
=== sceKernelGetPaddrListForLargePageForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x08A8A7E8
+
| 3.60-3.61 || 0x48750A5A
 +
|-
 +
| 3.63 || 0x7F7D5C4A
 
|}
 
|}
  
This is a guessed and bad name.
+
=== SceSysmemForKernel_46A5CB84 ===
 
+
{| class="wikitable"
<source lang="c">int sceKernelGetPaddrListForLargePageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
+
|-
 +
! Version !! NID
 +
|-
 +
| 3.60-3.61 || 0x46A5CB84
 +
|-
 +
| 3.63 || 0xC3F9607E
 +
|}
  
=== sceKernelGetPaddrListForSmallPageForDriver ===
+
=== SceSysmemForKernel_43DFCE89 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x16844CE6
+
| 3.60-3.61 || 0x43DFCE89
 +
|-
 +
| 3.63 || 0xBD625136
 
|}
 
|}
  
This is a guessed and bad name.
+
=== SceSysmemForKernel_3EC2345B ===
 
 
<source lang="c">int sceKernelGetPaddrListForSmallPageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
 
 
 
=== sceKernelVARangeToPARangeForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0xAE36C775
+
| 3.60-3.61 || 0x3EC2345B
 +
|-
 +
| 3.63 || 0x811C452B
 
|}
 
|}
  
Temp name was sceKernelGetPaddrPairForDriver.
+
=== SceSysmemForKernel_3B75CBED ===
 
 
<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
 
 
 
=== sceKernelGetPaddrPairForLargePageForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x32257A24
+
| 3.60-3.61 || 0x3B75CBED
 +
|-
 +
| 3.63 || 0x857408DA
 
|}
 
|}
  
This is a guessed and bad name.
+
=== SceSysmemForKernel_3203AE64 ===
 
 
<source lang="c">int sceKernelGetPaddrPairForLargePageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);</source>
 
 
 
=== sceKernelGetPaddrPairForSmallPageForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB3575090
+
| 3.60-3.61 || 0x3203AE64
 +
|-
 +
| 3.63 || 0x66489B4B
 
|}
 
|}
  
This is a guessed and bad name.
+
=== SceSysmemForKernel_2791F109 ===
 
 
<source lang="c">int sceKernelGetPaddrPairForSmallPageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);</source>
 
 
 
=== sceKernelVAtoPABySWForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x65419BD3
+
| 3.60-3.61 || 0x2791F109
 +
|-
 +
| 3.63 || 0x5C0FC6BE
 
|}
 
|}
  
Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.
+
== SceSysmemForDriver ==
  
<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source>
+
=== sceKernelProcessGetContextForDriver ===
 
 
=== sceKernelGetPidContextForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 4,164: Line 4,335:
 
|}
 
|}
  
<source lang="c">
+
This is a guessed name.
typedef struct SceKernelProcessContext {
 
  SceUInt32 TTBR1;
 
  SceUInt32 DACR;
 
  SceUInt32 CONTEXTIDR;
 
} SceKernelProcessContext;
 
  
int sceKernelGetPidContextForDriver(SceUID pid, SceKernelProcessContext **ppCtx);
+
<source lang="c">int sceKernelProcessGetMMUContextForDriver(SceUID pid, SceKernelMMUContext **ppCtx);</source>
</source>
 
  
=== sceKernelGetUIDClassForDriver ===
+
=== sceKernelProcessSwitchContextForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x85336A1C
+
| 3.60 || 0x2D711589
 
|}
 
|}
  
This is a guessed and bad name.
+
This is a guessed name.
  
<source lang="C">SceClass *sceKernelGetUIDClassForDriver(void);</source>
+
<source lang="c">int sceKernelProcessSwitchMMUContextForDriver(SceKernelMMUContext *new_context, SceKernelMMUContext *prev_context);</source>
  
=== sceKernelGetUnknownValidPASForDriver ===
+
=== scePUIDOpenByGUIDForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC9928F5E
+
| 0.931-3.60 || 0xBF209859
 
|}
 
|}
  
This is a guessed and bad name. Temp name was sceKernelGetUnknownValidPhysAddressSpaceForDriver.
+
Temp name was sceKernelCreateUserUidForDriver.
  
<source lang="C">int sceKernelGetUnknownValidPASForDriver(void **start, void **end);</source>
+
<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID uid);</source>
  
=== sceKernelProcIsPAWithinSameSectionForDriver ===
+
=== scePUIDOpenByGUIDWithFlagsForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF4AD89D8
+
| 0.990-3.60 || 0xCED1547B
 
|}
 
|}
  
This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinSameSectionForUidForDriver.
+
Temp name was sceKernelCreateUserUidForClassForDriver.
  
<source lang="C">int sceKernelProcIsPAWithinSameSectionForDriver(SceUID pid, int permission_type, void *pVA, SceSize len);</source>
+
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source>
  
=== sceKernelIsPAWithinUnknownValidPASForDriver ===
+
=== scePUIDOpenByNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA7C0D1FC
+
| 0.931-3.60 || 0x513B9DDD
 
|}
 
|}
  
This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver.
+
Temp name was sceKernelCreateUserUidForNameForDriver.
  
<source lang="C">int sceKernelIsPAWithinUnknownValidPASForDriver(void *pVA);</source>
+
<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source>
  
=== scePUIDtoGUIDWithClassForDriver ===
+
=== scePUIDOpenByNameWithClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-3.60 || 0x8DA0BCA5
|-
 
| 3.60 || 0x184172B1
 
 
|}
 
|}
  
Temp name was sceKernelKernelUidForUserUidForClassForDriver.
+
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 scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID uid, SceClass *pClass);</source>
+
<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(ScePID process, const char *name, SceClass *pClass);</source>
  
=== scePUIDtoGUIDForDriver ===
+
=== scePUIDOpenByNameWithExactClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x45D22597
+
| 0.990 || 0xB800123C
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelKernelUidForUserUidForDriver.
+
This is a guessed name. Previous name was <code>add_heap</code>.
  
Process UID to Global UID.
+
Equivalent to [[SceSysmem#scePUIDOpenByNameWithClassForDriver|scePUIDOpenByNameWithClass]], but the object's class must match exactly the provided <code>pClass</code>.
  
<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID uid);</source>
+
<source lang="C">SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID process, const char *name, const SceClass *pClass);</source>
  
=== sceKernelPartitionMapMemBlockForDriver ===
+
=== scePUIDCloseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x58D21746
+
| 0.990-3.60 || 0x84A4AF5E
 
|}
 
|}
  
Temp name was sceKernelMapBlockUserVisibleForDriver.
+
Temp name was sceKernelDeleteUserUidForDriver.
  
<source lang="c">int sceKernelPartitionMapMemBlockForDriver(SceUID uid);</source>
+
<source lang="c">int scePUIDCloseForDriver(SceUInt32 pid, SceUID uid);</source>
  
=== sceKernelMapBlockUserVisibleWithFlagForDriver ===
+
=== scePUIDSetNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x04059C4B
+
| 0.990-3.60 || 0x12624884
 
|}
 
|}
  
<source lang="c">int sceKernelMapBlockUserVisibleWithFlagForDriver(SceUID uid, int some_flag);</source>
+
Temp name was sceKernelSetNameForPidForUidForDriver.
 +
 
 +
<source lang="c">int scePUIDSetNameForDriver(SceUID pid, SceUID uid, const char *name);</source>
  
=== sceKernelUserMapForDriver ===
+
=== scePUIDGetObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x278BC201
+
| 0.990-3.60 || 0xFE6D7FAE
 
|}
 
|}
  
Temp name was sceKernelMapUserBlockDefaultTypeForDriver.
+
Temp name was sceKernelGetObjectForPidForUidForDriver.
  
Assigns type 0.
+
<source lang="c">int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);</source>
  
<source lang="C">SceUID sceKernelUserMapForDriver(const char *name, int permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source>
+
=== scePUIDtoGUIDForDriver ===
 
 
=== sceKernelProcUserMapForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0091D74D
+
| 0.990-3.60 || 0x45D22597
 
|}
 
|}
  
Temp name was sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly the real name.
+
Temp name was sceKernelKernelUidForUserUidForDriver.
  
Assigns type 0.
+
Process UID to Global UID.
  
<source lang="C">SceUID sceKernelProcUserMapForDriver(SceUID pid, const char *name, int permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source>
+
<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID uid);</source>
  
=== sceKernelUserMapWithFlagsForDriver ===
+
=== scePUIDtoGUIDWithClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 4,307: Line 4,472:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 1.50-3.60 || 0x7D4F8B5F
+
| 3.60 || 0x184172B1
 
|}
 
|}
  
Temp name was sceKernelMapUserBlockForDriver.
+
Temp name was sceKernelKernelUidForUserUidForClassForDriver.
  
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">SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID uid, SceClass *pClass);</source>
  
<source lang="c">
+
=== scePUIDGetEntryHeapNameForDriver ===
// this signature is for FW 1.50-1.69
 
int sceKernelUserMapWithFlagsForDriver(int 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, int permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
 
</source>
 
 
 
=== sceKernelDecRefCountMemBlockForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF50BDC0C
+
| 0.990-3.60 || 0x09896EB7
 
|}
 
|}
  
Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.
+
Real name might be scePUIDGetEntryHeapNameForDriver. Temp name was sceKernelGetNameForPidByUidForDriver.
  
<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source>
+
<source lang="C">int scePUIDGetEntryHeapNameForDriver(SceUID pid, SceUID uid, char **pName);</source>
  
=== sceKernelMemBlockGetInfoExForDriver ===
+
=== scePUIDGetClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x24A99FFF
+
| 0.990-3.60 || 0xE9728A12
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockGetInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *info);</source>
+
Temp name was sceKernelGetClassForPidForUidForDriver.
 +
 
 +
<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID uid, SceClass **ppClass);</source>
  
=== sceKernelGetMemBlockInfoForDriver ===
+
=== sceUIDKernelCreateForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA73CFFEF
+
| 0.990 || 0x7FC849B1
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.
+
Calls [[#sceGUIDKernelCreateForKernel]].
 +
 
 +
Create a UID with default attribute (0x30000).
  
<source lang="c">int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source>
+
<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
  
=== sceKernelMemBlockGetSomeSizeForDriver ===
+
=== sceUIDKernelCreate2ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x78337B62
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x56A13E90
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockGetSomeSizeForDriver(SceUID uid, int *some_size);</source>
+
Temp name was sceKernelCreateUidObj2ForDriver.
 +
 
 +
Create a UID with default attribute (0x30000).
 +
 
 +
<source lang="c">SceUID sceUIDKernelCreate2ForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
  
=== sceKernelIncRefCountMemBlockForDriver ===
+
=== sceUIDOpenByNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xEAF3849B
+
| 0.931-0.990 || 0x796881D6
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.
+
Calls [[#sceGUIDOpenByNameForDriver]].
  
<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source>
+
<source lang="c">SceUID sceUIDOpenByNameForDriver(const char *name);</source>
  
=== sceKernelUserUnmapForDriver ===
+
=== sceUIDCloseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x00575B00
+
| 0.990 || 0x32C5F628
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelMemBlockReleaseForDriver.
+
if (flag_or_addr_or_pid & 0x40000000) == 0 calls [[#sceGUIDCloseForDriver]] else [[#scePUIDCloseForDriver]].
  
<source lang="c">int sceKernelUserUnmapForDriver(SceUID uid);</source>
+
<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source>
  
=== sceKernelMemBlockType2MemtypeForDriver ===
+
=== SceSysmemForDriver_F09A7D09 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x20C811FA
+
| 0.990 || 0xF09A7D09
 +
|-
 +
| 3.60-3.74 || not present
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source>
+
Calls [[#sceGUIDCloseForDriver]].
 +
 
 +
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source>
  
=== sceKernelMemBlockTypeGetPrivilegesForDriver ===
+
=== sceUIDGetDefaultClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x6A0792A3
+
| 0.931-0.990 || 0xFE28F5EB
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source>
+
<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source>
  
=== sceKernelMemBlockTypeGetUnknownForDriver ===
+
=== sceUIDtoObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCB0F3A33
+
| 0.990 || 0xAB7AC3D1
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockTypeGetUnknownForDriver(SceKernelMemBlockType type);</source>
+
This is a guessed name.
 +
 
 +
Calls [[#sceUIDtoObjectForKernel]].
 +
 
 +
<source lang="C">SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);</source>
  
=== sceKernelUnlockRangeForDriver ===
+
=== sceUIDtoClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x75C70DE0
+
| 0.990 || 0x65B9B393
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelMemRangeReleaseForDriver.
+
Calls [[#sceGUIDtoClassForKernel]].
  
<source lang="c">int sceKernelUnlockRangeForDriver(void *addr, SceSize size);</source>
+
<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source>
  
=== sceKernelUnlockRangeProcForDriver ===
+
=== sceUIDClassInitForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA8525B06
+
| 0.931-0.990 || 0xE6D75E99
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelMemRangeReleaseForPidForDriver.
+
<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">int sceKernelUnlockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source>
+
=== sceUIDGetClassInfoAllForDriver ===
 
 
=== sceKernelUnlockRangeWithPermForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x22CBE925
+
| 0.990 || 0x3EF32C6C
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelMemRangeReleaseWithPermForDriver.
+
<source lang="C">int sceUIDGetClassInfoAllForDriver(SceClassInfo_0990 *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);</source>
  
Decrease references to pages.
+
=== sceGUIDCreateForDriver ===
 
 
<source lang="c">int sceKernelUnlockRangeWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);</source>
 
 
 
=== sceKernelLockRangeForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x59A4402F
+
| 0.990-3.60 || 0x89A44858
 
|}
 
|}
  
Temp name was sceKernelMemRangeRetainForDriver.
+
Temp name was sceKernelCreateUidObjForUidForDriver.
 +
 
 +
Create a GUID with default attribute (0x30000) for the specified UID.
  
<source lang="c">int sceKernelLockRangeForDriver(void *addr, SceSize size);</source>
+
<source lang="c">SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID guid, SceKernelObject **ppEntry);</source>
  
=== sceKernelLockRangeProcForDriver ===
+
=== sceGUIDOpenByNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x659586BF
+
| 0.931-3.60 || 0xD76E7452
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelMemRangeRetainForPidForDriver.
+
Temp name was sceKernelOpenUidForNameForDriver.
  
<source lang="c">int sceKernelLockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source>
+
<source lang="c">SceUID sceGUIDOpenByNameForDriver(const char *name);</source>
  
=== sceKernelLockRangeWithPermForDriver ===
+
=== sceGUIDCloseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBC0A1D60
+
| 0.990-3.60 || 0x047D32F2
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelMemRangeRetainWithPermForDriver.
+
Temp name was sceKernelDeleteUidForDriver.
  
Increase references to pages.
+
<source lang="C">int sceGUIDCloseForDriver(SceUID uid);</source>
  
<source lang="c">int sceKernelLockRangeWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);</source>
+
=== sceGUIDGetClassForDriver ===
 
 
=== sceKernelCopyToUserProcDomainForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.69 || 0x571D2739
+
| 0.990-3.60 || 0xC74B0152
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Temp names were sceKernelRoMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserRoForDriver.
+
Temp name was sceKernelGetClassForUidForDriver.
  
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">int sceGUIDGetClassForDriver(SceUID uid, SceClass **ppClass);</source>
  
<source lang="c">SceInt32 sceKernelCopyToUserProcDomainForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
+
=== sceGUIDSetNameForDriver ===
 
 
=== sceKernelCopyToUserForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x6D88EF8A
+
| 1.50-3.60 || 0x4CFA4100
 
|}
 
|}
  
Temp name was sceKernelMemcpyKernelToUserForDriver.
+
Temp name was sceKernelSetObjectForUidForDriver. Wrongfully named scePUIDSetNameForDriver.
  
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>.
+
Calls the same routine as [[SceSysmem#sceGUIDSetForKernel|sceGUIDSetForKernel]], but passes NULL for pClass and pObject.
  
<source lang="c">SceInt32 sceKernelCopyToUserForDriver(void *uaddr, const void *kaddr, SceSize size);</source>
+
<source lang="c">SceInt32 sceGUIDSetNameForDriver(SceUID guid, const char *name);</source>
  
=== sceKernelCopyToUserProcForDriver ===
+
=== sceGUIDNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x6B825479
+
| 0.990 || 0xB2BB6216
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserForDriver.
+
<source lang="C">char* sceGUIDNameForDriver(SceUID id);</source>
  
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyToUserForDriver|sceKernelCopyToUser]].
+
=== sceGUIDGetNameForDriver ===
 
 
<source lang="c">SceInt32 sceKernelProcCopyToUserForDriver(ScePID pid, void *uaddr, const void *kaddr, SceSize size);</source>
 
 
 
=== sceKernelReadUserForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xE08F3967
+
| 3.60 || 0xA78755EB
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);</source>
+
This is a guessed name, but near. Temp name was sceKernelGetNameForUidForDriver.
 +
 
 +
<source lang="C">int sceGUIDGetNameForDriver(SceUID guid, char **pName);</source>
  
=== sceKernelCopyFromUserForDriver ===
+
=== sceGUIDGetName2ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xBC996A7A
+
| 3.60 || 0xE655852F
 
|}
 
|}
  
Temp name was sceKernelMemcpyUserToKernelForDriver.
+
This is a guessed name, but near. Temp name was sceKernelGetNameForUid2ForDriver.
  
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">const char* sceGUIDGetName2ForDriver(SceUID guid);</source>
  
<source lang="c">SceInt32 sceKernelCopyFromUserForDriver(void *kaddr, const void *uaddr, SceSize size);</source>
+
=== sceGUIDGetObjectForDriver ===
 
 
=== sceKernelCopyFromUserProcForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x605275F8
+
| 0.990-3.60 || 0x0FC24464
 
|}
 
|}
  
Temp names were sceKernelMemcpyUserToKernelForPidForDriver, sceKernelProcCopyFromUserForDriver.
+
Temp name was sceKernelGUIDGetObjectForDriver.
  
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUser]].
+
<source lang="c">int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
  
<source lang="c">SceInt32 sceKernelCopyFromUserProcForDriver(SceUID pid, void *dst, void *src, SceSize size);</source>
+
=== sceGUIDReferObjectForDriver ===
 
 
=== sceKernelUserCopyForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60 || 0x0F5C84B7
|-
 
| 1.50-3.60 || 0x1BD44DD5
 
 
|}
 
|}
  
Temp name was sceKernelMemcpyUserToUserForDriver.
+
Temp name was sceKernelGetObjectForUidForDriver.
  
<source lang="C">int sceKernelUserCopyForDriver(void *dst, const void *src, SceSize size);</source>
+
<source lang="c">int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
  
=== sceKernelProcUserCopyForDriver ===
+
=== sceGUIDReferObjectWithLevelForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 4,601: Line 4,772:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 1.50-3.60 || 0x8E086C33
+
| 3.60 || 0xF6DB54BA
 
|}
 
|}
  
Temp name was sceKernelMemcpyUserToUserForPidForDriver.
+
Temp name was sceKernelGetObjectForUidForAttrForDriver.
  
<source lang="c">int sceKernelProcUserCopyForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
+
<source lang="c">int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);</source>
  
=== sceKernelStrnlenFromUserForDriver ===
+
=== sceGUIDReferObjectWithClassLevelForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present (in ForKernel)
+
| 0.990-3.60 || 0x77066FD1
|-
 
| 0.940-0.990 || 0xFF06898A
 
|-
 
| 1.50-3.60 || not present
 
 
|}
 
|}
  
<source lang="C">SceSize sceKernelStrnlenFromUserForDriver(const char *s, SceSize maxlen);</source>
+
<source lang="c">int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);</source>
  
=== sceKernelStrnlenUserForDriver ===
+
=== sceGUIDReferObjectWithClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990-3.60 || 0x00ED6C14
|-
 
| 1.50-3.60 || 0xB429D419
 
 
|}
 
|}
  
<source lang="c">SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);</source>
+
Temp name was sceKernelGetObjForUidForDriver.
 +
 
 +
<source lang="c">int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
  
=== sceKernelProcStrnlenUserForDriver ===
+
=== sceGUIDReferObjectWithSubclassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990-3.60 || 0x72A98D17
|-
 
| 1.50-3.60 || 0x9929EB07
 
 
|}
 
|}
  
<source lang="c">SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);</source>
+
Temp name was sceKernelGetObjectForUidForClassTreeForDriver.
 +
 
 +
<source lang="c">int sceGUIDReferObjectWithSubclassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
  
=== sceKernelProcUserStrcpyForDriver ===
+
=== sceGUIDReleaseObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || 0xEBCB3970
+
| 0.990-3.60 || 0x149885C4
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);</source>
+
Temp name was sceKernelUidReleaseForDriver.
 +
 
 +
<source lang="c">int sceGUIDReleaseObjectForDriver(SceUID uid);</source>
  
=== sceKernelStrncpyFromUserSpecialForDriver ===
+
=== sceKernelGetUIDClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || 0x7440BCDA
+
| 3.60 || 0x85336A1C
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>
+
This is a guessed and bad name.
 +
 
 +
<source lang="C">SceClass *sceKernelGetUIDClassForDriver(void);</source>
  
=== sceKernelStrncpyToUserSpecialForDriver ===
+
=== sceKernelIsSubclassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || 0x369355F1
+
| 0.990 || 0x6484D03E
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>
+
<source lang="C">SceBool sceKernelIsSubclassForDriver(SceClass *parentClass, SceClass *class);</source>
  
=== sceKernelStrncpyFromUserForDriver ===
+
=== SceSysmemForDriver_6F2ACDAE ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present (present but not exported)
+
| 1.69 || 0x6F2ACDAE
 
|-
 
|-
| 0.940-0.990 || 0xE6D5EFE4
+
| 1.80-3.74 || not present
|-
 
| 1.50-3.60 || not present
 
 
|}
 
|}
  
Returns 0 on success.
+
Temp name was switch_ttb_for_pid.
 +
 
 +
Changes the TTBR to point to the tables for a given PID.
  
<source lang="C">int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);</source>
+
<source lang="c">int SceSysmemForDriver_6F2ACDAE(SceUID pid);</source>
  
=== sceKernelStrncpyFromUserForDriver ===
+
=== sceKernelAllocMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-3.65 || 0xC94850C9
|-
 
| 1.50-3.60 || 0xDB3EC244
 
 
|}
 
|}
  
<source lang="c">int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);</source>
+
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.
  
=== sceKernelProcStrncpyFromUserForDriver ===
+
To allocate a kernel RW block of memory, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW</code>.
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 0.990 || not present
 
|-
 
| 1.50-3.60 || 0x75AAF178
 
|}
 
  
<source lang="c">int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</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>.
 +
 
 +
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>
  
=== sceKernelStrncpyToUserForDriver ===
+
=== sceKernelAllocMemBlockForDebuggerForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.940-1.50 || 0x59F3159C
|-
 
| 1.50-3.60 || 0x80BD6FEB
 
 
|}
 
|}
  
<source lang="c">int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);</source>
+
Same as [[#sceKernelAllocMemBlockForDriver]] but authorizes null pOpt.
 +
 
 +
<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source>
  
=== sceKernelProcStrncpyToUserForDriver ===
+
=== sceKernelAllocMemBlockWithInfoForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990-3.60 || 0xD44F464D
|-
 
| 1.50-3.60 || 0xFED82F2D
 
 
|}
 
|}
  
Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.
+
Temp name was sceKernelAllocMemBlockExtForDriver.
  
<source lang="c">int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source>
+
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source>
  
=== sceUIDOpenByNameForDriver ===
+
=== sceKernelFreeMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x796881D6
+
| 0.931-3.65 || 0x009E1C61
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Calls sceGUIDOpenByNameForDriver.
+
<source lang="C">int sceKernelFreeMemBlockForDriver(SceUID uid);</source>
  
<source lang="c">SceUID sceUIDOpenByNameForDriver(const char *name);</source>
+
=== sceKernelFindMemBlockByAddrForDriver ===
 
 
=== sceGUIDOpenByNameForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xD76E7452
+
| 0.990-3.60 || 0x8A1742F6
 
|}
 
|}
  
Temp name was sceKernelOpenUidForNameForDriver.
+
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source>
  
<source lang="c">SceUID sceGUIDOpenByNameForDriver(const char *name);</source>
+
=== sceKernelFindProcMemBlockByAddrForDriver ===
 
 
=== sceKernelRemapMemBlockForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.05 || 0x8D332AE1 (in ForKernel?)
+
| 0.990-3.60 || 0x857F1D5A
|-
 
| 1.50-3.60 || not present
 
 
|}
 
|}
  
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 sceKernelFindMemBlockByAddrForPidForDriver.
  
<source lang="c">int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
+
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source>
  
=== sceKernelPartialRemapMemBlockForDriver ===
+
=== sceKernelGetMemBlockAllocSizeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990 || 0x63E5754B
 
|-
 
|-
| 1.50-3.60 || 0xDFE2C8CB
+
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelRemapBlockForDriver, sceKernelRemapMemBlockForDriver.
+
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID uid, SceSize *size);</source>
  
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>.
+
=== sceKernelMemBlockGetSomeSizeForDriver ===
 
 
<source lang="c">int sceKernelPartialRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
 
 
 
=== scePUIDSetNameForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x12624884
+
| 3.60 || 0x78337B62
 
|}
 
|}
  
Temp name was sceKernelSetNameForPidForUidForDriver.
+
<source lang="c">int sceKernelMemBlockGetSomeSizeForDriver(SceUID uid, int *some_size);</source>
  
<source lang="c">int scePUIDSetNameForDriver(SceUID pid, SceUID uid, const char *name);</source>
+
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===
 
 
=== sceGUIDSetNameForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.50-3.60 || 0x4CFA4100
+
| 0.990-3.60 || 0xF3BBE2E1
 
|}
 
|}
  
Temp name was sceKernelSetObjectForUidForDriver. Wrongfully named scePUIDSetNameForDriver.
+
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.
  
Calls the same routine as [[SceSysmem#sceGUIDSetForKernel|sceGUIDSetForKernel]], but passes NULL for pClass and pObject.
+
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source>
  
<source lang="c">SceInt32 sceGUIDSetNameForDriver(SceUID guid, const char *name);</source>
+
=== sceKernelGetMemBlockPARangeForDriver ===
 
 
=== sceKernelSwitchPidContextForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2D711589
+
| 0.990-3.60 || 0x98C15666
 
|}
 
|}
  
<source lang="c">int sceKernelSwitchPidContextForDriver(SceKernelProcessContext *new_context, SceKernelProcessContext *prev_context);</source>
+
Previous name was sceKernelGetMemBlockAddrPairForUidForDriver
 +
 
 +
Returns the physical address and size (pRange) of the memory block if it is physically continuous.
  
=== sceGUIDReleaseObjectForDriver ===
+
<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source>
 +
 
 +
=== sceKernelGetMemBlockBaseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x149885C4
+
| 0.990-3.60 || 0xA841EDDA
 
|}
 
|}
  
Temp name was sceKernelUidReleaseForDriver.
+
<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>
  
<source lang="c">int sceGUIDReleaseObjectForDriver(SceUID uid);</source>
+
=== sceKernelGetMemBlockVBaseForDriver ===
 
 
=== sceKernelUnmapMemBlockForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xFFCD9B60
+
| 3.60 || 0xB81CF0A3
 
|}
 
|}
  
<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</source>
+
Temp name was sceKernelGetMemBlockKernelPageForDriver.
 +
 
 +
<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source>
  
=== sceKernelGetPhysicalMemoryTypeForDriver ===
+
=== sceKernelGetMemBlockMappedBaseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0AAA4FDD
+
| 3.60 || 0x0B1FD5C3
 
|}
 
|}
  
Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver
+
<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source>
  
<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source>
+
=== sceKernelGetMemBlockPAVectorForDriver ===
 
 
=== some_memblock_operation ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x13805CA8
+
| 0.990-3.60 || 0x19A51AC7
 
|}
 
|}
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.
 +
 
 +
<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source>
  
=== some_memblock_operation ===
+
=== sceKernelGetMemBlockInfoForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x16713BE8
+
| 0.990-3.60 || 0xA73CFFEF
 
|}
 
|}
  
Same as above but with different flags.
+
Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source>
  
=== some_memblock_operation ===
+
=== sceKernelGetMemBlockInfoExForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x16713BE8
+
| 3.60 || 0x24A99FFF
 
|}
 
|}
  
Same as above but with different flags.
+
This is a guessed name.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelGetMemBlockInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *pInfo);</source>
  
=== some_memblock_operation ===
+
=== sceKernelDecRefCountMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4C584B29
+
| 0.990-3.60 || 0xF50BDC0C
 
|}
 
|}
  
Same as above but with different flags.
+
Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source>
  
=== some_memblock_operation ===
+
=== sceKernelIncRefCountMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x6C76AD89
+
| 0.990-3.60 || 0xEAF3849B
 
|}
 
|}
  
Same as above but with different flags.
+
Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source>
  
=== some_memblock_operation ===
+
=== sceKernelMemBlockType2MemtypeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8C43B052
+
| 0.931-3.60 || 0x20C811FA
 
|}
 
|}
  
Same as above but with different flags.
+
<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source>
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
=== sceKernelMemBlockTypeGetPrivilegesForDriver ===
 
 
=== sceKernelGetMemBlockProcessForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x1EFC96EA
+
| 3.60 || 0x6A0792A3
 
|}
 
|}
  
<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source>
+
<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source>
  
=== memblock_related_operation ===
+
=== sceKernelMemBlockTypeGetUnknownForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x64DBE472
+
| 0.990-3.60 || 0xCB0F3A33
 
|}
 
|}
  
<source lang="c">int memblock_related_operation(SceUID uid, int a2);</source>
+
<source lang="c">int sceKernelMemBlockTypeGetUnknownForDriver(SceKernelMemBlockType type);</source>
  
=== memblock_related_operation ===
+
=== sceKernelPartitionMapMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x987EE587
+
| 0.990-3.60 || 0x58D21746
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelMapBlockUserVisibleForDriver.
struct result_987ee587
 
{
 
  int unk0;
 
  int unk4;
 
  int unk8;
 
  int unkC;
 
  int unk10;
 
};
 
  
int memblock_related_operation(SceUID uid, result_987ee587 *result);
+
<source lang="c">int sceKernelPartitionMapMemBlockForDriver(SceUID uid);</source>
</source>
 
  
=== SceSysmemForDriver_856FA2E3 ===
+
=== sceKernelRemapMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x856FA2E3
+
| 0.931-1.05 || 0x8D332AE1 (in ForKernel?)
 +
|-
 +
| 1.50-3.60 || not present
 
|}
 
|}
  
Seems related to heap.
+
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 SceSysmemForDriver_856FA2E3(SceUID uid);</source>
+
<source lang="c">int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
  
=== sceKernelGetPhyMemInfoForDriver ===
+
=== sceKernelPartialRemapMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x89475192
+
| 0.990 || not present
 +
|-
 +
| 1.50-3.60 || 0xDFE2C8CB
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelRemapBlockForDriver, sceKernelRemapMemBlockForDriver.
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60
 
  SceSize size;  // Size of this structure
 
  void* pbase;  // Physical base 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
+
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>.
#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);
+
<source lang="c">int sceKernelPartialRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
</source>
 
  
=== sceKernelVerifyHeapForDriver ===
+
=== sceKernelUnmapMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC50A9C0D
+
| 3.60 || 0xFFCD9B60
 
|}
 
|}
  
<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);</source>
+
<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</source>
  
== SceSysmemForDebugger ==
+
=== sceKernelGetPhysicalMemoryTypeForDriver ===
 
 
This library was removed somewhere between FWs 1.692 and 3.60.
 
 
 
=== sceKernelPhysicalAddressSpaceStartForDebugger ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x6AE2188F
+
| 0.990-3.60 || 0x0AAA4FDD
|-
 
| 1.691-3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelPhysicalAddressSpaceStartForDebugger(void);</source>
+
Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver
 +
 
 +
<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source>
  
=== sceKernelGetPhysicalAddressSpaceForDebugger ===
+
=== sceKernelGetPhyMemInfoForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xE8905626
+
| 0.931-3.60 || 0x89475192
|-
 
| 1.691-3.60 || not present
 
 
|}
 
|}
  
In FW 0.931, it calls sceKernelPhysicalAddressSpaceStartForDebugger.
+
<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;
 +
 
 +
// 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">void *sceKernelGetPhysicalAddressSpaceForDebugger(void);</source>
+
SceInt32 sceKernelGetPhyMemInfoForDriver(SceUInt32 pindex, SceKernelPhyMemInfo *pInfo);
 +
</source>
  
=== sceKernelIsAccessibleRangeProcForDebugger ===
+
=== SceSysmemForDriver_13805CA8 ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.691 || 0x01DFC193
+
| 3.60 || 0x13805CA8
|-
 
| 3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeProcForDriver]].
 
 
|}
 
|}
  
?Returns 0 on success (if is accessible range)?
+
Does some MemBlock partial operations.
 +
 
 +
<source lang="c">
 +
#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
  
<source lang="C">int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source>
+
int SceSysmemForDriver_13805CA8(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);
 +
</source>
  
=== sceKernelIsAccessibleRangeForDebugger ===
+
=== SceSysmemForDriver_16713BE8 ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.691 || 0xD027761F
+
| 3.60 || 0x16713BE8
|-
 
| 3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeForDriver]].
 
 
|}
 
|}
  
?Returns 0 on success (if is accessible range)?
+
Does some MemBlock partial operations.
 
 
<source lang="C">int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);</source>
 
  
== SceSysmem ==
+
Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
  
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.
+
<source lang="c">int SceSysmemForDriver_16713BE8(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
  
=== sceKernelMapMemBlock ===
+
=== SceSysmemForDriver_4C584B29 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.69 || 0x7B763A21
+
| 3.60 || 0x4C584B29
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceKernelRemapMemBlock ===
+
Does some MemBlock partial operations.
 +
 
 +
Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
 +
 
 +
<source lang="c">int SceSysmemForDriver_4C584B29(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
 +
 
 +
=== SceSysmemForDriver_6C76AD89 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.69 || 0x3B29E0F5
+
| 3.60 || 0x6C76AD89
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceKernelPartialMapMemBlock ===
+
Does some MemBlock partial operations.
 +
 
 +
Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
 +
 
 +
<source lang="c">int SceSysmemForDriver_6C76AD89(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
 +
 
 +
=== SceSysmemForDriver_8C43B052 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60 || 0x8C43B052
|-
 
| 1.69 || 0xC0A59868
 
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceKernelUnmapMemBlock ===
+
Does some MemBlock partial operations.
 +
 
 +
Same as [[#SceSysmemForDriver_13805CA8]] but with different flags.
 +
 
 +
<source lang="c">int SceSysmemForDriver_8C43B052(SceUID uid, void* vbase, SceSize vsize, SceUInt32 flag);</source>
 +
 
 +
=== sceKernelGetMemBlockProcessForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.69 || 0xEE30D976
+
| 0.990-3.60 || 0x1EFC96EA
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source>
+
<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source>
  
=== sceKernelPartialUnmapMemBlock ===
+
=== sceKernelMemBlockGetVirPageForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60 || 0x64DBE472
|-
 
| 1.69 || 0xCA99929B
 
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceKernelGetMemBlockInfoByRange ===
+
This is a guessed name.
 +
 
 +
Does some MemBlock related operations.
 +
 
 +
<source lang="c">int sceKernelMemBlockGetVirPageForDriver(SceUID uid, void *a2);</source>
 +
 
 +
=== sceKernelMemBlockToPAVectorForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60 || 0x987EE587
|-
 
| 0.996-3.60 || 0x006F3DB4
 
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">int sceKernelMemBlockToPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source>
/**
 
* @brief Get memory block informaton by virtual address range
 
  
* @param[in] vbase base address
+
=== sceKernelCreateClassForDriver ===
* @param[in] vsize  size
 
* @param[inout] pInfo information structure
 
*/
 
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);
 
</source>
 
 
 
=== sceKernelGetMemBlockInfoByAddr ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x4010AD65
+
| 3.60 || 0x61317102
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">int sceKernelCreateClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);</source>
/**
 
* @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>
 
  
=== sceKernelGetSubbudgetInfo ===
+
=== sceKernelCreateHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-3.60 || 0x9328E0E8
|-
 
| 1.69-3.60 || 0x832B4A65
 
 
|}
 
|}
  
<source lang="c">
+
The heap pool is thread safe.
typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60
 
  int size; // Size of this structure
 
  int unk_4;
 
  int unk_8;
 
} SceKernelSubbudgetInfo;
 
  
int sceKernelGetSubbudgetInfo(SceBool unk_boolean, SceKernelSubbudgetInfo *pInfo);
+
<source lang="C">
 +
// pOpt can be NULL
 +
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);
 
</source>
 
</source>
  
=== sceKernelGetFreeMemorySize ===
+
=== sceKernelDeleteHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x87CC580B
+
| 0.940-3.60 || 0xD6437637
 
|}
 
|}
  
<source lang="C">
+
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source>
/**
 
* Get free memory size
 
*/
 
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);
 
</source>
 
  
=== sceKernelOpenMemBlock ===
+
=== sceKernelVerifyHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x8EB8DFBB
+
| 0.990-3.60 || 0xC50A9C0D
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);</source>
// on FW <= 1.691, flags is not used
 
SceUID sceKernelOpenMemBlock(const char *name, int flags);
 
</source>
 
  
=== sceKernelFindMemBlockByAddr ===
+
=== sceKernelShrinkHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA33B99D1
+
| 3.60 || 0x856FA2E3
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">int sceKernelShrinkHeapForDriver(SceUID heapid);</source>
/**
 
* 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>
 
  
=== sceKernelFreeMemBlock ===
+
=== sceKernelAllocHeapMemoryForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA91E15EE
+
| 0.931-3.60 || 0x7B4CB60A
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.
/**
+
 
* Free memory block.
+
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.
*
+
 
* @param[in] uid block uid
+
<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source>
* @retval SCE_OK Success
 
* @retval <SCE_OK Error code
 
*/
 
int sceKernelFreeMemBlock(SceUID uid);
 
</source>
 
  
=== sceKernelFreeMemBlockForVM ===
+
=== sceKernelAllocHeapMemoryFromGlobalHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4EA13FEA
+
| 3.60 || 0x7750CEA7
 
|}
 
|}
  
<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source>
+
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uid = -1 (global heap <code>uid</code>).
 +
 
 +
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapForDriver(SceSize size);</source>
  
=== sceKernelCloseMemBlock ===
+
=== sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xB680E3A0
+
| 0.990-3.60 || 0x0B4ED16A
 
|}
 
|}
  
<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source>
+
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uid = -1 (global heap <code>uid</code>).
 +
 
 +
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
  
=== sceKernelGetMemBlockBase ===
+
=== sceKernelAllocHeapMemoryWithOptForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.996-3.60 || 0xB8EF5818
+
| 3.60 || 0xB415B5A8
 
|}
 
|}
  
<source lang="C">
+
Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.
/**
+
 
* @brief Get mapped base address of memory block.
+
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
*
+
 
* Get base address of memory block.
+
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</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 ===
+
=== sceKernelAllocHeapMemoryWithOptionForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xB9D5EBDE
+
| 0.990-3.60 || 0x49D4DD9B
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.
/**
+
 
* Reserve a new memory block.
+
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
*
+
 
* The memory types that can be specified for type are as follows.
+
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
* - 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 ===
+
=== sceKernelFreeHeapMemoryForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xEC636BCB
+
| 0.990-3.60 || 0x3EBCE343
 
|}
 
|}
  
<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source>
+
Temp name was sceKernelMemPoolFreeForDriver.
 +
 
 +
<source lang="c">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source>
  
=== sceKernelOpenVMDomain ===
+
=== sceKernelFreeHeapMemoryFromGlobalHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x9CA3EB2B
+
| 3.60 || 0xFB817A59
 
|}
 
|}
  
<source lang="c">int sceKernelOpenVMDomain();</source>
+
<source lang="c">int sceKernelFreeHeapMemoryFromGlobalHeapForDriver(void *ptr);</source>
  
=== sceKernelSyncVMDomain ===
+
=== sceKernelCountFillValueFromUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x19D2A81A
+
| 3.60 || 0xBDA6E42B
 
|}
 
|}
  
<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source>
+
Temp name was sceKernelFirstDifferentBlock32UserForDriver.
 +
 
 +
<source lang="c">int sceKernelCountFillValueFromUserForDriver(unsigned int *ptr, int value, int byte_size);</source>
  
=== sceKernelCloseVMDomain ===
+
=== sceKernelCountFillValueFromUserProcForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xD6CA56CA
+
| 1.69-3.60 || 0x8334454F
 
|}
 
|}
  
<source lang="c">int sceKernelCloseVMDomain();</source>
+
Temp name was sceKernelFirstDifferentBlock32UserForPidForDriver.
  
=== sceKernelAllocMemBlockForVM ===
+
<source lang="c">int sceKernelCountFillValueFromUserProcForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);</source>
 +
 
 +
=== sceKernelCountFillValue64FromUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xE2D7E137
+
| 3.60 || 0xBB3B02C2
 
|}
 
|}
  
<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source>
+
Temp name was sceKernelFirstDifferentBlock64UserForDriver.
 +
 
 +
<source lang="c">int sceKernelCountFillValue64FromUserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source>
  
=== sceKernelCheckModelCapability ===
+
=== sceKernelCountFillValue64FromUserProcForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0144FBD9
+
| 3.60 || 0xE83855FD
 
|}
 
|}
  
<source lang="c">int sceKernelCheckModelCapability(int bit);</source>
+
Temp name was sceKernelFirstDifferentBlock64UserForPidForDriver.
 +
 
 +
<source lang="c">int sceKernelCountFillValue64FromUserProcForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source>
  
=== sceKernelGetModelForCDialog ===
+
=== sceKernelVAtoPAForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA2CB322F
+
| 0.990-3.60 || 0x8D160E65
 
|}
 
|}
  
<source lang="c">int sceKernelGetModelForCDialog();</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(void *pVA, void **pPA);</source>
  
=== sceKernelGetModel ===
+
=== sceKernelVAtoPABySWForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD0D4F729
+
| 0.990-3.60 || 0x65419BD3
 
|}
 
|}
  
<source lang="c">int sceKernelGetModel();</source>
+
Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.
 +
 
 +
<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source>
  
=== sceKernelIsPSVitaTV ===
+
=== sceKernelProcVAtoPAForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1453A5E5
+
| 0.990 || 0xC51934BD
 
|}
 
|}
  
<source lang="c">int sceKernelIsPSVitaTV();</source>
+
<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source>
  
== SceDipsw ==
+
=== sceKernelProcModeVAtoPAForDriver ===
 
 
=== sceKernelCheckDipsw ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x1C783FB2
+
| 0.990-3.60 || 0x61A67D32
 
|}
 
|}
  
=== sceKernelClearDipsw ===
+
Temp name was sceKernelGetPaddrForPidForDriver.
 +
 
 +
<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, SceUInt32 mode, void *pVA, void **pPA);</source>
 +
 
 +
=== sceKernelVARangeToPAVectorForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x800EDCC1
+
| 0.931-3.60 || 0xE68BEEBD
 
|}
 
|}
  
=== sceKernelSetDipsw ===
+
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 sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
 +
 
 +
=== sceKernelVARangeToPAVectorBySWForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x817053D4
+
| 3.60 || 0x08A8A7E8
 
|}
 
|}
  
== SceDipswForDriver ==
+
This is a guessed name. Temp name was sceKernelGetPaddrListForLargePageForDriver.
 +
 
 +
<source lang="c">int sceKernelVARangeToPAVectorBySWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
  
=== sceKernelCheckDipswForDriver ===
+
=== sceKernelVARangeToPAVectorByHWForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA98FC2FD
+
| 3.60 || 0x16844CE6
 
|}
 
|}
  
<source lang="C">int sceKernelCheckDipswForDriver(int no);</source>
+
Temp name was sceKernelGetPaddrListForSmallPageForDriver.
 +
 
 +
<source lang="c">int sceKernelVARangeToPAVectorByHWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source>
  
=== sceKernelGetDipswInfoForDriver ===
+
=== sceKernelVARangeToPARangeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB2AD48BE
+
| 0.940-3.60 || 0xAE36C775
 
|}
 
|}
  
This is a guessed name (cannot find an evidence).
+
Temp name was sceKernelGetPaddrPairForDriver.
  
<source lang="C">return *(int *)(dipsw_addr + 4 * info_id);</source>
+
<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
 
 
info_id:
 
* 0: CP timestamp 1
 
* 1: CP Version, CP Board ID
 
* 2: CP timestamp 2
 
* 3: ASLR Seed
 
  
See [[KBL Param#DIP Switches]].
+
=== sceKernelVARangeToPARangeBySWForDriver ===
 
 
<source lang="C">int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);</source>
 
 
 
=== sceKernelClearDipswForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF1F3E9FE
+
| 3.60 || 0x32257A24
 
|}
 
|}
  
<source lang="C">void sceKernelClearDipswForDriver(int no);</source>
+
This is a guessed name. Temp name was sceKernelGetPaddrPairForLargePageForDriver.
 +
 
 +
<source lang="c">int sceKernelVARangeToPARangeBySWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
  
=== sceKernelSetDipswForDriver ===
+
=== sceKernelVARangeToPARangeByHWForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x82E45FBF
+
| 3.60 || 0xB3575090
 
|}
 
|}
  
<source lang="C">void sceKernelSetDipswForDriver(int no);</source>
+
This is a guessed name. Temp name was sceKernelGetPaddrPairForSmallPageForDriver.
  
== SceUartForKernel ==
+
<source lang="c">int sceKernelVARangeToPARangeByHWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
  
=== sceKernelUartInitForKernel ===
+
=== sceKernelIsAccessibleRangeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xA9C74212
+
| 0.931-3.60 || 0x9C78064C
 
|}
 
|}
  
Temp name was sceUartInitForKernel.
+
Temp name was sceKernelFindMemBlockForDriver.
 +
 
 +
Also exported as [[#sceKernelIsAccessibleRangeForDebugger]].
  
It initializes the clock generator registers for the UART <code>port</code>. See [[UART Registers]]. The default baud rate is 115200 for ports 0-5 and 250000 for port 6.
+
?Returns 0 on success (if is accessible range)?
  
<source lang="C">
+
<