Difference between revisions of "SceSysmem"

From Vita Development Wiki
Jump to navigation Jump to search
<
 
(540 intermediate revisions by 4 users not shown)
Line 4: Line 4:
 
This module exists in both non-secure and secure world. The non-secure world SELF can be found in <code>os0:kd/sysmem.skprx</code>. It also can be found in the [[Boot Sequence|Boot Image]].
 
This module exists in both non-secure and secure world. The non-secure world SELF can be found in <code>os0:kd/sysmem.skprx</code>. It also can be found in the [[Boot Sequence|Boot Image]].
  
=== Known NIDs ===
 
 
{| class="wikitable"
 
{| class="wikitable"
! Version !! Name !! World !! Privilege !! NID
+
! Version !! World !! Privilege
|-
 
| 1.50 || SceSysmem || Non-secure || Kernel || 0x78D8AA34
 
|-
 
| 1.69 || SceSysmem || Non-secure || Kernel || 0xB93950C6
 
|-
 
| 3.57 || SceSysmem || Non-secure || Kernel || 0x00CFDC77
 
|-
 
| 3.60-3.61 || SceSysmem || Non-secure || Kernel || 0x3380B323
 
 
|-
 
|-
| 1.69 || SceSysmem || Secure || Kernel || 0x502BE0E5
+
| 1.50-3.61 || Non-secure || Kernel
 
|-
 
|-
| 1.80 || SceSysmem || Secure || Kernel || 0x72425377
+
| 1.69-1.80 || Secure || Kernel
 
|}
 
|}
  
Line 28: Line 19:
 
|-
 
|-
 
| 1.50-3.60 || [[SceSysmem#SceSysmemForKernel|SceSysmemForKernel]] || Non-secure || Kernel || 0x63A519E5
 
| 1.50-3.60 || [[SceSysmem#SceSysmemForKernel|SceSysmemForKernel]] || Non-secure || Kernel || 0x63A519E5
 +
|-
 +
| 3.65 || [[SceSysmem#SceSysmemForKernel|SceSysmemForKernel]] || Non-secure || Kernel || 0x02451F0F
 
|-
 
|-
 
| 1.50-3.60 || [[SceSysmem#SceSysmemForDriver|SceSysmemForDriver]] || Non-secure || Kernel || 0x6F25E18A
 
| 1.50-3.60 || [[SceSysmem#SceSysmemForDriver|SceSysmemForDriver]] || Non-secure || Kernel || 0x6F25E18A
Line 44: Line 37:
 
|-
 
|-
 
| 1.50-3.60 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0x54BF2BAB
 
| 1.50-3.60 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0x54BF2BAB
 +
|-
 +
| 3.65 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0xA5195D20
 
|-
 
|-
 
| 1.50-3.60 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E
 
| 1.50-3.60 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E
Line 59: Line 54:
 
| 1.50-3.60 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4
 
| 1.50-3.60 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4
 
|-
 
|-
| 1.50-3.60 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E
+
| 1.50 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E
 
|-
 
|-
 
| 1.50-3.60 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C
 
| 1.50-3.60 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C
Line 164: Line 159:
 
   tctx_holder *hldr[6];
 
   tctx_holder *hldr[6];
 
   char unk[84];
 
   char unk[84];
   char *sysroot_buffer;
+
   char *kbl_param;
 
   int unk70;
 
   int unk70;
 
   char unk74[616];
 
   char unk74[616];
Line 217: Line 212:
  
 
int unk_0x30; // 0x40004
 
int unk_0x30; // 0x40004
 +
// start ModulePrivate
 
int unk_0x34; // 0
 
int unk_0x34; // 0
 
int unk_0x38; // 0
 
int unk_0x38; // 0
Line 234: Line 230:
 
int unk_0x64; // 0
 
int unk_0x64; // 0
 
int unk_0x68; // 0
 
int unk_0x68; // 0
SceBootArgs *KblParam; // old name is sysroot buff
+
// end ModulePrivate?
 +
SceKblParam *KblParam; // old name is sysroot buff
  
 
int unk_0x70; // 0x51030100, paddr?
 
int unk_0x70; // 0x51030100, paddr?
Line 286: Line 283:
  
 
int unk_0x2D0; // 0
 
int unk_0x2D0; // 0
int (* sceKernelSysrootThreadFunction1)(void); // Temp name, SceKernelThreadMgr + 0x4D85
+
int (* sceKernelSysrootThreadMgrStartAfterProcess)(void);
 
int (* sceKernelSysrootIofilemgrStart)(void); // SceIofilemgr + 0x3E5
 
int (* sceKernelSysrootIofilemgrStart)(void); // SceIofilemgr + 0x3E5
 
void *unk_0x2DC;
 
void *unk_0x2DC;
Line 379: Line 376:
 
int unk_0x400[0x6]; // 0
 
int unk_0x400[0x6]; // 0
 
uint32_t sysbase_magic2;
 
uint32_t sysbase_magic2;
} sysbase360_t;
+
} sysbase360_t; // Real name is maybe sysroot
 +
 
 +
// 0x51030100
 +
typedef struct SceSblSysroot {
 +
SceSize size;
 +
int data_0x04;
 +
int data_0x08; // ex:3
 +
uint32_t non_secure_base;
 +
 
 +
uint32_t non_secure_size_without_secure;
 +
uint32_t non_secure_size;
 +
int data_0x18; // ex:0x8000000
 +
int data_0x1C; // ex:0x80000000
 +
 
 +
int data_0x20; // ex:0x40000000
 +
int data_0x24;
 +
int data_0x28;
 +
SceKblParam *pKblParam;
 +
 
 +
int data_0x30[4];
 +
int data_0x40[4]; // 0. 0x80000115, 0, 0x00000115
 +
int data_0x50[3]; // 0x00010200, 0x00000704, 0x51023A00(SceKernelTTBR0)
 +
uint32_t ttbr0;
 +
int data_0x60[4]; // 0x000F4000, 0x00004000, 0x00004000, 0
 +
int data_0x70[4]; // 0x3FFFFFFF, 0x40000000, 0x51023A10(SceKernelTTBR1), 0x4020C000
 +
int data_0x80[4]; // 0x0001C000, 0x00004000, 0x00004000, 0
 +
int data_0x90[4]; // 0xC0000000, 0, 0x510239CC(SceKernelReset), 0x40200000
 +
int data_0xA0[4]; // 0, 0x00001000, 0x00004000, 0x00003000
 +
 
 +
const char *pSceKernelExceptionEntry_name;
 +
int data_0xB4[3]; // 0x40200000, 0x000F0000, 0x00001000
 +
 
 +
char data_0xC0[0x40];
 +
sysbase360_t *pSysbase;
 +
char data_0x104[0x20C];
 +
} SceSblSysroot; // size is 0x310
 +
// arg of base kernel
  
 
typedef struct SceKernelFreeMemorySizeInfo {
 
typedef struct SceKernelFreeMemorySizeInfo {
Line 390: Line 423:
 
typedef int (*SceClassCallback)(void *item);
 
typedef int (*SceClassCallback)(void *item);
  
typedef struct SceClassInfo_0990 { // size is 0x10 on 0.990
+
typedef struct SceClass_0990 { // size is 0x10 on FW 0.990
 
SceSize size; // Size of this structure
 
SceSize size; // Size of this structure
 
struct SceClass *next;
 
struct SceClass *next;
 
struct SceClass *root; // to confirm
 
struct SceClass *root; // to confirm
 
struct SceClass *prev; // to confirm
 
struct SceClass *prev; // to confirm
} SceClassInfo_0990;
+
} SceClass_0990;
  
typedef struct SceClass { // size is 0x2C
+
typedef struct SceClass { // size is 0x2C on FW 3.60
 
struct SceClass *next; // 0x00
 
struct SceClass *next; // 0x00
 
struct SceClass *root; // 0x04
 
struct SceClass *root; // 0x04
Line 512: Line 545:
 
  * @brief Memory block information structure
 
  * @brief Memory block information structure
 
  *
 
  *
  * A structure for obtaining information about memory blocks. Size is 0x18 bytes on FW 0.996+.
+
  * A structure for obtaining information about memory blocks. Size is 0x18 bytes on FWs 0.996+.
 
  */
 
  */
 
typedef struct SceKernelMemBlockInfo {
 
typedef struct SceKernelMemBlockInfo {
Line 524: Line 557:
  
 
typedef struct SceKernelMemBlockInfoExDetails {
 
typedef struct SceKernelMemBlockInfoExDetails {
  SceKernelMemBlockType type;
+
    SceKernelMemBlockType type;
  int unk4;
+
    SceUID memblk_uid;
  char *name;
+
    const char *name;
  int unkC;
+
    void *mappedBase;
  int unk10;
+
    SceSize mappedSize;
  int memblock_some_size;
+
    SceSize memblock_some_size_or_alignment;
  int extraLow;
+
    int extraLow;
  int extraHigh;
+
    int extraHigh;
  int unk20;
+
    int unk20;
  int unk24;
+
    SceUID unk24; // ex: 0x10045, maybe some pid
  SceKernelObject *SceUIDPhyMemPartClass_obj;
+
    SceKernelObject *SceUIDPhyMemPartClass_obj;
 
} SceKernelMemBlockInfoExDetails;
 
} SceKernelMemBlockInfoExDetails;
  
 
typedef struct SceKernelMemBlockInfoEx { // size is 0xAC on FW 0.990, 0xB8 on FW 3.60
 
typedef struct SceKernelMemBlockInfoEx { // size is 0xAC on FW 0.990, 0xB8 on FW 3.60
  SceSize size;
+
    SceSize size; // Size of this structure
  SceKernelMemBlockInfoExDetails details;
+
    SceKernelMemBlockInfoExDetails details;
  int unk30;
+
    SceSize unk30; // paddr num
  int unk34;
+
    SceSize unk34; // paddr size num?
  int unk38;
+
    void *paddr_list[0x10];
  int unk3C;
+
    SceSize size_list[0x10];
  int unk40;
 
  int unk44;
 
  int unk48;
 
  int unk4C;
 
  int unk50;
 
  int unk54;
 
  int unk58;
 
  int unk5C;
 
  int unk60;
 
  int unk64;
 
  int unk68;
 
  int unk6C;
 
  int unk70;
 
  int unk74;
 
  int unk78;
 
  int unk7C;
 
  int unk80;
 
  int unk84;
 
  int unk88;
 
  int unk8C;
 
  int unk90;
 
  int unk94;
 
  int unk98;
 
  int unk9C;
 
  int unkA0;
 
  int unkA4;
 
  int unkA8;
 
  int unkAC;
 
  int unkB0;
 
  int unkB4;
 
 
} SceKernelMemBlockInfoEx;
 
} SceKernelMemBlockInfoEx;
 +
 +
typedef struct SceKernelMemBlockInfoSimple { // size is 0x24 on FW 0.990
 +
    SceSize size; // Size of this structure
 +
    SceKernelMemBlockType type;
 +
    SceUID uid;
 +
    char *name; // "SceNULL" by default
 +
    char unk_0x10[0x14];
 +
} SceKernelMemBlockInfoSimple;
  
 
/*----- memory access permission -----*/
 
/*----- memory access permission -----*/
Line 606: Line 617:
  
 
/**
 
/**
  * Optional parameter of sceKernelAllocMemBlock for FW <=0.940.
+
  * Optional parameter of sceKernelAllocMemBlock for FWs <=0.940.
 
  */
 
  */
  typedef struct SceKernelAllocMemBlockOpt0940 {
+
  typedef struct SceKernelAllocMemBlockOpt0940 { // size is 0x14 on FW 0.940-0.990
SceSize size;
+
SceSize size; /**< Size of this structure */
SceUInt32 attr;
+
SceUInt32 attr; /**< Attributes field */
SceSize alignment; /**< alignment */
+
SceSize alignment; /**< Specify alignment.
SceUID uidBaseBlock; /**< base memory block */
+
SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT must be set for the attr member. */
const char *strBaseBlockName;
+
SceUID uidBaseBlock; /**< Base memory block UID */
 +
const char *strBaseBlockName; /**< Base memory block UID name */
 
} SceKernelAllocMemBlockOpt0940;
 
} SceKernelAllocMemBlockOpt0940;
  
Line 619: Line 631:
 
  * Option parameter of sceKernelAllocMemBlock
 
  * Option parameter of sceKernelAllocMemBlock
 
  */
 
  */
  typedef struct SceKernelAllocMemBlockOpt {
+
  typedef struct SceKernelAllocMemBlockOpt { // size is 0x14/0x38/0x3C/0x40 on FW 3.60
 
/**
 
/**
 
* Size of this structure
 
* Size of this structure
Line 626: Line 638:
  
 
/**
 
/**
* Attributes field.
+
* Attributes field
 
*/
 
*/
 
SceUInt32 attr;
 
SceUInt32 attr;
Line 639: Line 651:
 
* reserved
 
* reserved
 
*/
 
*/
SceUInt32 reserved;
+
SceUInt32 uidBaseBlock;
  
 
/**
 
/**
Line 667: Line 679:
  
 
/**
 
/**
  * Option parameter of kernel sceKernelAllocMemBlock on old FWs
+
  * Option parameter of kernel sceKernelAllocMemBlock on old FWs (as seen on FWs 0.900-0.990)
 
  */
 
  */
typedef struct SceKernelAllocMemBlockOptKernel_old {
+
typedef struct SceKernelAllocMemBlockOptKernel_old { // size is 0x28 on 0.900, 0x2C on 0.910, 0x30 on 0.931-0.990, 0x34 on ?.??
    SceSize size; // 0x28 on 0.910, 0x2C on 0.910, 0x30 on 0.990, 0x34 on ?.??
+
    SceSize size; // Size of this structure
     SceUInt32 field_4;
+
     SceUInt32 unk_4;
 
     SceUInt32 attr;
 
     SceUInt32 attr;
     SceUInt32 field_C;
+
     void *vbase;
     SceUInt32 paddr;
+
     void *pbase; // Physical address to use as base
 
     SceSize alignment;
 
     SceSize alignment;
 
     SceUInt32 extraLow;
 
     SceUInt32 extraLow;
 
     SceUInt32 extraHigh;
 
     SceUInt32 extraHigh;
     SceUInt32 base;
+
     void *base;
 
     SceUID pid;
 
     SceUID pid;
     SceKernelPAVector *paddr_list;
+
     SceKernelPAVector *pPAV;
     SceUInt32 field_2C;
+
     SceSize vsize;
     SceUInt32 field_30;
+
     SceUInt32 unk_30;
 
} SceKernelAllocMemBlockOptKernel_old;
 
} SceKernelAllocMemBlockOptKernel_old;
  
Line 688: Line 700:
 
  * Option parameter of kernel sceKernelAllocMemBlock on recent FWs (as seen on FW 3.60)
 
  * Option parameter of kernel sceKernelAllocMemBlock on recent FWs (as seen on FW 3.60)
 
  */
 
  */
typedef struct SceKernelAllocMemBlockOptKernel {
+
typedef struct SceKernelAllocMemBlockOptKernel { // size is 0x58 on FW 3.60
SceSize size; // 0x58 on 3.60
+
SceSize size; // Size of this structure
SceUInt32 field_4;
+
SceUInt32 unk_4;
 
SceUInt32 attr;
 
SceUInt32 attr;
SceUInt32 field_C;
+
void *vbase;
SceUInt32 paddr;
+
void *pbase; // Physical address to use as base
 
SceSize alignment;
 
SceSize alignment;
 
SceUInt32 extraLow;
 
SceUInt32 extraLow;
 
SceUInt32 extraHigh;
 
SceUInt32 extraHigh;
SceUInt32 base;
+
void *base;
 
SceUID pid;
 
SceUID pid;
SceKernelPAVector *paddr_list;
+
SceKernelPAVector *pPAV;
SceUInt32 field_2C;
+
SceSize vsize;
SceUInt32 field_30;
+
SceUInt32 unk_30;
SceUInt32 field_34;
+
SceUInt32 unk_34;
SceUInt32 field_38;
+
SceUInt32 unk_38;
SceUInt32 field_3C;
+
SceUInt32 unk_3C;
SceUInt32 field_40;
+
SceUInt32 unk_40;
SceUInt32 field_44;
+
SceUInt32 unk_44;
SceUInt32 field_48;
+
SceUInt32 unk_48;
SceUInt32 field_4C;
+
SceUInt32 unk_4C;
SceUInt32 field_50;
+
SceUInt32 unk_50;
SceUInt32 field_54;
+
SceUInt32 unk_54;
 
} SceKernelAllocMemBlockOptKernel;
 
} SceKernelAllocMemBlockOptKernel;
  
Line 716: Line 728:
 
  * Attributes to enable some SceKernelAllocMemBlockOpt members.
 
  * Attributes to enable some SceKernelAllocMemBlockOpt members.
 
  */
 
  */
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PADDR 0x00000002 // to check
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_VBASE 0x00000001
 +
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PBASE 0x00000002
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT 0x00000004
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT 0x00000004
 +
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_LOW 0x00000008
 +
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_HIGH 0x00000010
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASE 0x00000040
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASE 0x00000040
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PID 0x00000080 // to check
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PID 0x00000080
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASENAME 0x00000200
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASENAME 0x00000200 // Need to find where basename is located in the structure
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PADDR_LIST 0x00001000 // to check
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PPAV 0x00001000
 
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_SIZE 0x00002000
/**
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_FIELD_30 0x00010000
* Memory area is physically continuous.
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_NOPHYPAGE 0x00020000
*/
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_PHYCONT 0x00200000 // Memory area is physically continuous.
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_PHYCONT 0x00200000
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_UNK 0x00400000
 
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_SHARE_VBASE 0x00800000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_SHARE_PHYPAGE 0x01000000
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_SHARE_PHYPAGE 0x01000000
 
+
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_ALLOW_PARTIAL_OP 0x04000000 // Allow partial operation. ?What does that mean?
/**
 
* Allow partial operation. ?What does that mean?
 
*/
 
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_ALLOW_PARTIAL_OP 0x04000000
 
  
 
/**
 
/**
Line 797: Line 808:
 
SceSize size; // Size of this structure
 
SceSize size; // Size of this structure
 
uint32_t unk_4;
 
uint32_t unk_4;
uint32_t unk_8;
+
SceSize alignment; // ex: 0x10
uint32_t unk_C; // example: 0x20
+
uint32_t unk_C; // ex: 0x20
 
uint32_t unk_10;
 
uint32_t unk_10;
 
} SceKernelHeapMemoryOpt;
 
} SceKernelHeapMemoryOpt;
  
typedef struct SceAddressSpace {
+
typedef struct SceAddressSpace { // size is at least 0xEC
char unk[0xDC];
+
char unk[0x14];
 +
SceKernelMMUContext *context;
 +
char unk[0xC4];
 
void *funcAlloc;
 
void *funcAlloc;
 
char unk2[0x8];
 
char unk2[0x8];
uint32_t magic; // always 0x4d95aeec
+
uint32_t magic; // always 0x4d95AEEC
 
} SceAddressSpace;
 
} SceAddressSpace;
  
Line 826: Line 839:
 
} SceKernelPARange;
 
} SceKernelPARange;
  
typedef struct SceKernelPAVector {
+
typedef struct SceKernelPAVector { // size is 0x14 on FW 0.990
SceSize size; // Size of this structure (0x14 on 0.990)
+
SceSize size; // Size of this structure
 
uint32_t pRanges_size; // Ex: 8
 
uint32_t pRanges_size; // Ex: 8
 
uint32_t nDataInVector; // Must be <= 8
 
uint32_t nDataInVector; // Must be <= 8
Line 836: Line 849:
 
#define SCE_KERNEL_PROCESS_ID_SELF 0 // Current running process ID is always 0.
 
#define SCE_KERNEL_PROCESS_ID_SELF 0 // Current running process ID is always 0.
  
typedef struct SceKernelPhyMemPart { // size is at least 0x9C on FW 0.931
+
typedef struct SceKernelPhyMemPart { // size is at least 0x9C on FWs 0.931-3.60
     undefined field_0x0;
+
     uint32_t field_0x0;
     undefined field_0x1;
+
     uint32_t field_0x4;
    undefined field_0x2;
+
     uint32_t some_counter; // always positive
    undefined field_0x3;
+
     uint32_t field_0xc;
    undefined field_0x4;
 
     undefined field_0x5;
 
    undefined field_0x6;
 
    undefined field_0x7;
 
    undefined field_0x8;
 
    undefined field_0x9;
 
    undefined field_0xa;
 
    undefined field_0xb;
 
     undefined4 field_0xc;
 
 
     char *name;
 
     char *name;
     int type;
+
     int type; // 0x10000 for Lpddr2Main, 0x30000 for Cdram
 
     int mutex;
 
     int mutex;
     undefined4 field_0x1c;
+
     uint32_t field_0x1c;
     SceSize psize;
+
     SceSize totalSize;
 
     int field_0x24;
 
     int field_0x24;
 
     int pRoot;
 
     int pRoot;
     undefined field_0x2c;
+
     uint32_t field_0x2c;
     undefined field_0x2d;
+
     uint32_t field_0x30;
    undefined field_0x2e;
+
     uint32_t field_0x34;
    undefined field_0x2f;
+
     uint32_t field_0x38;
    undefined field_0x30;
 
     undefined field_0x31;
 
    undefined field_0x32;
 
    undefined field_0x33;
 
    undefined field_0x34;
 
     undefined field_0x35;
 
    undefined field_0x36;
 
    undefined field_0x37;
 
    undefined field_0x38;
 
    undefined field_0x39;
 
    undefined field_0x3a;
 
    undefined field_0x3b;
 
 
     int status;
 
     int status;
 
     int pindex40; //1
 
     int pindex40; //1
Line 891: Line 883:
 
     int field_0x7c;
 
     int field_0x7c;
 
     int pindex80; //9
 
     int pindex80; //9
     int field_0x84;
+
     SceSize psize2;
 
     int min;
 
     int min;
 
     int pindex8C; //10
 
     int pindex8C; //10
 
     int field_0x90;
 
     int field_0x90;
 
     int nClient;
 
     int nClient;
     undefined4 freeSize;
+
     SceSize freeSize;
 
} SceKernelPhyMemPart;
 
} SceKernelPhyMemPart;
  
// SceKernelPhyMemPart type: 0x10000 for Lpddr2Main, 0x30000 for Cdram
+
typedef struct ScePhyMemPartInfoCore { // size is 0x10 on FWs 0.990-3.60
</source>
+
  SceUInt32 unk_0; // same as SceKernelPhyMemPart field 0x1C
 +
  SceSize totalSize;
 +
  SceSize freeSize;
 +
  SceUInt32 unk_C; // maybe some counter
 +
} ScePhyMemPartInfoCore;
  
==== SceKernelAllocMemBlockOpt.attr bitmask ====
+
/**
 +
* An enumeration to represent the various logging levels which can be output by sceDbgLoggingHandler().
 +
*/
 +
typedef enum SceDbgLogLevel {
 +
    SCE_DBG_LOG_LEVEL_TRACE = 0, /* An extremely verbose logging level, mostly useful for internal developers. */
 +
    SCE_DBG_LOG_LEVEL_DEBUG,    /* A diagnostic logging level. */
 +
    SCE_DBG_LOG_LEVEL_INFO,      /* An informational logging level. */
 +
    SCE_DBG_LOG_LEVEL_WARNING,  /* A logging level that gives warnings of situations detrimental to proper execution. */
 +
    SCE_DBG_LOG_LEVEL_ERROR,    /* A logging level that will report erroneous conditions in execution. */
 +
    SCE_DBG_NUM_LOG_LEVELS      /* The number of logging levels available. */
 +
} SceDbgLogLevel;
  
{| class='wikitable'
+
/*
|-
+
Target Manager (Communication Processor) Logging levels.
! Bitmask !! Uses
+
These levels can be set using psp2ctrl set-logging-level <level>.
|-
+
LOG_LEVEL_NONE (0)
| 0x00000001 || has_field_C
+
LOG_LEVEL_ERROR (1)
|-
+
LOG_LEVEL_WARNING (2)
| 0x00000002 || HAS_PADDR (10)
+
LOG_LEVEL_SERVICE (3)
|-
+
LOG_LEVEL_INFO (4)
| 0x00000004 || HAS_ALIGNMENT (14)
+
LOG_LEVEL_INTERNAL (5)
|-
+
LOG_LEVEL_MAX (6)
| 0x00000008 || has_field_18
+
*/
|-
 
| 0x00000010 || has_field_1C
 
|-
 
| 0x00000040 || HAS_BASE (20)
 
|-
 
| 0x00000080 || HAS_PID (24)
 
|-
 
| 0x00000200 || HAS_BASENAME (?)
 
|-
 
| 0x00001000 || HAS_PADDR_LIST (28)
 
|-
 
| 0x00002000 || has_field_2C
 
|-
 
| 0x00010000 || has_field_30
 
|}
 
  
=== GetPhyMemPartIndex ===
+
typedef struct SceSyscallInfo { // size is 0x3C on FW 3.60
 +
    SceSize size; // Size of this structure
 +
    SceUInt32 moduleFingerprint;
 +
    SceUInt32 maybeModuleAttr;
 +
    char moduleName[0x20];
 +
    char *libName;
 +
    SceUInt32 maybeLibAttr;
 +
    SceUInt32 libVer;
 +
    SceUInt32 libNid;
 +
} SceSyscallInfo;
 +
 
 +
typedef struct SceSyscallFrame { // size is at least 0x5C on FW 3.60
 +
SceUInt32 r0; // 0x00
 +
SceUInt32 r1; // 0x04
 +
SceUInt32 r2; // 0x08
 +
SceUInt32 r3; // 0x0C
 +
SceUInt32 r4; // 0x10
 +
SceUInt32 r5; // 0x14
 +
SceUInt32 r6; // 0x18
 +
SceUInt32 r7; // 0x1C
 +
SceUInt32 r8; // 0x20
 +
SceUInt32 r9; // 0x24
 +
SceUInt32 r10; // 0x28
 +
SceUInt32 r11; // 0x2C
 +
SceUInt32 r12; // 0x30
 +
SceUInt32 unk_34; // 0x34
 +
void *entry; // 0x38
 +
SceUInt32 unk_3C; // 0x3C
 +
SceUInt32 resultType; // 0x40, 0-3
 +
int unk_44[3]; // 0x44
 +
SceUInt32 SP; // 0x50
 +
SceUInt32 LR; // 0x54
 +
SceUInt32 PC; // 0x58
 +
} SceSyscallFrame;
 +
</source>
 +
 
 +
=== GetPhyMemPartIndex ===
  
 
<source lang="C">
 
<source lang="C">
 
 
uint GetPhyMemPartIndex(uint param_1) {
 
uint GetPhyMemPartIndex(uint param_1) {
 
   uint cpuId;
 
   uint cpuId;
Line 1,132: Line 1,158:
  
 
The <code>type</code> parameter indicates what kind of memory to allocate. Here is a mapping of <code>type</code> flags to ARM MMU flags. Higher bits are used for other options including where to allocate from. Not all flag values are valid, there is a table of valid types in the kernel. You cannot, for example, allocate RWX memory.
 
The <code>type</code> parameter indicates what kind of memory to allocate. Here is a mapping of <code>type</code> flags to ARM MMU flags. Higher bits are used for other options including where to allocate from. Not all flag values are valid, there is a table of valid types in the kernel. You cannot, for example, allocate RWX memory.
 +
 +
=== memtype bit value ===
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,182: Line 1,210:
 
| 0x0F000000 || 0x0F000000 || SceKernelUserCDialogNC
 
| 0x0F000000 || 0x0F000000 || SceKernelUserCDialogNC
 
|}
 
|}
 +
 +
=== Available memory types ===
 +
 +
See also : [[Memory budget]]
  
 
<source lang="C">
 
<source lang="C">
Line 1,208: Line 1,240:
 
0x0000D000 : NORMAL (cache)
 
0x0000D000 : NORMAL (cache)
  
memory access type?
+
memory budget type
 
mask : 0x00F00000
 
mask : 0x00F00000
 
0x00100000 : IO
 
0x00100000 : IO
0x00200000 : normal?
+
0x00200000 : NORMAL(kernel:KD, user:GAME)
 +
0x00300000 : maybe unused
 
0x00400000 : CDRAM
 
0x00400000 : CDRAM
 
0x00500000 : GAME
 
0x00500000 : GAME
 
0x00800000 : PHYCONT
 
0x00800000 : PHYCONT
0x00A00000 : UNKNOWN
+
0x00900000 : SHARED(userland only)
0x00F00000 : UNKNOWN
+
0x00A00000 : CDIALOG
 +
0x00C00000 : ???
 +
0x00F00000 : TOOL
 +
 
 +
memory access type?
 +
mask : 0x0F000000
 +
0x05000000 : CDRAM2
 +
0x06000000 : KTMP
 +
0x09000000 : CDRAM
 +
0x0C000000 : normal?
 +
0x0D000000 : MAIN PHYCONT
 +
0x0E000000 : CDIALOG
  
memory access type2?(only kernel)
+
memory access type2? (only kernel)
 
mask : 0xF0000000
 
mask : 0xF0000000
0x10000000 : normal?
+
0x00000000 : USER
 +
0x10000000 : ROOT
 
0x20000000 : IO
 
0x20000000 : IO
 +
0x30000000 : PHYCONT
 
0x40000000 : CDRAM
 
0x40000000 : CDRAM
 
0x50000000 : CDRAM2
 
0x50000000 : CDRAM2
 
0x60000000 : TMP
 
0x60000000 : TMP
 
0xA0000000 : GPU
 
0xA0000000 : GPU
 +
 +
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM2_RW                0x05408060
 +
 +
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP*****                0x0620D006
  
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW_UNCACHE_EXTERNAL 0x09404060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW_UNCACHE_EXTERNAL 0x09404060
Line 1,238: Line 1,288:
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA_UNCACHE            0x0C208060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA_UNCACHE            0x0C208060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RO                        0x0C20D040
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RO                        0x0C20D040
 +
SCE_KERNEL_MEMBLOCK_TYPE_USER_TEXT                      0x0C20D050
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW                        0x0C20D060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW                        0x0C20D060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA                    0x0C20D060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA                    0x0C20D060
Line 1,253: Line 1,304:
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RO                0x0E20D040
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RO                0x0E20D040
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW                0x0E20D060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW                0x0E20D060
 +
 +
 +
kernel memory types:
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_DEVICE_RW          0x10200806
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_SO_RW              0x10200206
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R_UNCACHE          0x10208004
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_UNCACHE        0x10208006
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R                  0x1020D004
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX                0x1020D005
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW                0x1020D006
 +
 +
/* alloc from ScePhyMemPartGame */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_GAME            0x1050D006
 +
 +
/* alloc from ScePhyMemPartPhyCont */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_PHYCONT        0x1080D006
 +
 +
/* alloc from ScePhyMemPartGameCDialog */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_CDIALOG        0x10A0D006
 +
 +
// for larger size memblock, ex:16MiB
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_10C0D006        0x10C0D006
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RO          0x20100204
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW          0x20100206
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RO              0x20100804
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW              0x20100806
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RO          0x20108004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RW          0x20108006
 +
 +
/* alloc from ScePhyMemPartPhyCont */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_PHYCONT_RW_UNCACHE 0x30808006
 +
 +
/* from L1?*/
 +
/* alloc from ScePhyMemPartGameCdram */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW_UNK      0x40404006
 +
 +
/* from L2?*/
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW          0x40408006
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM2_RW          0x50408006
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R          0x60208004
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW          0x60208006
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R              0x6020D004
 +
 +
/* alloc from ScePhyMemPartKD */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW            0x6020D006
 +
 +
/* alloc from ScePhyMemPartGame */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW        0x6050D006
 +
 +
code memory types:
 +
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L2WBWA: 0x2000
 +
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L1WBWA: 0x4000
 +
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_NORMAL_NC: 0x8000
 +
 +
from 0.990
 +
/* need check */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_SO_RW        0x10200206
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_DEVICE_RW    0x10200806
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_R          0x10208004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_RW        0x10208006
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_R            0x1020D004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RX            0x1020D005
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RW            0x1020D006
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_BOOT_IMAGE        0x1020D007
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_GAME_RW      0x1050D006
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R            0x20100204
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_R        0x20100804
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_RW      0x20100806
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R            0x20108004
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_R  0x30808004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_RW 0x30808006
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_R    0x3080D004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_RW    0x3080D006
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_R    0x10A0D004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_RW    0x10A0D006
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW        0x10F08004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_R          0x10F08006
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_R            0x10F0D004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RX            0x10F0D005
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RW            0x10F0D006
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R          0x60208004
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW          0x60208006
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R              0x6020D006
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW        0x6050D006
 +
 +
/* need check */
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW        0x60F0D006
 +
 +
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_GPU_CDRAM_RW      0xA0408006
 
</source>
 
</source>
  
memory allocate test.
+
=== memory allocate test ===
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,294: Line 1,466:
  
 
=== Types to reverse ===
 
=== Types to reverse ===
 
from 0.931:
 
<source lang="C">
 
kernel memory types:
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_SO_RW: 0x10200206
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R: 0x1020d004
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R_UNCACHE: 0x10208004
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW: 0x1020d006
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_UNCACHE: 0x10208006
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_DEVICE_RW: 0x10200806
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX: 0x1020d005
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_GAME: 0x1050d006
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RO: 0x20100804
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW: 0x20100806
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RO: 0x20100204
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW: 0x20100206
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RO: 0x20108004
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RW: 0x20108006
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_BOOT_IMAGE: 0x1020d007
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW: 0x40408006
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM2_RW: 0x50408006
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW: 0x6020d006
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_GPU_CDRAM_RW: 0xa0408006
 
 
user memory types:
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP*****: 0x620d006
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_TEXT: 0xc20d050
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_DEVICE_RW: ok
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW: 0xc20d060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE: 0xc208060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW: 0x9408060
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM2_RW: 0x5408060
 
 
code memory types:
 
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L1WBWA: 0x4000
 
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L2WBWA: 0x2000
 
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_NORMAL_NC
 
 
alloc attributes:
 
SCE_KERNEL_MEMBLOCK_ALLOC_ATTR_HAS_PBASE
 
</source>
 
  
 
from 0.990:
 
from 0.990:
 
<source>
 
<source>
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L1WBWA
 
SCE_KERNEL_MEMBLOCK_CODE_MEMORY_TYPE_L2WBWA
 
SCE_KERNEL_MEMBLOCK_CODE_USER_CDRAM_L1WBWA_RW
 
 
 
CDIALOG:
 
CDIALOG:
 
SCE_KERNEL_MEMBLOCK_TYPE_CDIALOG_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_CDIALOG_NC_R
Line 1,350: Line 1,476:
  
 
KERNEL:
 
KERNEL:
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_BOOT_IMAGE
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM2_RW
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW
+
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_GPU_CDRAM_RW
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RO
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RO
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RO
+
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R
+
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_R_UNCACHE
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_RW
Line 1,384: Line 1,500:
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_SO_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_SO_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW
+
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_GAME
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_UNCACHE
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_SO_RW
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW
+
 
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW
Line 1,405: Line 1,517:
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM2_RW
+
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
+
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_SO_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_SO_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP*****
+
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_RW
 +
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_DEVICE_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_GAME_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_GAME_RW
Line 1,429: Line 1,542:
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RX
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
+
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
 
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_R
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RW
Line 1,443: Line 1,555:
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RW
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RX
 
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RX
SCE_KERNEL_MEMBLOCK_TYPE_USER_TEXT
 
 
</source>
 
</source>
  
 
== SceSysmemForKernel ==
 
== SceSysmemForKernel ==
  
=== sceKernelGetPhyPartKernelForKernel ===
+
=== sceKernelGrowPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x4D38F861
+
| 0.990-3.60 || 0x6B3F4102
 
|}
 
|}
  
return gpPhyPartKernel;
+
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.
  
<source lang="C">int sceKernelGetPhyPartKernelForKernel(void);</source>
+
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source>
  
=== sceKernelPhyMemLowAllocForKernel ===
+
=== sceKernelGrowPhyMemPartWithFlagsForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x5E169FEF
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x775AA5E3
 
|}
 
|}
  
<source lang="C">
+
Grows physical memory partition with flags.
// type must be 0x10001, 0x10002 or 0x20001
+
 
int sceKernelPhyMemLowAllocForKernel(int type, uint size, uint alignment, void *out);
+
<source lang="C">int sceKernelGrowPhyMemPartWithFlagsForKernel(SceKernelPhyMemPart *pPhyMemPart, int flags, SceSize psize);</source>
</source>
 
  
=== sceKernelPhyMemLowPA2VAForKernel ===
+
=== sceKernelGetGrownPhyMemPartSizeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x0FD6B756
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x4D809B47
 
|}
 
|}
  
<source lang="C">
+
This is a temp name.
// type must be 0x10002
+
 
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
+
Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.
</source>
+
 
 +
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source>
  
=== sceKernelGetPhyMemLowInfoForKernel ===
+
=== sceKernelAddressSpaceSetProcessForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x06A4DA6C
+
| 0.990-3.60 || 0x2476B90F
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID uid, SceUID pid);</source>
typedef struct SceKernelPhyMemLowInfo { // size is 0x1C on FW 0.931-0.990
 
SceSize size; // Size of this structure
 
uint32_t unk_4;
 
uint32_t unk_8;
 
uint32_t unk_C;
 
uint32_t unk_10;
 
uint32_t unk_14;
 
uint32_t unk_18;
 
} SceKernelPhyMemLowInfo;
 
 
 
// type must be 0x10001, 0x10002 or 0x20001
 
  
int sceKernelGetPhyMemLowInfoForKernel(int type, SceKernelPhyMemLowInfo *info);
+
=== sceKernelAddressSpaceChangeMMUContextForKernel ===
</source>
 
 
 
=== sceKernelPhyMemLowFreeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x18B99FDD
+
| 0.931-3.60 || 0x653B0849
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelAddressSpaceChangeMMUContextForKernel(SceUID uid);</source>
// type must be 0x10001, 0x10002 or 0x20001
 
int sceKernelPhyMemLowFreeForKernel(int type);
 
</source>
 
  
=== SceSysmemForKernel_66636970 ===
+
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x66636970
+
| 0.931 || 0x671A3444
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Return *class.
+
<source lang="C">int sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID uid, const void *addr, void *pInfo);</source>
  
<source lang="C">int SceSysmemForKernel_66636970(SceUID uid);</source>
+
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===
 
 
=== SceSysmemForKernel_95ABFDC3 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x95ABFDC3
+
| 0.931 || 0xCB6E1C80
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int SceSysmemForKernel_95ABFDC3(uint32_t flags);</source>
+
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID uid, const void *addr, void *pInfo);</source>
  
=== sceKernelRegisterClassForKernel ===
+
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x11761B77
+
| 0.931 || 0x1A898F2E
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceKernelAllocKernelHeapForKernel ===
+
<source lang="C">
{| class="wikitable"
+
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
|-
+
  SceSize size; // Size of this structure
! Version !! NID
+
  char unk[0x4008];
|-
+
} SceKernelAddressSpaceMMUL1AllInfo;
| 0.990 || 0x432EADA6
 
|}
 
  
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
+
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID uid, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source>
  
=== sceUIDCreateEntryHeapForKernel ===
+
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x19CAEF35
+
| 0.931 || 0x1E1AA29B
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceUIDCreateEntryHeapForKernel(void);</source>
+
<source lang="C">
 +
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
 +
  SceSize size; // Size of this structure
 +
  char unk[0x400];
 +
} SceKernelAddressSpaceMMUL2AllInfo;
 +
 
 +
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID uid, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source>
  
=== sceUIDKernelCreateForKernel ===
+
=== sceKernelGetPhyPartKernelForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xE6FAD50A
+
| 0.931-3.60 || 0x4D38F861
 
|}
 
|}
  
=== sceUIDObjectSetClassForKernel ===
+
return gpPhyPartKernel;
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 0.990 || 0x226DE851
 
|}
 
  
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>
+
<source lang="C">int sceKernelGetPhyPartKernelForKernel(void);</source>
  
=== sceGUIDGetEntryInfoAllForKernel ===
+
=== sceKernelGetPhyMemPartInfoCoreForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2A79C51C
+
| 0.931 || not present
 +
|-
 +
| 0.990-3.60 || 0x3650963F
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUID uid, void *vectors, uint32_t nVector, void *out);</source>
+
<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source>
  
=== sceGUIDNameForKernel ===
+
=== sceKernelPhyMemLowAllocForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x250EE289
+
| 0.931-3.60 || 0x5E169FEF
 
|}
 
|}
  
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>
+
<source lang="C">
 +
// type must be 0x10001, 0x10002 or 0x20001
 +
int sceKernelPhyMemLowAllocForKernel(int type, uint size, uint alignment, void *out);
 +
</source>
  
=== sceGUIDRegisterForKernel ===
+
=== sceKernelPhyMemLowPA2VAForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xAF42AAD5
+
| 0.931-3.60 || 0x0FD6B756
 
|}
 
|}
  
<source lang="C">int sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
+
<source lang="C">
 +
// type must be 0x10002
 +
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);
 +
</source>
  
=== sceKernelGetAddressSpaceMMUContextForKernel ===
+
=== sceKernelGetPhyMemLowInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xFBEF93AA
+
| 0.931-0.990 || 0x06A4DA6C
 
|}
 
|}
  
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID uid, void *context);</source>
+
<source lang="C">
 +
typedef struct SceKernelPhyMemLowInfo { // size is 0x1C on FW 0.931-0.990
 +
SceSize size; // Size of this structure
 +
uint32_t unk_4;
 +
uint32_t unk_8;
 +
uint32_t unk_C;
 +
uint32_t unk_10;
 +
uint32_t unk_14;
 +
uint32_t unk_18;
 +
} SceKernelPhyMemLowInfo;
 +
 
 +
// type must be 0x10001, 0x10002 or 0x20001
 +
 
 +
int sceKernelGetPhyMemLowInfoForKernel(int type, SceKernelPhyMemLowInfo *info);
 +
</source>
  
=== sceKernelAllocSimpleMemBlockForKernel ===
+
=== sceKernelPhyMemLowFreeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF81F4672
+
| 0.931-3.60 || 0x18B99FDD
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
typedef struct SceKernelSimpleMemBlock {
+
// type must be 0x10001, 0x10002 or 0x20001
char unk_0[0x14];
+
int sceKernelPhyMemLowFreeForKernel(int type);
void *base;
 
char unk_18[0x14];
 
void *PhyPage;
 
SceSize size;
 
} SceKernelSimpleMemBlock;
 
 
 
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);
 
 
</source>
 
</source>
  
=== sceKernelGetSimpleMemBlockBaseForKernel ===
+
=== sceGUIDtoClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0A8D14EC
+
| 0.990-3.60 || 0x66636970
 
|}
 
|}
  
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>
+
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID uid);</source>
  
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
+
=== SceSysmemForKernel_95ABFDC3 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF7250E6C
+
| 0.990-3.60 || 0x95ABFDC3
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID uid, const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
+
<source lang="C">int SceSysmemForKernel_95ABFDC3(uint32_t flags);</source>
  
=== sceKernelGetPhyMemPartInfoByIDForKernel ===
+
=== sceKernelRegisterClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF4FA0575
+
| 0.990 || 0x11761B77
 
|}
 
|}
  
<source lang="C">
+
=== sceKernelAllocKernelHeapForKernel ===
typedef struct SceKernelPhyMemPartInfo { // size is 0x44 on FW 0.931
 
  SceSize size;  // Size of this structure
 
  char unk[0x40];
 
} SceKernelPhyMemPartInfo;
 
 
 
int sceKernelGetPhyMemPartInfoByIDForKernel(SceUID id, SceKernelPhyMemPartInfo *pInfo);
 
</source>
 
 
 
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x63D83911
+
| 0.931-0.990 || 0x432EADA6
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source>
// type: 0x10000 for Lpddr2Main, 0x30000 for Cdram
 
int sceKernelCreatePhyMemPartByPbaseForKernel(uint32_t param_1, int type, int param_3, uint32_t size, void *out);
 
</source>
 
  
=== sceKernelDeletePhyMemPartForKernel ===
+
=== sceUIDCreateEntryHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2AEA9E09
+
| 0.990-3.60 || 0x19CAEF35
 
|}
 
|}
  
<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
+
<source lang="C">int sceUIDCreateEntryHeapForKernel(void);</source>
  
=== sceKernelGetPhyMemPartAllForKernel ===
+
=== sceUIDObjectSetClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2F6F9C2C
+
| 0.931-0.990 || 0x226DE851
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelGetPhyMemPartAllForKernel(int param_1, int param_2, void *pCountInBuffer);</source>
+
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source>
  
=== sceKernelGetPhyMemPartInfoForKernel ===
+
=== sceGUIDGetEntryInfoAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x67849418
+
| 0.990-3.60 || 0x2A79C51C
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source>
+
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUID uid, void *vectors, uint32_t nVector, void *out);</source>
  
=== sceUIDDeleteEntryHeapForKernel ===
+
=== sceGUIDNameForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF0C3FCFC
+
| 0.990 || 0x250EE289
 
|}
 
|}
  
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID uid);</source>
+
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source>
  
=== sceGUIDUnregisterForKernel ===
+
=== sceGUIDRegisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xE79BBCF2
+
| 0.990-3.60 || 0xAF42AAD5
 
|}
 
|}
  
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>
+
<source lang="C">int sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
  
=== sceGUIDGetEntryInfoClassForKernel ===
+
=== sceUIDRegisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xE90CFD62
+
| 0.931-0.990 || 0x59162CD7
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID uid, int a2, void *vectors, int nVector, void *out);</source>
+
Calls sceGUIDRegisterForKernel.
 +
 
 +
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
  
=== sceKernelGetPhyPageResetForKernel ===
+
=== SceSysmemForKernel_48D87E17 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xEB350679
+
| 0.990-3.60 || 0x48D87E17
 
|}
 
|}
  
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>
+
=== sceKernelGetAddressSpaceMMUContextForKernel ===
 
 
=== sceKernelFreePhyPageForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x00BC5B4A
+
| 0.990-3.60 || 0xFBEF93AA
 
|}
 
|}
  
<source lang="C">int sceKernelFreePhyPageForKernel(uint32_t a1, int pPage, uint32_t a3, uint32_t a4);</source>
+
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID uid, void *context);</source>
  
=== sceKernelNameHeapInsertForKernel ===
+
=== sceKernelAllocSimpleMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x08AB3DAE
+
| 0.990-3.60 || 0xF81F4672
 
|}
 
|}
  
<source lang="C">int sceKernelNameHeapInsertForKernel(char *name, uint32_t flags, uint32_t *out);</source>
+
<source lang="C">
 +
typedef struct SceKernelSimpleMemBlock {
 +
char unk_0[0x14];
 +
void *base;
 +
char unk_18[0x14];
 +
void *PhyPage;
 +
SceSize size;
 +
} SceKernelSimpleMemBlock;
 +
 
 +
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);
 +
</source>
  
=== scePUIDReleaseObjectForKernel ===
+
=== sceKernelGetSimpleMemBlockBaseForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x3FCA782B
+
| 0.990-3.60 || 0x0A8D14EC
 
|}
 
|}
  
=== scePUIDGetInfoForKernel ===
+
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source>
 +
 
 +
=== sceKernelGetMemBlockInfoSimpleForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x12ED88AE
+
| 0.990-3.60 || 0x2364A170
 
|}
 
|}
  
=== sceGUIDGetEntryForKernel ===
+
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source>
 +
 
 +
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x45F2A59C
+
| 0.990-3.60 || 0xF7250E6C
 
|}
 
|}
  
=== sceGUIDGetVisibilityLevelForKernel ===
+
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID uid, const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
 +
 
 +
=== sceKernelCreatePhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC69666C3
+
| 0.931-3.60 || 0x2E36E0C4
 
|}
 
|}
  
=== sceGUIDSetVisibilityLevelForKernel ===
+
Calls sceKernelCreatePhyMemPartByPbaseForKernel with pbase = 0.
 +
 
 +
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart *pPhyMemPart);</source>
 +
 
 +
=== sceKernelCreatePhyMemPartByPbaseForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCB8D03C0
+
| 0.931-3.60 || 0x63D83911
 
|}
 
|}
  
=== sceGUIDFindByNameForKernel ===
+
<source lang="C">
 +
/*
 +
type
 +
 
 +
ORed values:
 +
0x00002 : Shell
 +
0x00004 : Game
 +
0x00005 : PhyCont
 +
0x00060 : CDialog
 +
0x10000 : Lpddr2Main
 +
0x30000 : Cdram
 +
 
 +
seen values:
 +
0x10002 : ShellLpddr2Main (shared)
 +
0x10004 : GameLpddr2Main
 +
0x10005 : PhyContLpddr2Main
 +
0x10064 : GameCDialogLpddr2Main
 +
 
 +
0x30002 : ShellCdram
 +
0x30004 : GameCdram
 +
*/
 +
 
 +
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);
 +
</source>
 +
 
 +
=== sceKernelDeletePhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCEBA8031
+
| 0.931-3.60 || 0x2AEA9E09
 
|}
 
|}
  
=== sceGUIDFindByNameAllForKernel ===
+
<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source>
 +
 
 +
=== sceKernelGetPhyMemPartAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4B5C85AC
+
| 0.931-3.60 || 0x2F6F9C2C
 
|}
 
|}
  
=== sceGUIDGetPIDForKernel ===
+
<source lang="C">int sceKernelGetPhyMemPartAllForKernel(int param_1, int param_2, void *pCountInBuffer);</source>
 +
 
 +
=== sceKernelGetPhyMemPartInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCF5A2311
+
| 0.931-0.990 || 0x67849418
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceGUIDSetCNOAForKernel ===
+
<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source>
 +
 
 +
=== sceKernelGetPhyMemPartInfoByIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8D6AF468
+
| 0.931-3.60 || 0xF4FA0575
 
|}
 
|}
  
=== sceGUIDSetForKernel ===
+
<source lang="C">
 +
typedef struct SceKernelPhyMemPartInfo { // size is 0x44 on FW 0.931-0.990
 +
  SceSize size;  // Size of this structure
 +
  uint32_t unk_4; // some size or address
 +
  uint32_t unk_8; // some size or address
 +
  char unk1[0xC];
 +
  char *name; // name, maybe pointer or array
 +
  char unk2[0x24];
 +
} SceKernelPhyMemPartInfo;
 +
 
 +
int sceKernelGetPhyMemPartInfoByIDForKernel(SceUID id, SceKernelPhyMemPartInfo *pInfo);
 +
</source>
 +
 
 +
=== sceUIDDeleteEntryHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xD7B323EB
+
| 0.990-3.60 || 0xF0C3FCFC
 
|}
 
|}
  
<source lang="C">int sceGUIDSetForKernel(SceUID uid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
+
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID uid);</source>
  
=== sceUIDGetProcUIDVectorByClassForKernel ===
+
=== sceGUIDUnregisterForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x51C08396
+
| 0.931-0.990 || 0xE79BBCF2
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceUIDReferObjectWithLevelForKernel ===
+
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source>
 +
 
 +
=== sceGUIDGetEntryInfoClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xF79B52B2
+
| 0.990-3.60 || 0xE90CFD62
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceKernelPhysicalMemWriteForKernel ===
+
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID uid, int a2, void *vectors, int nVector, void *out);</source>
 +
 
 +
=== sceKernelGetPhyPageResetForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x4B86A751
+
| 0.990-3.60 || 0xEB350679
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelPhysicalMemWriteForKernel(void *dest, const void *src, SceSize size);</source>
+
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source>
  
=== sceKernelPhysicalMemReadForKernel ===
+
=== sceKernelFreePhyPageForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xF96E3AE2
+
| 0.990-3.60 || 0x00BC5B4A
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Temp name was memcpy_from_paddr.
+
<source lang="C">int sceKernelFreePhyPageForKernel(uint32_t a1, int pPage, uint32_t a3, uint32_t a4);</source>
  
dest must be a vaddr and src must be a paddr. Return copied size on success.
+
=== sceKernelNameHeapInsertForKernel ===
 
 
<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.990-3.60 || 0x5FFE4B79
+
| 0.990-3.60 || 0x08AB3DAE
 
|}
 
|}
  
Temp name was sceKernelAllocSystemCallTableForKernel.
+
<source lang="C">int sceKernelNameHeapInsertForKernel(char *name, uint32_t flags, uint32_t *out);</source>
 
 
<source lang="C">
 
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID pid, const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);
 
</source>
 
  
=== sceKernelUIDEntryHeapGetInfoForKernel ===
+
=== sceGUIDKernelCreateForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990 || 0xE6FAD50A
 
|-
 
|-
| 3.60 || 0x686AA15C
+
| 3.60 || not present
 
|}
 
|}
  
=== sceUIDEntryHeapCloseAllPUIDForKernel ===
+
Create a GUID with default attribute (0x30000).
 +
 
 +
<source lang="C">int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
 +
 
 +
=== sceGUIDKernelCreateWithAttrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xFAF96C1F
+
| 0.990-3.60 || 0x53E1FFDE
 
|}
 
|}
  
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID uid);</source>
+
Create a GUID with the specified attribute.
 +
 
 +
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);</source>
  
=== sceKernelNameHeapGetInfoForKernel ===
+
=== scePUIDKernelCreateWithAttrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 1,964: Line 2,131:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 3.60 || 0xE443253B
+
| 3.60 || 0xDF0288D7
 
|}
 
|}
  
=== sceKernelGetFixedHeapInfoByPointerForKernel ===
+
Temp name was sceKernelCreateUidObjForKernel.
 +
 
 +
<source lang="c">
 +
typedef struct ScePUIDKernelCreateParam { // size is at least 0x20 on FW 3.60
 +
SceUInt32 attr;
 +
SceUInt32 field_4;
 +
SceUID uid;
 +
SceUID pid;
 +
SceUInt32 field_10;
 +
SceUInt32 field_14;
 +
SceUInt32 field_18;
 +
SceUInt32 field_1C;
 +
} ScePUIDKernelCreateParam;
 +
SceUID scePUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, ScePUIDKernelCreateParam *pParam, SceKernelObject **ppEntry);
 +
</source>
 +
 
 +
=== scePUIDReleaseObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x219E90FD
+
| 0.990-3.60 || 0x3FCA782B
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID uid);</source>
// pObject is of size 0x30
 
// pObject first 4 bytes are structure size
 
int sceKernelGetFixedHeapInfoByPointerForKernel(void *pObject, SceKernelFixedHeapInfo *pInfo);</source>
 
  
=== sceKernelGetHeapInfoByPointerForKernel ===
+
=== scePUIDGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 1,987: Line 2,167:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 3.60 || 0x68451777
+
| 3.60 || 0x12ED88AE
 
|}
 
|}
  
<source lang="C">int sceKernelGetHeapInfoByPointerForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>
+
<source lang="C">
 +
// pInfo size is 0x14 bytes
 +
int scePUIDGetInfoForKernel(SceUID pid, SceUID uid, void *pInfo);
 +
</source>
  
=== sceKernelGetHeapInfoForKernel ===
+
=== sceGUIDGetEntryForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x91733EF4
+
| 3.60 || 0x45F2A59C
 
|}
 
|}
  
<source lang="C">
+
=== sceGUIDGetVisibilityLevelForKernel ===
int sceKernelGetHeapInfoForKernel(SceUID uid, SceKernelHeapInfo *pInfo);
 
</source>
 
 
 
=== sceKernelFreeSimpleMemBlockForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA1FFA2C9
+
| 3.60 || 0xC69666C3
 
|}
 
|}
  
=== sceKernelAllocForKernel ===
+
=== sceGUIDSetVisibilityLevelForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC0A4D2F3
+
| 3.60 || 0xCB8D03C0
|-
 
| 3.65 || 0x85571907
 
 
|}
 
|}
  
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>
+
=== sceGUIDFindByNameForKernel ===
 
 
=== sceKernelFreeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xABAB0FAB
+
| 3.60 || 0xCEBA8031
|-
 
| 3.65 || 0x4233C16D
 
 
|}
 
|}
<source lang="C">
 
void sceKernelFreeForKernel(void *ptr);
 
</source>
 
  
=== sceGUIDGetObjectWithClassForKernel ===
+
=== sceGUIDFindByNameAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x7ABFA9A7
+
| 3.60 || 0x4B5C85AC
 
|}
 
|}
  
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>
+
=== sceGUIDGetPIDForKernel ===
 
 
=== SceSysmemForKernel_C38D61FC ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xC38D61FC
+
| 3.60 || 0xCF5A2311
 
|}
 
|}
  
Calls SceSysmemForDriver_89A44858.
+
=== sceGUIDSetCNOAForKernel ===
 
 
=== sceUIDGetObjectForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xC4893914
+
| 3.60 || 0x8D6AF468
 
|}
 
|}
  
=== SceSysmemForKernel_620E00E7 ===
+
=== sceGUIDSetForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x620E00E7
+
| 0.931-3.60 || 0xD7B323EB
 
|}
 
|}
  
<source lang="C">SceSysmemForKernel_620E00E7(int a1, int global_id, _DWORD *out);</source>
+
<source lang="C">int sceGUIDSetForKernel(SceUID uid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source>
  
=== SceSysmemForKernel_7C797940 ===
+
=== sceUIDGetProcUIDVectorByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x7C797940
+
| 0.990 || 0x51C08396
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Calls SceSysmemForKernel_620E00E7 or SceSysmemForDriver_0F5C84B7.
+
=== sceUIDReferObjectWithLevelForKernel ===
 
 
=== sceUIDtoObjectForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xED221825
+
| 0.990 || 0xF79B52B2
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Calls sceKernelGUIDGetObjectForDriver.
+
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source>
 
 
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>
 
  
=== sceGUIDKernelCreateWithAttrForKernel ===
+
=== sceGUIDReferForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x53E1FFDE
+
| 3.60 || 0xB3E2AA7A
 
|}
 
|}
  
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, uint32_t a2, uint32_t a3, SceKernelObject *pObject);</source>
+
<source lang="C">int sceGUIDReferForKernel(SceUID pid, int guid);</source>
  
=== sceGUIDOpenByGUIDForKernel ===
+
=== sceKernelPhysicalMemWriteForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCF53EEE4
+
| 0.931 || 0x4B86A751
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceGUIDGetUIDVectorByClassForKernel ===
+
<source lang="C">int sceKernelPhysicalMemWriteForKernel(void *dest, const void *src, SceSize size);</source>
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 0.931-3.60 || 0xEC7D36EF
 
|}
 
  
=== sceUIDGetUIDVectorByClassForKernel ===
+
=== sceKernelPhysicalMemReadForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xA2F03233
+
| 0.931-0.990 || 0xF96E3AE2
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
It is simply a wrapper for sceGUIDGetUIDVectorByClassForKernel.
+
Temp name was memcpy_from_paddr.
 +
 
 +
dest must be a vaddr and src must be a paddr. Return copied size on success.
 +
 
 +
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source>
  
=== sceKernelCreateAddressSpaceForKernel ===
+
=== sceKernelAllocPartitionMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x4A3737F0
+
| 0.931-3.60 || 0x5FFE4B79
|-
 
| 3.65 || 0x8EE89D2C
 
 
|}
 
|}
 +
 +
Temp name was sceKernelAllocSystemCallTableForKernel.
  
 
<source lang="C">
 
<source lang="C">
// flag use 0x10000001
+
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);
int sceKernelCreateAddressSpaceForKernel(SceUID a1, void *a2, int flag, SceKernelAddressSpace **ppAS);
 
 
 
3.60
 
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *titleid, int flag, SceKernelAddressSpace *pAS);
 
 
</source>
 
</source>
  
=== sceKernelDeleteAddressSpaceForKernel ===
+
=== sceUIDEntryHeapGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0xF2D7FE3A
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x686AA15C
 
|}
 
|}
  
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>
+
=== sceUIDEntryHeapCloseAllPUIDForKernel ===
 
 
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x89CE1F31
+
| 0.931-3.60 || 0xFAF96C1F
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID uid);</source>
+
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID uid);</source>
  
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
+
=== sceKernelNameHeapGetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x67955EE9
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0xE443253B
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID uid, int a2, SceKernelPhyMemPart *pPhyMemPart);</source>
+
=== sceKernelGetFixedHeapInfoByPointerForKernel ===
 
 
=== sceKernelAddressSpaceUnmapForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0xCE72839E
+
| 0.990-3.60 || 0x219E90FD
 
|}
 
|}
  
<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, int unk, uint32_t paddr, SceSize size);</source>
 
 
Example: in SceSysStateMgr:
 
 
<source lang="C">
 
<source lang="C">
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
+
// pObject is of size 0x30
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
+
// pObject first 4 bytes are structure size
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);
+
int sceKernelGetFixedHeapInfoByPointerForKernel(void *pObject, SceKernelFixedHeapInfo *pInfo);</source>
</source>
 
  
3.60
+
=== sceKernelGetHeapInfoByPointerForKernel ===
 
 
<source lang="C">
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
 
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);
 
</source>
 
 
 
=== sceKernelAddressSpaceVAtoPAForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF2179820
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x68451777
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, uint32_t mode, void *pVA, void **pPA);</source>
+
<source lang="C">int sceKernelGetHeapInfoByPointerForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source>
  
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
+
=== sceKernelGetHeapInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCC7BB240
+
| 0.990-3.60 || 0x91733EF4
 
|}
 
|}
  
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>
+
<source lang="C">
 +
int sceKernelGetHeapInfoForKernel(SceUID uid, SceKernelHeapInfo *pInfo);
 +
</source>
  
=== sceKernelRxMemcpyKernelToUserForPidForKernel ===
+
=== sceKernelFreeSimpleMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x30931572
+
| 0.990-3.60 || 0xA1FFA2C9
 
|}
 
|}
  
Unrestricted memcpy to the virtual address space for process <code>pid</code>. Both <code>dst</code> and <code>src</code> must be in the address space of <code>pid</code> but <code>src</code> must also be accessible in the address space of the caller. This is normally used for resolving stubs in module loads. Same as write to RO but does a cache flush.
+
=== sceKernelAllocForKernel ===
 
 
<source lang="c">int sceKernelRxMemcpyKernelToUserForPidForKernel(SceUID pid, uintptr_t dst, const void *src, size_t len);</source>
 
 
 
=== sceKernelFindClassByNameForKernel ===
 
 
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x62989905
+
| 0.990-3.60 || 0xC0A4D2F3
 +
|-
 +
| 3.65 || 0x85571907
 
|}
 
|}
  
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **class);</source>
+
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source>
 
 
=== sceKernelGetMemBlockTypeForKernel ===
 
  
 +
=== sceKernelAllocWithOptForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x289BE3EC
+
| 3.60 || 0xA2CD1697
 
|}
 
|}
  
<source lang="c">
+
<source lang="C">
/***
+
 
* Gets the memory block type of a memory block
+
typedef struct SceAllocOpt {
*
+
    SceSize size;  // 0x14
* @param[in] uid - SceUID of the memory block
+
    SceSize data04; // maybe len align?
* @param[out] type - Type of the memory block identified by uid
+
    SceSize align;
*
+
    int data0C;
* @return 0 on success, < 0 on error.
+
    int data10;
*/
+
} SceAllocOpt;
int sceKernelGetMemBlockTypeForKernel(SceUID uid, unsigned int *type);</source>
+
 
 +
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);
  
=== sceKernelCreateUidObjForKernel ===
+
</source>
  
 +
=== sceKernelFreeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xDF0288D7
+
| 0.990-3.60 || 0xABAB0FAB
 +
|-
 +
| 3.65 || 0x4233C16D
 
|}
 
|}
 +
<source lang="C">
 +
void sceKernelFreeForKernel(void *ptr);
 +
</source>
  
<source lang="c">SceUID sceKernelCreateUidObjForKernel(SceClass *class, const char *name, SceCreateUidObjOpt *opt, SceKernelObject **obj);</source>
+
=== sceGUIDGetObjectWithClassForKernel ===
 
 
=== sceKernelGetUidHeapClassForKernel ===
 
 
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4CCA935D
+
| 0.990-3.60 || 0x7ABFA9A7
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUidHeapClassForKernel(void);</source>
+
Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.
  
=== sceKernelGetUidMemBlockClassForKernel ===
+
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source>
  
 +
=== SceSysmemForKernel_C38D61FC ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xAF729575
+
| 0.990 || 0xC38D61FC
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUidMemBlockClassForKernel(void);</source>
+
Calls SceSysmemForDriver_89A44858.
 
 
=== sceKernelGetUidDLinkClassForKernel ===
 
  
 +
=== sceUIDGetObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC105604E
+
| 0.931-0.990 || 0xC4893914
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUidDLinkClassForKernel(void);</source>
+
Calls sceGUIDGetObjectForDriver.
  
== SceSysmemForDriver ==
+
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source>
  
=== SceSysmemForDriver_65B9B393 ===
+
=== SceSysmemForKernel_620E00E7 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x65B9B393
+
| 0.990 || 0x620E00E7
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Return *class.
+
<source lang="C">SceSysmemForKernel_620E00E7(int a1, int global_id, _DWORD *out);</source>
  
<source lang="C">uint32_t SceSysmemForDriver_65B9B393(SceUID uid);</source>
+
=== SceSysmemForKernel_7C797940 ===
 
 
=== get_class ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xFE28F5EB
+
| 0.990 || 0x7C797940
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">SceClass *get_class(void);</source>
+
Calls SceSysmemForKernel_620E00E7 or sceGUIDReferObjectForDriver.
  
=== sceUIDKernelCreateForDriver ===
+
=== sceKernelRxMemcpyKernelToUserForPidForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x7FC849B1
+
| 0.990-3.60 || 0x30931572
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceUIDClassInitForDriver ===
+
Unrestricted memcpy to the virtual address space for process <code>pid</code>. Both <code>dst</code> and <code>src</code> must be in the address space of <code>pid</code> but <code>src</code> must also be accessible in the address space of the caller. This is normally used for resolving stubs in module loads. Same as write to RO but does a cache flush.
 +
 
 +
<source lang="c">int sceKernelRxMemcpyKernelToUserForPidForKernel(SceUID pid, void * dst, const void *src, SceSize size);</source>
 +
 
 +
=== sceUIDtoObjectForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xE6D75E99
+
| 0.990-3.60 || 0xED221825
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceUIDClassInitForDriver(SceClass *class, const char *name, uint32_t uid_class, uint32_t item_size, void *constructor, void *destructor);</source>
+
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].
 +
 
 +
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source>
  
=== sceKernelCopyFromUserForDriver ===
+
=== sceGUIDOpenByGUIDForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xE08F3967
+
| 0.990-3.60 || 0xCF53EEE4
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelCopyFromUserForDriver(void *dst, const void *src, SceSize size);</source>
+
=== sceGUIDGetUIDVectorByClassForKernel ===
 
 
=== add_heap ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xB800123C
+
| 0.931-3.60 || 0xEC7D36EF
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int add_heap(SceUID uid, const char *name, SceClass *class);</source>
+
Copy uid to vector by referring to all objects created by cls.
 +
 
 +
<source lang="C">
 +
/*
 +
* num - max copy number
 +
*/
 +
int sceGUIDGetUIDVectorByClassForKernel(SceClass *cls, int vis_level, SceUID *vector, SceSize num, SceSize *ret_num);
 +
</source>
  
=== compare_struct_0x10 ===
+
=== sceUIDGetUIDVectorByClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x6484D03E
+
| 0.931-0.990 || 0xA2F03233
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">uint32_t compare_struct_0x10(char *a1, const char *a2);</source>
+
It is simply a wrapper for sceGUIDGetUIDVectorByClassForKernel.
  
=== sceGUIDNameForDriver ===
+
=== sceKernelCreateAddressSpaceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xB2BB6216
+
| 0.990-3.60 || 0x4A3737F0
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0x8EE89D2C
 
|}
 
|}
  
<source lang="C">char *sceGUIDNameForDriver(SceUID id);</source>
+
<source lang="C">
 +
// flag: 0x10000001
 +
// name: maybe titleid
 +
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 flag, SceKernelAddressSpace *pAS);
 +
</source>
  
=== sceKernelGetMemBlockAllocSizeForDriver ===
+
=== sceKernelDeleteAddressSpaceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x63E5754B
+
| 0.931-3.60 || 0xF2D7FE3A
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID id, SceSize *size);</source>
+
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source>
  
=== sceUIDGetClassInfoAllForDriver ===
+
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x3EF32C6C
+
| 0.931-3.60 || 0x89CE1F31
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceUIDGetClassInfoAllForDriver(SceClassInfo_0990 *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);</source>
+
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source>
  
=== sceKernelUIDCloseForDriver ===
+
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x32C5F628
+
| 0.931-3.60 || 0x67955EE9
|-
+
|}
| 3.60 || not present
 
|}
 
  
a2 is addr or flags. (a2 & 0x40000000) == 0) means kernel uid else userland uid.
+
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, int a2, SceKernelPhyMemPart *pPhyMemPart);</source>
  
<source lang="C">int sceKernelUIDCloseForDriver(SceUID uid, uint32_t a2);</source>
+
=== sceKernelAddressSpaceUnmapForKernel ===
 
 
=== sceKernelStrncpyToUserForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x369355F1
+
| 0.931-3.60 || 0xCE72839E
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelStrncpyToUserForDriver(char **dst_str, const char *src_str, SceSize to_copy_size, SceSize *dst_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, int unk, uint32_t paddr, SceSize size);</source>
  
=== sceKernelProcUserStrcpyForDriver ===
+
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>
 +
 
 +
=== sceKernelAddressSpaceVAtoPAForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xEBCB3970
+
| 0.990-3.60 || 0xF2179820
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);</source>
+
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, uint32_t mode, void *pVA, void **pPA);</source>
  
=== sceKernelUserStrncpyForDriver ===
+
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-0.990 || 0xE6D5EFE4
+
| 0.990-3.60 || 0xCC7BB240
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Return 0 on success.
+
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source>
  
<source lang="C">int sceKernelUserStrcpyForDriver(char *dst, const char *src);</source>
+
=== sceKernelFindClassByNameForKernel ===
  
=== sceKernelUserStrnlenForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-0.990 || 0xFF06898A
+
| 3.60 || 0x62989905
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);</source>
+
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **class);</source>
 +
 
 +
=== sceKernelGetMemBlockTypeForKernel ===
  
=== SceSysmemForDriver_F09A7D09 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xF09A7D09
+
| 3.60 || 0x289BE3EC
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Calls sceKernelGUIDCloseForDriver.
+
<source lang="c">
 
+
/***
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source>
+
* Gets the memory block type of a memory block
 
+
*
=== Switch TTB For PID ===
+
* @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 ===
 +
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69 || 0x6F2ACDAE
+
| 3.60 || 0x4CCA935D
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Changes the TTBR to point to the tables for a given PID.
+
<source lang="c">SceClass *sceKernelGetUidHeapClassForKernel(void);</source>
  
<source lang="c">int switch_ttb_for_pid(SceUID pid);</source>
+
=== sceKernelGetUidMemBlockClassForKernel ===
  
=== sceKernelRoMemcpyKernelToUserForPidForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69 || 0x571D2739
+
| 3.60 || 0xAF729575
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="c">int sceKernelRoMemcpyKernelToUserForPidForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
+
<source lang="c">SceClass *sceKernelGetUidMemBlockClassForKernel(void);</source>
  
=== sceKernelAllocHeapMemoryForDriver ===
+
=== sceKernelGetUidDLinkClassForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x7B4CB60A
+
| 0.990-3.60 || 0xC105604E
 
|}
 
|}
  
Temp name was sceKernelMemPoolAlloc.
+
<source lang="c">SceClass *sceKernelGetUidDLinkClassForKernel(void);</source>
 
 
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.
 
 
 
<source lang="c">void* sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source>
 
  
=== sceKernelAllocHeapMemoryFromGlobalHeapForDriver ===
+
=== SceSysmemForKernel_F8E95A5A ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7750CEA7
+
| 0.990-3.60 || 0xF8E95A5A
 
|}
 
|}
  
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uid = -1 (global heap <code>uid</code>).
+
Certainly returns address to a structure.
  
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapForDriver(SceSize size);</source>
+
<source lang="C">int SceSysmemForKernel_F8E95A5A(void);</source>
  
=== sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver ===
+
=== SceSysmemForKernel_54E85275 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0B4ED16A
+
| 0.990-1.50 || not present
 +
|-
 +
| 3.60 || 0x54E85275
 
|}
 
|}
  
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uid = -1 (global heap <code>uid</code>).
+
Uses result from [[SceSysmem#SceSysmemForKernel_F8E95A5A]].
  
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
+
<source lang="C">
 +
// some_struct comes from SceSysmemForKernel_F8E95A5A
 +
// out_struct size is 0xB0 bytes
 +
int SceSysmemForKernel_54E85275(void *some_struct, void *out_struct);
 +
</source>
  
=== sceKernelAllocHeapMemoryWithOptForDriver ===
+
=== SceSysmemForKernel_7BD56D6D ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB415B5A8
+
| 0.990-1.50 || not present
 +
|-
 +
| 3.60 || 0x7BD56D6D
 
|}
 
|}
  
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
+
Used by SceProcessmgr.
  
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
+
<source lang="C">int SceSysmemForKernel_7BD56D6D(SceUID guid, const char *name);</source>
  
=== sceKernelAllocHeapMemoryWithOptionForDriver ===
+
=== SceSysmemForKernel_9C7B62AB ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x49D4DD9B
+
| 0.990-3.60 || 0x9C7B62AB
 
|}
 
|}
  
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.
+
<source lang="C">
 +
// name max length is 31 characters
 +
int SceSysmemForKernel_9C7B62AB(const char *name, SceUInt32 flag);
 +
</source>
  
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
+
=== SceSysmemForKernel_153A08A0 ===
 
 
<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.60 || 0x153A08A0
 
|}
 
|}
  
Temp name was sceKernelAllocMemBlockExtForDriver.
+
Calls sceKernelCpuAtomicAddAndGet32ForDriver to increment by 1 value at addr + 0x94.
  
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *info);</source>
+
<source lang="C">int SceSysmemForKernel_153A08A0(void *addr);</source>
  
=== sceKernelAllocMemBlockForDriver ===
+
=== SceSysmemForKernel_942D15FC ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || 0x59F3159C
+
| 3.60 || 0x942D15FC
|-
 
| 1.69-3.60 || 0xC94850C9
 
 
|}
 
|}
  
<source lang="c">
+
Used to get GUID by name.
SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);
 
</source>
 
 
 
The interface is the same as the userland version of this function, however more types can be specified and more options are in the pOpt argument.
 
 
 
To allocate a kernel RW block of memory, specify <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">int SceSysmemForKernel_942D15FC(const char *name, SceSize namelen, int unk_guid_global_value);</source>
  
=== sceKernelCreateClassForDriver ===
+
=== SceSysmemForKernel_C8672A3D ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x61317102
+
| 3.60 || 0xC8672A3D
 
|}
 
|}
  
<source lang="c">int sceKernelCreateClassForDriver(SceClass *cls, const char *name, struct SceClass *uid_class, size_t item_size, SceClassCallback create, SceClassCallback destroy);</source>
+
<source lang="C">int SceSysmemForKernel_C8672A3D(int unk);</source>
 +
 
 +
== SceSysmemForDriver ==
  
=== sceKernelCreateHeapForDriver ===
+
=== sceUIDGetDefaultClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x9328E0E8
+
| 0.931-0.990 || 0xFE28F5EB
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">
+
<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source>
typedef struct SceKernelHeapCreateOpt { // size is 0x14 on FW 0.990, 0x28 on FW 3.60
 
  SceSize size;
 
  SceUInt32 uselock; // ex: 0x100
 
  SceUInt32 field_8; // ex: 0x8000
 
  SceUInt32 field_C;
 
  SceUInt32 block_type;
 
  SceUInt32 field_14;
 
  SceUInt32 field_18;
 
} SceKernelHeapCreateOpt;
 
 
 
// pOpt can be NULL
 
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);
 
</source>
 
 
 
The heap pool is thread safe.
 
  
=== sceKernelCreateUidObjForDriver ===
+
=== sceUIDtoClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x56A13E90
+
| 0.990 || 0x65B9B393
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">SceUID sceKernelCreateUidObjForDriver(SceClass *cls, const char *name, SceKernelObject **obj);</source>
+
Calls sceGUIDtoClassForKernel.
 +
 
 +
<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source>
  
=== sceKernelCreateUidObjForUidForDriver ===
+
=== scePUIDGetClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x89A44858
+
| 0.990-3.60 || 0xE9728A12
 
|}
 
|}
  
Calls sceUIDtoObjectForKernel.
+
Temp name was sceKernelGetClassForPidForUidForDriver.
  
<source lang="c">SceUID sceKernelCreateUidObjForUidForDriver(SceClass *cls, const char *name, SceUID uid, SceKernelObject **obj);</source>
+
<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID uid, SceClass **ppClass);</source>
  
=== scePUIDOpenByGUIDWithFlagsForDriver ===
+
=== sceGUIDGetClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCED1547B
+
| 0.990-3.60 || 0xC74B0152
 
|}
 
|}
  
Temp name was sceKernelCreateUserUidForClassForDriver.
+
Temp name was sceKernelGetClassForUidForDriver.
  
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID uid, uint32_t flags);</source>
+
<source lang="c">int sceGUIDGetClassForDriver(SceUID uid, SceClass **ppClass);</source>
  
=== sceKernelCreateUserUidForDriver ===
+
=== sceUIDClassInitForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBF209859
+
| 0.931-0.990 || 0xE6D75E99
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">SceUID sceKernelCreateUserUidForDriver(SceUID pid, SceUID uid);</source>
+
<source lang="C">int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);</source>
  
=== sceKernelCreateUserUidForNameForDriver ===
+
=== add_heap ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x513B9DDD
+
| 0.990 || 0xB800123C
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">SceUID sceKernelCreateUserUidForNameForDriver(SceUID pid, char *name);</source>
+
<source lang="C">int add_heap(SceUID uid, const char *name, SceClass *class);</source>
  
=== sceKernelCreateUserUidForNameWithClassForDriver ===
+
=== sceKernelIsSubclassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8DA0BCA5
+
| 0.990 || 0x6484D03E
|}
+
|-
 +
| 3.60 || not present
 +
|}
  
<source lang="c">SceUID sceKernelCreateUserUidForNameWithClassForDriver(SceUID pid, char *name, SceClass *cls);</source>
+
<source lang="C">SceBool sceKernelIsSubclassForDriver(SceClass *parentClass, SceClass *class);</source>
  
=== sceKernelDeleteHeapForDriver ===
+
=== sceGUIDNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0xD6437637
+
| 0.990 || 0xB2BB6216
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source>
+
<source lang="C">char *sceGUIDNameForDriver(SceUID id);</source>
  
=== sceKernelGUIDCloseForDriver ===
+
=== sceKernelGetMemBlockAllocSizeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x047D32F2
+
| 0.990 || 0x63E5754B
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelDeleteUidForDriver.
+
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID id, SceSize *size);</source>
  
<source lang="C">int sceKernelGUIDCloseForDriver(SceUID uid);</source>
+
=== sceUIDGetClassInfoAllForDriver ===
 
 
=== sceKernelPUIDCloseForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x84A4AF5E
+
| 0.990 || 0x3EF32C6C
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelDeleteUserUidForDriver.
+
<source lang="C">int sceUIDGetClassInfoAllForDriver(SceClassInfo_0990 *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);</source>
 
 
<source lang="c">int sceKernelPUIDCloseForDriver(SceUID pid, SceUID uid);</source>
 
  
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===
+
=== sceUIDCloseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF3BBE2E1
+
| 0.990 || 0x32C5F628
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.
+
if (a2 & 0x40000000) == 0 calls sceGUIDCloseForDriver else scePUIDCloseForDriver.
  
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source>
+
<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source>
  
=== sceKernelFindMemBlockByAddrForDriver ===
+
=== SceSysmemForDriver_F09A7D09 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x8A1742F6
+
| 0.990 || 0xF09A7D09
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source>
+
Calls sceGUIDCloseForDriver.
 +
 
 +
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source>
  
=== sceKernelFindProcMemBlockByAddrForDriver ===
+
=== Switch TTB For PID ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x857F1D5A
+
| 1.69 || 0x6F2ACDAE
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockByAddrForPidForDriver.
+
Changes the TTBR to point to the tables for a given PID.
  
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source>
+
<source lang="c">int switch_ttb_for_pid(SceUID pid);</source>
  
=== sceKernelFindMemBlockForDriver ===
+
=== sceKernelAllocHeapMemoryForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.57 || not present, added on 3.60
+
| 0.931-3.60 || 0x7B4CB60A
|-
 
| 3.60 || 0x9C78064C
 
 
|}
 
|}
  
<source lang="c">SceUID sceKernelFindMemBlockForDriver(int flags, void *addr, SceSize size);</source>
+
Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.
 +
 
 +
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.
  
=== sceKernelFindMemBlockProcForDriver ===
+
<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source>
 +
 
 +
=== sceKernelAllocHeapMemoryFromGlobalHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x9F6E45E3
+
| 3.60 || 0x7750CEA7
 
|}
 
|}
  
Temp name was sceKernelFindMemBlockForPidForDriver.
+
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uid = -1 (global heap <code>uid</code>).
  
<source lang="c">SceUID sceKernelFindMemBlockProcForDriver(SceUID pid, int flags, void *addr, SceSize size);</source>
+
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapForDriver(SceSize size);</source>
  
=== sceKernelFirstDifferentBlock32UserForDriver ===
+
=== sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBDA6E42B
+
| 0.990-3.60 || 0x0B4ED16A
 
|}
 
|}
  
<source lang="c">int sceKernelFirstDifferentBlock32UserForDriver(unsigned int *ptr, int value, int byte_size);</source>
+
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uid = -1 (global heap <code>uid</code>).
 +
 
 +
<source lang="c">void* sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
  
=== sceKernelFirstDifferentBlock32UserForPidForDriver ===
+
=== sceKernelAllocHeapMemoryWithOptForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x8334454F
+
| 3.60 || 0xB415B5A8
 
|}
 
|}
  
Looks for an integer in userspace.
+
Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.
 +
 
 +
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
  
<source lang="c">int sceKernelFirstDifferentBlock32UserForPidForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);</source>
+
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
  
=== sceKernelFirstDifferentBlock64UserForDriver ===
+
=== sceKernelAllocHeapMemoryWithOptionForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBB3B02C2
+
| 0.990-3.60 || 0x49D4DD9B
 
|}
 
|}
  
<source lang="c">int sceKernelFirstDifferentBlock64UserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source>
+
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.
 +
 
 +
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.
 +
 
 +
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
  
=== sceKernelFirstDifferentBlock64UserForPidForDriver ===
+
=== sceKernelAllocMemBlockWithInfoForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE83855FD
+
| 0.990-3.60 || 0xD44F464D
 
|}
 
|}
  
<source lang="c">int sceKernelFirstDifferentBlock64UserForPidForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source>
+
Temp name was sceKernelAllocMemBlockExtForDriver.
 +
 
 +
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source>
  
=== sceKernelFreeHeapMemoryForDriver ===
+
=== sceKernelAllocMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x3EBCE343
+
| 0.931-3.60 || 0xC94850C9
 
|}
 
|}
  
Temp name was sceKernelMemPoolFreeForDriver.
+
The interface is the same as the userland version of this function, however more types can be specified and more options are in the pOpt argument.
 +
 
 +
To allocate a kernel RW block of memory, specify <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">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source>
+
<source lang="c">SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source>
  
=== sceKernelFreeHeapMemoryFromGlobalHeapForDriver ===
+
=== sceKernelAllocMemBlockForDebuggerForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xFB817A59
+
| 0.940-1.50 || 0x59F3159C
 
|}
 
|}
  
<source lang="c">int sceKernelFreeHeapMemoryFromGlobalHeapForDriver(void *ptr);</source>
+
Same as sceKernelAllocMemBlockForDriver but authorize null pOpt.
 +
 
 +
<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source>
  
=== sceKernelFreeMemBlockForDriver ===
+
=== sceKernelCreateClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x009E1C61
+
| 3.60 || 0x61317102
 
|}
 
|}
  
<source lang="c">int sceKernelFreeMemBlockForDriver(SceUID uid);</source>
+
<source lang="c">int sceKernelCreateClassForDriver(SceClass *cls, const char *name, struct SceClass *uid_class, size_t item_size, SceClassCallback create, SceClassCallback destroy);</source>
  
=== sceKernelPUIDGetClassForDriver ===
+
=== sceKernelCreateHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xE9728A12
+
| 0.931-3.60 || 0x9328E0E8
 
|}
 
|}
  
Temp name was sceKernelGetClassForPidForUidForDriver.
+
The heap pool is thread safe.
 +
 
 +
<source lang="c">
 +
typedef struct SceKernelHeapCreateOpt { // size is 0x14 on FW 0.931-0.990, 0x28 on FW 3.60
 +
  SceSize size;
 +
  SceUInt32 uselock; // ex: 1, 0x100
 +
  SceUInt32 field_8; // ex: 0x8000
 +
  SceUInt32 field_C;
 +
  SceUInt32 block_type;
 +
  SceUInt32 field_14;
 +
  SceUInt32 field_18;
 +
  SceUInt32 field_1C;
 +
  SceUInt32 field_20;
 +
  SceUInt32 field_24;
 +
} SceKernelHeapCreateOpt;
  
<source lang="c">int sceKernelPUIDGetClassForDriver(SceUID pid, SceUID uid, SceClass **cls);</source>
+
// pOpt can be NULL
 +
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);
 +
</source>
  
=== sceKernelGUIDGetClassForDriver ===
+
=== sceUIDKernelCreateForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC74B0152
+
| 0.990 || 0x7FC849B1
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelGetClassForUidForDriver.
+
Calls sceGUIDKernelCreateForKernel.
 +
 
 +
Create a UID with default attribute (0x30000).
  
<source lang="c">int sceKernelGUIDGetClassForDriver(SceUID uid, SceClass **cls);</source>
+
<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
  
=== sceKernelGetMemBlockPARangeForDriver ===
+
=== sceUIDKernelCreate2ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x98C15666
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x56A13E90
 
|}
 
|}
  
Previous name was sceKernelGetMemBlockAddrPairForUidForDriver
+
Temp name was sceKernelCreateUidObj2ForDriver.
  
Returns the paddr and size (pRange) of the memory block if it is physically continuous.
+
Create a UID with default attribute (0x30000).
  
<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source>
+
<source lang="c">SceUID sceUIDKernelCreate2ForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source>
  
=== sceKernelGetMemBlockBaseForDriver ===
+
=== sceGUIDCreateForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA841EDDA
+
| 0.990-3.60 || 0x89A44858
 
|}
 
|}
  
<source lang="C">
+
Temp name was sceKernelCreateUidObjForUidForDriver.
/**
+
 
* @brief Get mapped base address of memory block.
+
Create a GUID with default attribute (0x30000) for the specified UID.
*
+
 
* Get base address of memory block.
+
<source lang="c">SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID uid, SceKernelObject **ppEntry);</source>
* @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 ===
+
=== scePUIDOpenByGUIDForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB81CF0A3
+
| 0.931-3.60 || 0xBF209859
 
|}
 
|}
  
Wrongly named sceKernelGetMemBlockKernelPageForDriver.
+
Temp name was sceKernelCreateUserUidForDriver.
  
<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source>
+
<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID uid);</source>
  
=== sceKernelGetMemBlockMappedBaseForDriver ===
+
=== scePUIDOpenByGUIDWithFlagsForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0B1FD5C3
+
| 0.990-3.60 || 0xCED1547B
 
|}
 
|}
  
<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source>
+
Temp name was sceKernelCreateUserUidForClassForDriver.
 +
 
 +
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source>
  
=== sceKernelGetMemBlockPAVectorForDriver ===
+
=== scePUIDOpenByNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x19A51AC7
+
| 0.931-3.60 || 0x513B9DDD
 
|}
 
|}
  
Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.
+
Temp name was sceKernelCreateUserUidForNameForDriver.
  
<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pVector);</source>
+
<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source>
  
=== sceKernelPUIDGetEntryHeapNameForDriver ===
+
=== scePUIDOpenByNameWithClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x09896EB7
+
| 0.931-3.60 || 0x8DA0BCA5
 
|}
 
|}
  
Temp name was sceKernelGetNameForPidByUidForDriver. Real name might be sceKernelPUIDGetEntryHeapNameForDriver.
+
<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(SceUID pid, const char *name, SceClass *cls);</source>
  
<source lang="c">int sceKernelPUIDGetEntryHeapNameForDriver(SceUID pid, SceUID uid, char **name);</source>
+
=== sceKernelDeleteHeapForDriver ===
 
 
=== sceKernelGetNameForUid2ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE655852F
+
| 0.940-3.60 || 0xD6437637
 
|}
 
|}
  
<source lang="c">const char* sceKernelGetNameForUid2ForDriver(SceUID uid);</source>
+
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source>
  
=== sceKernelGetNameForUidForDriver ===
+
=== sceGUIDCloseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA78755EB
+
| 0.990-3.60 || 0x047D32F2
 
|}
 
|}
  
<source lang="c">int sceKernelGetNameForUidForDriver(SceUID uid, char **name);</source>
+
Temp name was sceKernelDeleteUidForDriver.
 +
 
 +
<source lang="C">int sceGUIDCloseForDriver(SceUID uid);</source>
  
=== sceUIDtoObjectForDriver ===
+
=== scePUIDCloseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xAB7AC3D1
+
| 0.990-3.60 || 0x84A4AF5E
 
|}
 
|}
  
Calls sceUIDtoObjectForKernel.
+
Temp name was sceKernelDeleteUserUidForDriver.
  
<source lang="C">SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);</source>
+
<source lang="c">int scePUIDCloseForDriver(SceUInt32 flag_or_addr_or_pid, SceUID uid);</source>
  
=== sceKernelGetObjectForPidForUidForDriver ===
+
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xFE6D7FAE
+
| 0.990-3.60 || 0xF3BBE2E1
 
|}
 
|}
  
<source lang="c">int sceKernelGetObjectForPidForUidForDriver(SceUID pid, SceUID uid, SceKernelObject **obj);</source>
+
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.
 +
 
 +
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source>
  
=== sceKernelGetObjectForUidForAttrForDriver ===
+
=== sceKernelFindMemBlockByAddrForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF6DB54BA
+
| 0.990-3.60 || 0x8A1742F6
 
|}
 
|}
  
<source lang="c">int sceKernelGetObjectForUidForAttrForDriver(SceUID uid, unsigned int attr, SceKernelObject **obj);</source>
+
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source>
  
=== sceGUIDReferObjectWithClassLevelForDriver ===
+
=== sceKernelFindProcMemBlockByAddrForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x77066FD1
+
| 0.990-3.60 || 0x857F1D5A
 
|}
 
|}
  
Temp name was sceKernelGetObjectForUidForClassForAttrForDriver.
+
Temp name was sceKernelFindMemBlockByAddrForPidForDriver.
  
<source lang="c">int sceGUIDReferObjectWithClassLevelForDriver(SceUID uid, SceClass *pClass, uint32_t attr, SceKernelObject **pEntry);</source>
+
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source>
  
=== sceKernelGetObjectForUidForClassForDriver ===
+
=== sceKernelFindMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x00ED6C14
+
| 3.57 || not present, added on 3.60
 +
|-
 +
| 3.60 || 0x9C78064C
 
|}
 
|}
  
Temp name was sceKernelGetObjForUidForDriver.
+
<source lang="c">SceUID sceKernelFindMemBlockForDriver(int flags, void *addr, SceSize size);</source>
  
<source lang="c">int sceKernelGetObjectForUidForClassForDriver(SceUID uid, SceClass *cls, SceKernelObject **obj);</source>
+
=== sceKernelFindMemBlockProcForDriver ===
 
 
=== sceKernelGUIDReferObjectClassForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x72A98D17
+
| 3.60 || 0x9F6E45E3
 
|}
 
|}
  
Temp name was sceKernelGetObjectForUidForClassTreeForDriver. Actual name might be sceKernelGUIDReferObjectClassForDriver.
+
Temp name was sceKernelFindMemBlockForPidForDriver.
  
<source lang="c">int sceKernelGUIDReferObjectClassForDriver(SceUID uid, SceClass *cls, SceKernelObject **obj);</source>
+
<source lang="c">SceUID sceKernelFindMemBlockProcForDriver(SceUID pid, int flags, void *addr, SceSize size);</source>
  
=== sceKernelGUIDGetObjectForDriver ===
+
=== sceKernelFirstDifferentBlock32UserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0FC24464
+
| 3.60 || 0xBDA6E42B
 
|}
 
|}
  
Temp name was sceKernelGetObjectForUidForDefaultClassForDriver.
+
<source lang="c">int sceKernelFirstDifferentBlock32UserForDriver(unsigned int *ptr, int value, int byte_size);</source>
  
<source lang="c">int sceKernelGUIDGetObjectForDriver(SceUID uid, SceKernelObject **pEntry);</source>
+
=== sceKernelFirstDifferentBlock32UserForPidForDriver ===
 
 
=== sceKernelGetObjectForUidForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0F5C84B7
+
| 1.69-3.60 || 0x8334454F
 
|}
 
|}
  
<source lang="c">int sceKernelGetObjectForUidForDriver(SceUID uid, SceKernelObject **obj);</source>
+
Looks for an integer in userspace.
  
=== sceKernelVAtoPAForDriver ===
+
<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
 
|-
 
|-
| 0.990-3.60 || 0x8D160E65
+
| 3.60 || 0xBB3B02C2
 
|}
 
|}
  
Temp name was sceKernelGetPaddrForDriver.
+
<source lang="c">int sceKernelFirstDifferentBlock64UserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source>
  
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.
+
=== sceKernelFirstDifferentBlock64UserForPidForDriver ===
 
 
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 || 0xE83855FD
 
|}
 
|}
  
<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source>
+
<source lang="c">int sceKernelFirstDifferentBlock64UserForPidForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source>
  
=== sceKernelProcModeVAtoPAForDriver ===
+
=== sceKernelFreeHeapMemoryForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x61A67D32
+
| 0.990-3.60 || 0x3EBCE343
 
|}
 
|}
  
Temp name was sceKernelGetPaddrForPidForDriver.
+
Temp name was sceKernelMemPoolFreeForDriver.
  
<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, uint32_t mode, void *pVA, void **pPA);</source>
+
<source lang="c">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source>
  
=== sceKernelVARangeToPAVectorForDriver ===
+
=== sceKernelFreeHeapMemoryFromGlobalHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xE68BEEBD
+
| 3.60 || 0xFB817A59
 
|}
 
|}
  
Temp name was sceKernelGetPaddrListForDriver.
+
<source lang="c">int sceKernelFreeHeapMemoryFromGlobalHeapForDriver(void *ptr);</source>
  
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.
+
=== sceKernelFreeMemBlockForDriver ===
 
 
<source lang="c">int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
 
 
 
=== sceKernelGetPaddrListForLargePageForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x08A8A7E8
+
| 3.60 || 0x009E1C61
 
|}
 
|}
  
<source lang="c">int sceKernelGetPaddrListForLargePageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
+
<source lang="c">int sceKernelFreeMemBlockForDriver(SceUID uid);</source>
  
=== sceKernelGetPaddrListForSmallPageForDriver ===
+
=== sceKernelGetMemBlockPARangeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x16844CE6
+
| 0.990-3.60 || 0x98C15666
 
|}
 
|}
  
<source lang="c">int sceKernelGetPaddrListForSmallPageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
+
Previous name was sceKernelGetMemBlockAddrPairForUidForDriver
 +
 
 +
Returns the paddr and size (pRange) of the memory block if it is physically continuous.
 +
 
 +
<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source>
  
=== sceKernelVARangeToPARangeForDriver ===
+
=== sceKernelGetMemBlockBaseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0xAE36C775
+
| 0.990-3.60 || 0xA841EDDA
 
|}
 
|}
  
Temp name was sceKernelGetPaddrPairForDriver.
+
<source lang="C">
 
+
/**
<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
+
* @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>
  
=== sceKernelGetPaddrPairForLargePageForDriver ===
+
=== sceKernelGetMemBlockVBaseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x32257A24
+
| 3.60 || 0xB81CF0A3
 
|}
 
|}
  
<source lang="c">int sceKernelGetPaddrPairForLargePageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);</source>
+
Wrongly named sceKernelGetMemBlockKernelPageForDriver.
 +
 
 +
<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source>
  
=== sceKernelGetPaddrPairForSmallPageForDriver ===
+
=== sceKernelGetMemBlockMappedBaseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB3575090
+
| 3.60 || 0x0B1FD5C3
 
|}
 
|}
  
<source lang="c">int sceKernelGetPaddrPairForSmallPageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);</source>
+
<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source>
  
=== sceKernelVAtoPABySWForDriver ===
+
=== sceKernelGetMemBlockPAVectorForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x65419BD3
+
| 0.990-3.60 || 0x19A51AC7
 
|}
 
|}
  
Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver. Wrong name was sceKernelAddressSpaceVAtoPABySWForDriver.
+
Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.
  
<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source>
+
<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pVector);</source>
  
=== sceKernelGetPidContextForDriver ===
+
=== scePUIDGetEntryHeapNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2ECF7944
+
| 0.990-3.60 || 0x09896EB7
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelGetNameForPidByUidForDriver. Real name might be scePUIDGetEntryHeapNameForDriver.
struct SceKernelProcessContext
 
{
 
  SceUInt32 TTBR1;
 
  SceUInt32 DACR;
 
  SceUInt32 CONTEXTIDR;
 
};
 
  
int sceKernelGetPidContextForDriver(SceUID pid, SceKernelProcessContext **ctx);
+
<source lang="c">int scePUIDGetEntryHeapNameForDriver(SceUID pid, SceUID uid, char **pName);</source>
</source>
 
  
=== sceKernelGetUidClassForDriver ===
+
=== sceKernelGetNameForUid2ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x85336A1C
+
| 3.60 || 0xE655852F
 
|}
 
|}
  
<source lang="c">SceClass *sceKernelGetUidClassForDriver();</source>
+
<source lang="c">const char* sceKernelGetNameForUid2ForDriver(SceUID uid);</source>
  
=== sceKernelGetUnknownValidPhysAddressSpaceForDriver ===
+
=== sceKernelGetNameForUidForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC9928F5E
+
| 3.60 || 0xA78755EB
 
|}
 
|}
  
<source lang="c">int sceKernelGetUnknownValidPhysAddressSpaceForDriver(void **start, void **end);</source>
+
<source lang="c">int sceKernelGetNameForUidForDriver(SceUID uid, char **pName);</source>
  
=== sceKernelIsPaddrWithinSameSectionForUidForDriver ===
+
=== sceUIDtoObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF4AD89D8
+
| 0.990 || 0xAB7AC3D1
 
|}
 
|}
  
<source lang="c">int sceKernelIsPaddrWithinSameSectionForUidForDriver(SceUID pid, int permission_type, void *vaddr, unsigned int len);</source>
+
Calls sceUIDtoObjectForKernel.
  
=== sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver ===
+
<source lang="C">SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);</source>
 +
 
 +
=== sceGUIDGetObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA7C0D1FC
+
| 0.990-3.60 || 0x0FC24464
 
|}
 
|}
  
<source lang="c">int sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver(void *vaddr);</source>
+
Temp name was sceKernelGUIDGetObjectForDriver.
 +
 
 +
<source lang="c">int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
  
=== sceKernelKernelUidForUserUidForClassForDriver ===
+
=== scePUIDGetObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x184172B1
+
| 0.990-3.60 || 0xFE6D7FAE
 
|}
 
|}
  
<source lang="c">SceUID sceKernelKernelUidForUserUidForClassForDriver(SceUID pid, SceUID user_uid, SceClass *cls);</source>
+
Temp name was sceKernelGetObjectForPidForUidForDriver.
 +
 
 +
<source lang="c">int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);</source>
  
=== scePUIDtoGUIDForDriver ===
+
=== sceGUIDReferObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x45D22597
+
| 3.60 || 0x0F5C84B7
 
|}
 
|}
  
Temp name was sceKernelKernelUidForUserUidForDriver.
+
Temp name was sceKernelGetObjectForUidForDriver.
  
Process UID to Global UID.
+
<source lang="c">int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source>
  
<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID uid);</source>
+
=== sceGUIDReferObjectWithLevelForDriver ===
 
 
=== sceKernelPartitionMapMemBlockForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x58D21746
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0xF6DB54BA
 
|}
 
|}
  
Temp name was sceKernelMapBlockUserVisibleForDriver.
+
Temp name was sceKernelGetObjectForUidForAttrForDriver.
  
<source lang="c">int sceKernelPartitionMapMemBlockForDriver(SceUID uid);</source>
+
<source lang="c">int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);</source>
  
=== sceKernelMapBlockUserVisibleWithFlagForDriver ===
+
=== sceGUIDReferObjectWithClassAttrForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x04059C4B
+
| 0.990-3.60 || 0x77066FD1
 
|}
 
|}
  
<source lang="c">int sceKernelMapBlockUserVisibleWithFlagForDriver(SceUID uid, int some_flag);</source>
+
Temp name was sceKernelGetObjectForUidForClassForAttrForDriver.
 +
 
 +
<source lang="c">int sceGUIDReferObjectWithClassAttrForDriver(SceUID uid, SceClass *pClass, SceUInt32 attr, SceKernelObject **pEntry);</source>
  
=== sceKernelUserMapForDriver ===
+
=== sceGUIDReferObjectWithClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x278BC201
+
| 0.990-3.60 || 0x00ED6C14
 
|}
 
|}
  
Wrongly named sceKernelMapUserBlockDefaultTypeForDriver.
+
Temp name was sceKernelGetObjForUidForDriver.
 
 
Assigns type 0.
 
  
<source lang="C">int sceKernelUserMapForDriver(char *name, int permission, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);</source>
+
<source lang="c">int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
  
=== sceKernelProcUserMapForDriver ===
+
=== sceGUIDReferObjectWithSubclassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0091D74D
+
| 0.990-3.60 || 0x72A98D17
 
|}
 
|}
  
Wrongly named sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly real name.
+
Temp name was sceKernelGetObjectForUidForClassTreeForDriver.
  
Assigns type 0.
+
<source lang="c">int sceGUIDReferObjectWithSubclassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source>
  
<source lang="C">int sceKernelProcUserMapForDriver(SceUID pid, const char *name, int permission, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);</source>
+
=== sceKernelVAtoPAForDriver ===
 
 
=== sceKernelMapUserBlockForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x7D4F8B5F
+
| 0.990-3.60 || 0x8D160E65
 
|}
 
|}
  
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.
+
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>.
  
<source lang="c">
+
Returns <0 on error, values >=0 indicate success.
//this signature is for 1.69
 
int sceKernelMapUserBlockForDriver(int permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
 
  
//this signature is for 3.60 - now allows to give a name
+
<source lang="c">int sceKernelVAtoPAForDriver(void *pVA, void **pPA);</source>
int sceKernelMapUserBlockForDriver(char *name, int permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
 
</source>
 
  
=== sceKernelDecRefCountMemBlockForDriver ===
+
=== sceKernelProcVAtoPAForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF50BDC0C
+
| 0.990 || 0xC51934BD
 
|}
 
|}
  
Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.
+
<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source>
  
<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source>
+
=== sceKernelProcModeVAtoPAForDriver ===
 
 
=== sceKernelMemBlockGetInfoExForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x24A99FFF
+
| 0.990-3.60 || 0x61A67D32
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockGetInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *info);</source>
+
Temp name was sceKernelGetPaddrForPidForDriver.
 +
 
 +
<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, uint32_t mode, void *pVA, void **pPA);</source>
  
=== sceKernelGetMemBlockInfoForDriver ===
+
=== sceKernelVARangeToPAVectorForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA73CFFEF
+
| 0.931-3.60 || 0xE68BEEBD
 
|}
 
|}
  
Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.
+
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 sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source>
+
<source lang="c">int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
  
=== sceKernelMemBlockGetSomeSizeForDriver ===
+
=== sceKernelGetPaddrListForLargePageForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x78337B62
+
| 3.60 || 0x08A8A7E8
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockGetSomeSizeForDriver(SceUID uid, int *some_size);</source>
+
<source lang="c">int sceKernelGetPaddrListForLargePageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
  
=== sceKernelIncRefCountMemBlockForDriver ===
+
=== sceKernelGetPaddrListForSmallPageForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xEAF3849B
+
| 3.60 || 0x16844CE6
 
|}
 
|}
  
Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.
+
<source lang="c">int sceKernelGetPaddrListForSmallPageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);</source>
  
<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source>
+
=== sceKernelVARangeToPARangeForDriver ===
 
 
=== sceKernelUserUnmapForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x00575B00
+
| 0.940-3.60 || 0xAE36C775
 
|}
 
|}
  
Temp name was sceKernelMemBlockReleaseForDriver.
+
Temp name was sceKernelGetPaddrPairForDriver.
  
<source lang="c">int sceKernelUserUnmapForDriver(SceUID uid);</source>
+
<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source>
  
=== sceKernelMemBlockType2MemtypeForDriver ===
+
=== sceKernelGetPaddrPairForLargePageForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x20C811FA
+
| 3.60 || 0x32257A24
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source>
+
<source lang="c">int sceKernelGetPaddrPairForLargePageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);</source>
  
=== sceKernelMemBlockTypeGetPrivilegesForDriver ===
+
=== sceKernelGetPaddrPairForSmallPageForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x6A0792A3
+
| 3.60 || 0xB3575090
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source>
+
<source lang="c">int sceKernelGetPaddrPairForSmallPageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);</source>
  
=== sceKernelMemBlockTypeGetUnknownForDriver ===
+
=== sceKernelVAtoPABySWForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCB0F3A33
+
| 0.990-3.60 || 0x65419BD3
 
|}
 
|}
  
<source lang="c">int sceKernelMemBlockTypeGetUnknownForDriver(SceKernelMemBlockType type);</source>
+
Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver. Wrong name was sceKernelAddressSpaceVAtoPABySWForDriver.
  
=== sceKernelMemRangeReleaseForDriver ===
+
<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source>
 +
 
 +
=== sceKernelGetPidContextForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x75C70DE0
+
| 3.60 || 0x2ECF7944
 
|}
 
|}
  
<source lang="c">int sceKernelMemRangeReleaseForDriver(void *addr, SceSize size);</source>
+
<source lang="c">
 +
struct SceKernelProcessContext
 +
{
 +
  SceUInt32 TTBR1;
 +
  SceUInt32 DACR;
 +
  SceUInt32 CONTEXTIDR;
 +
};
 +
 
 +
int sceKernelGetPidContextForDriver(SceUID pid, SceKernelProcessContext **ctx);
 +
</source>
  
=== sceKernelMemRangeReleaseForPidForDriver ===
+
=== sceKernelGetUidClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA8525B06
+
| 3.60 || 0x85336A1C
 
|}
 
|}
  
<source lang="c">int sceKernelMemRangeReleaseForPidForDriver(SceUID pid, void *addr, SceSize size);</source>
+
<source lang="c">SceClass *sceKernelGetUidClassForDriver();</source>
  
=== sceKernelMemRangeReleaseWithPermForDriver ===
+
=== sceKernelGetUnknownValidPhysAddressSpaceForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x22CBE925
+
| 3.60 || 0xC9928F5E
 
|}
 
|}
  
Decrease references to pages.
+
<source lang="c">int sceKernelGetUnknownValidPhysAddressSpaceForDriver(void **start, void **end);</source>
  
<source lang="c">int sceKernelMemRangeReleaseWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);</source>
+
=== sceKernelIsPaddrWithinSameSectionForUidForDriver ===
 
 
=== sceKernelMemRangeRetainForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x59A4402F
+
| 3.60 || 0xF4AD89D8
 
|}
 
|}
  
<source lang="c">int sceKernelMemRangeRetainForDriver(void *addr, SceSize size);</source>
+
<source lang="c">int sceKernelIsPaddrWithinSameSectionForUidForDriver(SceUID pid, int permission_type, void *vaddr, unsigned int len);</source>
  
=== sceKernelMemRangeRetainForPidForDriver ===
+
=== sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x659586BF
+
| 3.60 || 0xA7C0D1FC
 
|}
 
|}
  
<source lang="c">int sceKernelMemRangeRetainForPidForDriver(SceUID pid, void *addr, SceSize size);</source>
+
<source lang="c">int sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver(void *vaddr);</source>
  
=== sceKernelMemRangeRetainWithPermForDriver ===
+
=== scePUIDtoGUIDWithClassForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBC0A1D60
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x184172B1
 
|}
 
|}
  
Increase references to pages.
+
Temp name was sceKernelKernelUidForUserUidForClassForDriver.
  
<source lang="c">int sceKernelMemRangeRetainWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);</source>
+
<source lang="c">SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID uid, SceClass *pClass);</source>
  
=== sceKernelCopyToUserForDriver ===
+
=== scePUIDtoGUIDForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x6D88EF8A
+
| 0.990-3.60 || 0x45D22597
 
|}
 
|}
  
Temp name was sceKernelMemcpyKernelToUserForDriver.
+
Temp name was sceKernelKernelUidForUserUidForDriver.
 +
 
 +
Process UID to Global UID.
  
<source lang="c">int sceKernelCopyToUserForDriver(void *dst, const void *kern_src, SceSize len);</source>
+
<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID uid);</source>
  
=== sceKernelCopyoutProcForDriver ===
+
=== sceKernelPartitionMapMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x6B825479
+
| 0.990-3.60 || 0x58D21746
 
|}
 
|}
  
Temp name was sceKernelMemcpyKernelToUserForPidForDriver.
+
Temp name was sceKernelMapBlockUserVisibleForDriver.
  
This will not crash on invalid user pointers, but instead return error.
+
<source lang="c">int sceKernelPartitionMapMemBlockForDriver(SceUID uid);</source>
  
<source lang="c">
+
=== sceKernelMapBlockUserVisibleWithFlagForDriver ===
int sceKernelCopyoutProcForDriver(SceUID pid, void *dst, const void *src, SceSize size);
 
</source>
 
 
 
=== sceKernelMemcpyKernelToUserForPidUncheckedForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xFED82F2D
+
| 3.60 || 0x04059C4B
 
|}
 
|}
  
<source lang="c">int sceKernelMemcpyKernelToUserForPidUncheckedForDriver(SceUID pid, void *dst, const void *kern_src, SceSize size);</source>
+
<source lang="c">int sceKernelMapBlockUserVisibleWithFlagForDriver(SceUID uid, int some_flag);</source>
  
=== sceKernelCopyFromUserForDriver ===
+
=== sceKernelUserMapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xBC996A7A
+
| 0.990-3.60 || 0x278BC201
 
|}
 
|}
  
Temp name was sceKernelMemcpyUserToKernelForDriver.
+
Wrongly named sceKernelMapUserBlockDefaultTypeForDriver.
 +
 
 +
Assigns type 0.
  
<source lang="c">int sceKernelCopyFromUserForDriver(void *dst, const void *src, SceSize size);</source>
+
<source lang="C">int sceKernelUserMapForDriver(char *name, int permission, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);</source>
  
=== sceKernelProcCopyFromUserForDriver ===
+
=== sceKernelProcUserMapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x605275F8
+
| 3.60 || 0x0091D74D
 
|}
 
|}
  
Temp name was sceKernelMemcpyUserToKernelForPidForDriver.
+
Wrongly named sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly real name.
 +
 
 +
Assigns type 0.
  
<source lang="c">int sceKernelProcCopyFromUserForDriver(SceUID pid, void *dst, void *src, SceSize size);</source>
+
<source lang="C">int sceKernelProcUserMapForDriver(SceUID pid, const char *name, int permission, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);</source>
  
=== sceKernelMemcpyUserToUserForDriver ===
+
=== sceKernelMapUserBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1BD44DD5
+
| 0.990 || not present
 +
|-
 +
| 1.50-3.60 || 0x7D4F8B5F
 
|}
 
|}
  
<source lang="c">int sceKernelMemcpyUserToUserForDriver(void *dst, const void *src, SceSize size);</source>
+
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">
 +
// this signature is for FW 1.50-1.69
 +
int sceKernelMapUserBlockForDriver(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 sceKernelMapUserBlockForDriver(char *name, int permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);
 +
</source>
  
=== sceKernelMemcpyUserToUserForPidForDriver ===
+
=== sceKernelDecRefCountMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x8E086C33
+
| 0.990-3.60 || 0xF50BDC0C
 
|}
 
|}
  
<source lang="c">int sceKernelMemcpyUserToUserForPidForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
+
Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.
 +
 
 +
<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source>
  
=== sceUIDOpenByNameForDriver ===
+
=== sceKernelMemBlockGetInfoExForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x796881D6
+
| 3.60 || 0x24A99FFF
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="c">SceUID sceUIDOpenByNameForDriver(char *name);</source>
+
<source lang="c">int sceKernelMemBlockGetInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *info);</source>
  
=== sceKernelOpenUidForNameForDriver ===
+
=== sceKernelGetMemBlockInfoForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xD76E7452
+
| 0.990-3.60 || 0xA73CFFEF
 
|}
 
|}
  
Name to be checked.
+
Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.
  
<source lang="c">SceUID sceKernelOpenUidForNameForDriver(char *name);</source>
+
<source lang="c">int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source>
  
=== sceKernelRemapBlockForDriver ===
+
=== sceKernelMemBlockGetSomeSizeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.05 || 0x8D332AE1
+
| 3.60 || 0x78337B62
|-
 
| 1.69-3.60 || 0xDFE2C8CB
 
 
|}
 
|}
  
<source lang="c">int sceKernelRemapBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
+
<source lang="c">int sceKernelMemBlockGetSomeSizeForDriver(SceUID uid, int *some_size);</source>
  
This is used to remap RW memory as RX. To do this, first allocate a memory block of type <code>0x1020D006</code>. After you are done writing, call this with <code>type</code> set to <code>0x1020D005</code>.
+
=== sceKernelIncRefCountMemBlockForDriver ===
 
 
=== sceKernelPUIDSetNameForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x12624884
+
| 0.990-3.60 || 0xEAF3849B
 
|}
 
|}
  
Temp name was sceKernelSetNameForPidForUidForDriver.
+
Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.
  
<source lang="c">int sceKernelPUIDSetNameForDriver(SceUID pid, SceUID uid, const char *name);</source>
+
<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source>
  
=== sceKernelSetObjectForUidForDriver ===
+
=== sceKernelUserUnmapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4CFA4100
+
| 0.990-3.60 || 0x00575B00
 
|}
 
|}
  
<source lang="c">int sceKernelSetObjectForUidForDriver(SceUID uid, char *name);</source>
+
Temp name was sceKernelMemBlockReleaseForDriver.
 +
 
 +
<source lang="c">int sceKernelUserUnmapForDriver(SceUID uid);</source>
  
=== sceKernelStrnlenUserForDriver ===
+
=== sceKernelMemBlockType2MemtypeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xB429D419
+
| 0.931-3.60 || 0x20C811FA
 
|}
 
|}
  
<source lang="c">int sceKernelStrnlenUserForDriver(uintptr_t usr_addr, SceSize maxlen);</source>
+
<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source>
  
=== sceKernelStrnlenUserForPidForDriver ===
+
=== sceKernelMemBlockTypeGetPrivilegesForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x9929EB07
+
| 3.60 || 0x6A0792A3
 
|}
 
|}
  
<source lang="c">int sceKernelStrnlenUserForPidForDriver(SceUID pid, uintptr_t usr_addr, SceSize size);</source>
+
<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source>
  
=== sceKernelStrncpyKernelToUserForDriver ===
+
=== sceKernelMemBlockTypeGetUnknownForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x80BD6FEB
+
| 0.990-3.60 || 0xCB0F3A33
 
|}
 
|}
  
<source lang="c">int sceKernelStrncpyKernelToUserForDriver(char* usr_dst, const void *kern_src, SceSize maxlen);</source>
+
<source lang="c">int sceKernelMemBlockTypeGetUnknownForDriver(SceKernelMemBlockType type);</source>
  
=== sceKernelStrncpyKernelToUserForPidForDriver ===
+
=== sceKernelMemRangeReleaseForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x75AAF178
+
| 3.60 || 0x75C70DE0
 
|}
 
|}
  
<source lang="c">int sceKernelStrncpyKernelToUserForPidForDriver(SceUID pid, char *usr_dst, const char *kern_src, SceSize size);</source>
+
<source lang="c">int sceKernelMemRangeReleaseForDriver(void *addr, SceSize size);</source>
  
=== sceKernelStrncpyUserToKernelForDriver ===
+
=== sceKernelMemRangeReleaseForPidForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xDB3EC244
+
| 3.60 || 0xA8525B06
 
|}
 
|}
  
<source lang="c">int sceKernelStrncpyUserToKernelForDriver(void *kern_dst, uintptr_t usr_src, SceSize maxlen);</source>
+
<source lang="c">int sceKernelMemRangeReleaseForPidForDriver(SceUID pid, void *addr, SceSize size);</source>
  
=== sceKernelSwitchPidContextForDriver ===
+
=== sceKernelMemRangeReleaseWithPermForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2D711589
+
| 3.60 || 0x22CBE925
 
|}
 
|}
  
<source lang="c">int sceKernelSwitchPidContextForDriver(SceKernelProcessContext *new_context, SceKernelProcessContext *prev_context);</source>
+
Decrease references to pages.
 +
 
 +
<source lang="c">int sceKernelMemRangeReleaseWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);</source>
  
=== sceKernelUidReleaseForDriver ===
+
=== sceKernelMemRangeRetainForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x149885C4
+
| 3.60 || 0x59A4402F
 
|}
 
|}
  
<source lang="c">int sceKernelUidReleaseForDriver(SceUID uid);</source>
+
<source lang="c">int sceKernelMemRangeRetainForDriver(void *addr, SceSize size);</source>
  
=== sceKernelUnmapMemBlockForDriver ===
+
=== sceKernelMemRangeRetainForPidForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xFFCD9B60
+
| 3.60 || 0x659586BF
 
|}
 
|}
  
<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</source>
+
<source lang="c">int sceKernelMemRangeRetainForPidForDriver(SceUID pid, void *addr, SceSize size);</source>
  
=== sceKernelGetPhysicalMemoryTypeForDriver ===
+
=== sceKernelMemRangeRetainWithPermForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0AAA4FDD
+
| 3.60 || 0xBC0A1D60
 
|}
 
|}
  
Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver
+
Increase references to pages.
  
<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source>
+
<source lang="c">int sceKernelMemRangeRetainWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);</source>
  
=== some_memblock_operation ===
+
=== sceKernelRoMemcpyKernelToUserForPidForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x13805CA8
+
| 0.990-1.69 || 0x571D2739
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelRoMemcpyKernelToUserForPidForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
  
=== some_memblock_operation ===
+
=== sceKernelCopyToUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x16713BE8
+
| 0.990-3.60 || 0x6D88EF8A
 
|}
 
|}
  
Same as above but with different flags.
+
Temp name was sceKernelMemcpyKernelToUserForDriver.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelCopyToUserForDriver(void *dst, const void *src, SceSize size);</source>
  
=== some_memblock_operation ===
+
=== sceKernelProcCopyToUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x16713BE8
+
| 0.990-3.60 || 0x6B825479
 
|}
 
|}
  
Same as above but with different flags.
+
Temp name was sceKernelMemcpyKernelToUserForPidForDriver. Possible name is sceKernelCopyoutProcForDriver.
 +
 
 +
This will not crash on invalid user pointers, but instead return error.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelProcCopyToUserForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
  
=== some_memblock_operation ===
+
=== sceKernelReadUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4C584B29
+
| 0.990 || 0xE08F3967
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Same as above but with different flags.
+
<source lang="C">int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);</source>
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
=== sceKernelCopyFromUserForDriver ===
 
 
=== some_memblock_operation ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x6C76AD89
+
| 0.931-3.60 || 0xBC996A7A
 
|}
 
|}
  
Same as above but with different flags.
+
Temp name was sceKernelMemcpyUserToKernelForDriver.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelCopyFromUserForDriver(void *dst, const void *src, SceSize size);</source>
  
=== some_memblock_operation ===
+
=== sceKernelProcCopyFromUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8C43B052
+
| 0.990-3.60 || 0x605275F8
 
|}
 
|}
  
Same as above but with different flags.
+
Temp name was sceKernelMemcpyUserToKernelForPidForDriver.
  
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
+
<source lang="c">int sceKernelProcCopyFromUserForDriver(SceUID pid, void *dst, void *src, SceSize size);</source>
  
=== sceKernelGetMemBlockProcessForDriver ===
+
=== sceKernelUserCopyForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x1EFC96EA
+
| 0.990 || not present
 +
|-
 +
| 1.50-3.60 || 0x1BD44DD5
 
|}
 
|}
  
<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source>
+
Temp name was sceKernelMemcpyUserToUserForDriver.
 +
 
 +
<source lang="C">int sceKernelUserCopyForDriver(void *dst, const void *src, SceSize size);</source>
  
=== memblock_related_operation ===
+
=== sceKernelProcUserCopyForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x64DBE472
+
| 0.990 || not present
 +
|-
 +
| 1.50-3.60 || 0x8E086C33
 
|}
 
|}
  
<source lang="c">int memblock_related_operation(SceUID uid, int a2);</source>
+
Temp name was sceKernelMemcpyUserToUserForPidForDriver.
 +
 
 +
<source lang="c">int sceKernelProcUserCopyForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source>
  
=== memblock_related_operation ===
+
=== sceKernelUserStrnlenForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x987EE587
+
| 0.940-0.990 || 0xFF06898A
 +
|-
 +
| 1.50-3.60 || not present
 
|}
 
|}
  
<source lang="c">
+
<source lang="C">SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);</source>
struct result_987ee587
 
{
 
  int unk0;
 
  int unk4;
 
  int unk8;
 
  int unkC;
 
  int unk10;
 
};
 
  
int memblock_related_operation(SceUID uid, result_987ee587 *result);
+
=== sceKernelStrnlenUserForDriver ===
</source>
 
 
 
=== SceSysmemForDriver_856fa2e3 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x856FA2E3
+
| 0.990 || not present
 +
|-
 +
| 1.50-3.60 || 0xB429D419
 
|}
 
|}
  
<source lang="c">int SceSysmemForDriver_856fa2e3(SceUID uid);</source>
+
<source lang="c">SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);</source>
  
=== sceKernelGetPhyMemInfoForDriver ===
+
=== sceKernelProcStrnlenUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x89475192
+
| 0.990 || not present
 +
|-
 +
| 1.50-3.60 || 0x9929EB07
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);</source>
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60
 
  SceSize size; // Size of this structure
 
  uint32_t unk4;
 
  uint32_t unk8;
 
} SceKernelPhyMemInfo;
 
  
// as of FW 0.931-0.990, pindex must be one of these values: 1 PhyPartKernel, 8 PageVenezia, 9 PageVIP
+
=== sceKernelProcUserStrcpyForDriver ===
#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
 
 
 
int sceKernelGetPhyMemInfoForDriver(uint32_t pindex, SceKernelPhyMemInfo *pInfo);
 
</source>
 
 
 
=== sceKernelVerifyHeapForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC50A9C0D
+
| 0.990-1.50 || 0xEBCB3970
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, int a2);</source>
+
<source lang="C">int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);</source>
 
 
== SceSysmemForDebugger ==
 
  
This library was removed somewhere between 1.692 and 3.60.
+
=== sceKernelStrncpyFromUserSpecialForDriver ===
 
 
=== sceKernelPhysicalAddressSpaceStartForDebugger ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x6AE2188F
+
| 0.990-1.50 || 0x7440BCDA
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelPhysicalAddressSpaceStartForDebugger(void);</source>
+
<source lang="C">int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>
  
=== sceKernelGetPhysicalAddressSpaceForDebugger ===
+
=== sceKernelStrncpyToUserSpecialForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xE8905626
+
| 0.990-1.50 || 0x369355F1
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
In FW 0.931 calls sceKernelPhysicalAddressSpaceStartForDebugger.
+
<source lang="C">int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source>
  
<source lang="C">void *sceKernelGetPhysicalAddressSpaceForDebugger(void);</source>
+
=== sceKernelUserStrncpyForDriver ===
 
 
=== sceKernelIsAccessibleRangeProcForDebugger ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || 0x01DFC193
+
| 0.940-0.990 || 0xE6D5EFE4
 
|-
 
|-
| 3.60 || not present
+
| 1.50-3.60 || not present
 
|}
 
|}
  
In 1.50 call sceKernelFindMemBlockForPidForDriver.
+
Return 0 on success.
  
<source lang="C">int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, uint32_t mode, const void *vaddr, SceSize size);</source>
+
<source lang="C">int sceKernelUserStrncpyForDriver(char *dst, const char *src, SceSize maxlen);</source>
  
=== sceKernelIsAccessibleRangeForDebugger ===
+
=== sceKernelStrncpyFromUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || 0xD027761F
+
| 0.990 || not present
 
|-
 
|-
| 3.60 || not present
+
| 1.50-3.60 || 0xDB3EC244
 
|}
 
|}
  
In 1.50 call sceKernelFindMemBlockForDriver.
+
<source lang="c">int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);</source>
 
 
<source lang="C">int sceKernelIsAccessibleRangeForDebugger(uint32_t mode, const void *vaddr, SceSize size);</source>
 
 
 
== SceSysmem ==
 
  
The SceSysmem library is responsible for both low-level and high-level memory management. There are functions for allocating raw blocks of memory (similar to Linux <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.
+
=== sceKernelProcStrncpyFromUserForDriver ===
 
 
=== sceKernelMapMemBlock ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.69 || 0x7B763A21
+
| 0.990 || not present
 
|-
 
|-
| 3.60 || not present
+
| 1.50-3.60 || 0x75AAF178
 
|}
 
|}
  
=== sceKernelRemapMemBlock ===
+
<source lang="c">int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source>
 +
 
 +
=== sceKernelStrncpyToUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.69 || 0x3B29E0F5
+
| 0.990 || not present
 
|-
 
|-
| 3.60 || not present
+
| 1.50-3.60 || 0x80BD6FEB
 
|}
 
|}
  
=== sceKernelPartialMapMemBlock ===
+
<source lang="c">int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);</source>
 +
 
 +
=== sceKernelProcStrncpyToUserForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 4,029: Line 4,239:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 1.69 || 0xC0A59868
+
| 1.50-3.60 || 0xFED82F2D
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceKernelUnmapMemBlock ===
+
Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.
 +
 
 +
<source lang="c">int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source>
 +
 
 +
=== sceUIDOpenByNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.69 || 0xEE30D976
+
| 0.931-0.990 || 0x796881D6
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source>
+
Calls sceGUIDOpenByNameForDriver.
 +
 
 +
<source lang="c">SceUID sceUIDOpenByNameForDriver(const char *name);</source>
  
=== sceKernelPartialUnmapMemBlock ===
+
=== sceGUIDOpenByNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-3.60 || 0xD76E7452
 +
|}
 +
 
 +
Temp name was sceKernelOpenUidForNameForDriver.
 +
 
 +
<source lang="c">SceUID sceGUIDOpenByNameForDriver(const char *name);</source>
 +
 
 +
=== sceKernelRemapMemBlockForDriver ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 
|-
 
|-
| 1.69 || 0xCA99929B
+
| 0.931-1.05 || 0x8D332AE1
 
|-
 
|-
| 3.60 || not present
+
| 1.50-3.60 || not present
 
|}
 
|}
  
=== sceKernelGetMemBlockInfoByRange ===
+
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 sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
 +
 
 +
=== sceKernelPartialRemapMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 4,065: Line 4,293:
 
| 0.990 || not present
 
| 0.990 || not present
 
|-
 
|-
| 0.996-3.60 || 0x006F3DB4
+
| 1.50-3.60 || 0xDFE2C8CB
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelRemapBlockForDriver, sceKernelRemapMemBlockForDriver.
/**
+
 
* @brief Get memory block informaton by virtual address range
+
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>.
  
* @param[in] vbase base address
+
<source lang="c">int sceKernelPartialRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source>
* @param[in] vsize  size
 
* @param[inout] pInfo information structure
 
*/
 
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);
 
</source>
 
  
=== sceKernelGetMemBlockInfoByAddr ===
+
=== scePUIDSetNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x4010AD65
+
| 0.990-3.60 || 0x12624884
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelSetNameForPidForUidForDriver.
/**
+
 
* @brief Get memory block information.
+
<source lang="c">int scePUIDSetNameForDriver(SceUID pid, SceUID uid, const char *name);</source>
*
 
* Get information about a memory block.
 
* @param[in] vbase Base address
 
* @param[inout] pInfo Information structure
 
*/
 
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);
 
</source>
 
  
=== sceKernelGetSubbudgetInfo ===
+
=== scePUIDSetNameForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-3.60 || 0x4CFA4100
|-
 
| 1.69-3.60 || 0x832B4A65
 
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelSetObjectForUidForDriver.
typedef struct SceKernelSubbudgetInfo { // size is 0xC
+
 
  int size; // Size of this structure
+
<source lang="c">int scePUIDSetNameForDriver(SceUID pid, const char *name);</source>
  int unk_4;
 
  int unk_8;
 
} SceKernelSubbudgetInfo;
 
  
int sceKernelGetSubbudgetInfo(int unk_boolean, SceKernelSubbudgetInfo *pInfo);
+
=== sceKernelSwitchPidContextForDriver ===
</source>
 
 
 
=== sceKernelGetFreeMemorySize ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x87CC580B
+
| 3.60 || 0x2D711589
 
|}
 
|}
  
<source lang="C">
+
<source lang="c">int sceKernelSwitchPidContextForDriver(SceKernelProcessContext *new_context, SceKernelProcessContext *prev_context);</source>
/**
 
* Get free memory size
 
*/
 
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);
 
</source>
 
  
=== sceKernelOpenMemBlock ===
+
=== sceGUIDReleaseObjectForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x8EB8DFBB
+
| 0.990-3.60 || 0x149885C4
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelUidReleaseForDriver.
// on FW <= 1.691, flags is not used
+
 
SceUID sceKernelOpenMemBlock(const char *name, int flags);
+
<source lang="c">int sceGUIDReleaseObjectForDriver(SceUID uid);</source>
</source>
 
  
=== sceKernelFindMemBlockByAddr ===
+
=== sceKernelUnmapMemBlockForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA33B99D1
+
| 3.60 || 0xFFCD9B60
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</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 ===
+
=== sceKernelGetPhysicalMemoryTypeForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA91E15EE
+
| 0.990-3.60 || 0x0AAA4FDD
 
|}
 
|}
  
<source lang="c">
+
Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver
/**
+
 
* Free memory block.
+
<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source>
*
 
* @param[in] uid block uid
 
* @retval SCE_OK Success
 
* @retval <SCE_OK Error code
 
*/
 
int sceKernelFreeMemBlock(SceUID uid);
 
</source>
 
  
=== sceKernelFreeMemBlockForVM ===
+
=== some_memblock_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4EA13FEA
+
| 3.60 || 0x13805CA8
 
|}
 
|}
  
<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source>
+
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
  
=== sceKernelCloseMemBlock ===
+
=== some_memblock_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xB680E3A0
+
| 3.60 || 0x16713BE8
 
|}
 
|}
  
<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source>
+
Same as above but with different flags.
 +
 
 +
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
  
=== sceKernelGetMemBlockBase ===
+
=== some_memblock_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.996-3.60 || 0xB8EF5818
+
| 3.60 || 0x16713BE8
 
|}
 
|}
  
<source lang="C">
+
Same as above but with different flags.
/**
+
 
* @brief Get mapped base address of memory block.
+
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
*
 
* Get base address of memory block.
 
* @param[in] uid block id
 
* @param[out] ppBase base address of memory block
 
* @retval SCE_OK success
 
* @retval <SCE_OK Error
 
*/
 
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);
 
</source>
 
  
=== sceKernelAllocMemBlock ===
+
=== some_memblock_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xB9D5EBDE
+
| 3.60 || 0x4C584B29
 
|}
 
|}
  
<source lang="c">
+
Same as above but with different flags.
/**
+
 
* Reserve a new memory block.
+
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
*
 
* The memory types that can be specified for type are as follows.
 
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
 
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
 
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
 
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
 
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
 
*
 
* Allocate a memory block.
 
*
 
* @param[in] name Memory block name
 
* @param[in] vsize Memory block virtual size
 
* @param[in] flags Options
 
* @retval id UID of memory block
 
* @retval <SCE_OK Error code
 
*/
 
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);
 
</source>
 
  
=== sceKernelAllocUnmapMemBlock ===
+
=== some_memblock_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xEC636BCB
+
| 3.60 || 0x6C76AD89
 
|}
 
|}
  
<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source>
+
Same as above but with different flags.
 +
 
 +
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
  
=== sceKernelOpenVMDomain ===
+
=== some_memblock_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x9CA3EB2B
+
| 3.60 || 0x8C43B052
 
|}
 
|}
  
<source lang="c">int sceKernelOpenVMDomain();</source>
+
Same as above but with different flags.
 +
 
 +
<source lang="c">int some_memblock_operation(SceUID uid, int a2, int a3, int a4);</source>
  
=== sceKernelSyncVMDomain ===
+
=== sceKernelGetMemBlockProcessForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x19D2A81A
+
| 0.990-3.60 || 0x1EFC96EA
 
|}
 
|}
  
<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source>
+
<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source>
  
=== sceKernelCloseVMDomain ===
+
=== memblock_related_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xD6CA56CA
+
| 3.60 || 0x64DBE472
 
|}
 
|}
  
<source lang="c">int sceKernelCloseVMDomain();</source>
+
<source lang="c">int memblock_related_operation(SceUID uid, int a2);</source>
  
=== sceKernelAllocMemBlockForVM ===
+
=== memblock_related_operation ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xE2D7E137
+
| 3.60 || 0x987EE587
 
|}
 
|}
  
<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source>
+
<source lang="c">
 +
struct result_987ee587
 +
{
 +
  int unk0;
 +
  int unk4;
 +
  int unk8;
 +
  int unkC;
 +
  int unk10;
 +
};
 +
 
 +
int memblock_related_operation(SceUID uid, result_987ee587 *result);
 +
</source>
  
=== sceKernelCheckModelCapability ===
+
=== SceSysmemForDriver_856FA2E3 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0144FBD9
+
| 3.60 || 0x856FA2E3
 
|}
 
|}
  
<source lang="c">int sceKernelCheckModelCapability(int bit);</source>
+
Seems related to heap.
 +
 
 +
<source lang="c">int SceSysmemForDriver_856FA2E3(SceUID uid);</source>
  
=== sceKernelGetModelForCDialog ===
+
=== sceKernelGetPhyMemInfoForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA2CB322F
+
| 0.931-3.60 || 0x89475192
 
|}
 
|}
  
<source lang="c">int sceKernelGetModelForCDialog();</source>
+
<source lang="c">
 +
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60
 +
  SceSize size; // Size of this structure
 +
  uint32_t unk4;
 +
  uint32_t unk8;
 +
} SceKernelPhyMemInfo;
  
=== sceKernelGetModel ===
+
// as of FW 0.931-0.990, pindex must be one of these values: 1 PhyPartKernel, 8 PageVenezia, 9 PageVIP
{| class="wikitable"
+
#define SCE_KERNEL_PHYMEMPART_KERNEL_INDEX 1
|-
+
#define SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX 6
! Version !! NID
+
#define SCE_KERNEL_PAGE_VENEZIA_INDEX 8
|-
+
#define SCE_KERNEL_PAGE_VIP_INDEX 9
| 3.60 || 0xD0D4F729
 
|}
 
  
<source lang="c">int sceKernelGetModel();</source>
+
int sceKernelGetPhyMemInfoForDriver(uint32_t pindex, SceKernelPhyMemInfo *pInfo);
 +
</source>
  
=== sceKernelIsPSVitaTV ===
+
=== sceKernelVerifyHeapForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1453A5E5
+
| 0.990-3.60 || 0xC50A9C0D
 
|}
 
|}
  
<source lang="c">int sceKernelIsPSVitaTV();</source>
+
<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);</source>
 +
 
 +
== SceSysmemForDebugger ==
  
== SceDipsw ==
+
This library was removed somewhere between 1.692 and 3.60.
  
=== sceKernelCheckDipsw ===
+
=== sceKernelPhysicalAddressSpaceStartForDebugger ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version !! NID
+
| 0.931 || 0x6AE2188F
 
|-
 
|-
| 1.69-3.60 || 0x1C783FB2
+
| 3.60 || not present
 
|}
 
|}
  
=== sceKernelClearDipsw ===
+
<source lang="C">int sceKernelPhysicalAddressSpaceStartForDebugger(void);</source>
 +
 
 +
=== sceKernelGetPhysicalAddressSpaceForDebugger ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version !! NID
+
| 0.931 || 0xE8905626
 
|-
 
|-
| 1.69-3.60 || 0x800EDCC1
+
| 3.60 || not present
 
|}
 
|}
  
=== sceKernelSetDipsw ===
+
In FW 0.931 calls sceKernelPhysicalAddressSpaceStartForDebugger.
 +
 
 +
<source lang="C">void *sceKernelGetPhysicalAddressSpaceForDebugger(void);</source>
 +
 
 +
=== sceKernelIsAccessibleRangeProcForDebugger ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version !! NID
+
| 0.990-1.50 || 0x01DFC193
 
|-
 
|-
| 1.69-3.60 || 0x817053D4
+
| 3.60 || not present
 
|}
 
|}
  
== SceDipswForDriver ==
+
<source lang="C">int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source>
  
=== sceKernelCheckDipswForDriver ===
+
=== sceKernelIsAccessibleRangeForDebugger ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version !! NID
+
| 0.931-1.50 || 0xD027761F
 
|-
 
|-
| 3.60 || 0xA98FC2FD
+
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">sceKernelCheckDipswForDriver(int bit);</source>
+
<source lang="C">int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);</source>
 +
 
 +
== SceSysmem ==
  
=== sceKernelGetDipswInfoForDriver ===
+
The SceSysmem library is responsible for both low-level and high-level memory management. There are functions for allocating raw blocks of memory (similar to Linux <code>sbrk</code>) as well as functions for maintaining a heap-like structure (similar to <code>malloc</code>) for kernel, however [[SceLibKernel]] implements a proper heap and that is used for user code.
 +
 
 +
=== sceKernelMapMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB2AD48BE
+
| 0.990-1.69 || 0x7B763A21
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
return *(int *)(dipsw_addr + 4 * info_id);
+
=== sceKernelRemapMemBlock ===
 
 
0 0x40 0x4 DevKit CP timestamp 1
 
 
 
1 0x44 0x2 DevKit CP Version
 
 
 
2 0x46 0x2 DevKit CP Build ID
 
 
 
3 0x48 0x4 DevKit CP timestamp 2 (strangely also set on Retail and TesKit)
 
 
 
<source lang="C">int sceKernelGetDipswInfoForDriver(int info_id);</source>
 
 
 
=== sceKernelClearDipswForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF1F3E9FE
+
| 0.990-1.69 || 0x3B29E0F5
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">sceKernelClearDipswForDriver(int bit);</source>
+
=== sceKernelPartialMapMemBlock ===
 
 
=== sceKernelSetDipswForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x82E45FBF
+
| 0.990 || not present
 +
|-
 +
| 1.69 || 0xC0A59868
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">sceKernelSetDipswForDriver(int bit);</source>
+
=== sceKernelUnmapMemBlock ===
 
 
== SceUartForKernel ==
 
 
 
=== sceUartWriteForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x41973874
+
| 0.990-1.69 || 0xEE30D976
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">int sceUartWriteForKernel(int device, unsigned char data);</source>
+
<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source>
  
=== sceUartReadAvailableForKernel ===
+
=== sceKernelPartialUnmapMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x38DB7629
+
| 0.990 || not present
 +
|-
 +
| 1.69 || 0xCA99929B
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Returns the number of words available to read from the read FIFO.
+
=== sceKernelGetMemBlockInfoByRange ===
 
 
<source lang="c">int sceUartReadAvailableForKernel(int device);</source>
 
 
 
=== sceUartReadForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x9BBF1255
+
| 0.990 || not present
 +
|-
 +
| 0.996-3.60 || 0x006F3DB4
 
|}
 
|}
  
<source lang="c">int sceUartReadForKernel(int device);</source>
+
<source lang="c">
 +
/**
 +
* @brief Get memory block informaton by virtual address range
  
=== sceUartInitForKernel ===
+
* @param[in] vbase base address
 +
* @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
 
|-
 
|-
| 3.60 || 0xA9C74212
+
| 0.990-3.60 || 0x4010AD65
 
|}
 
|}
  
It initializes the clock generator registers for the <code>device</code>.
+
<source lang="c">
The default baud rate is 115200 for devices 0-5 and 250000 for the device 6.
+
/**
 +
* @brief Get memory block information.
 +
*
 +
* Get information about a memory block.
 +
* @param[in] vbase Base address
 +
* @param[inout] pInfo Information structure
 +
*/
 +
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);
 +
</source>
  
<source lang="c">int sceUartInitForKernel(int device);</source>
+
=== sceKernelGetSubbudgetInfo ===
 
 
== SceCpu ==
 
This library provides wrapper for much ARM CP15 co-processor access as well as low level support of spinlocks and other synchronization primitives.
 
 
 
=== sceKernelCpuGetCpuId ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x2704CFEE
+
| 0.990 || not present
 +
|-
 +
| 1.69-3.60 || 0x832B4A65
 
|}
 
|}
  
Return the CPU ID of the current core.
+
<source lang="c">
 +
typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60
 +
  int size; // Size of this structure
 +
  int unk_4;
 +
  int unk_8;
 +
} SceKernelSubbudgetInfo;
  
<source lang="c">int sceKernelCpuGetCpuId(void);</source>
+
int sceKernelGetSubbudgetInfo(SceBool unk_boolean, SceKernelSubbudgetInfo *pInfo);
 +
</source>
  
== SceCpuForKernel ==
+
=== sceKernelGetFreeMemorySize ===
 
 
=== sceKernelTlsKernelSetForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940 || 0x7A180AA4
+
| 1.69-3.60 || 0x87CC580B
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
 
<source lang="C">
 
<source lang="C">
// thread_index must be < 8
+
/**
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);
+
* Get free memory size
 +
*/
 +
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);
 
</source>
 
</source>
  
=== sceKernelTlsKernelGetForKernel ===
+
=== sceKernelOpenMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940 || 0x28E080BC
+
| 0.990-3.60 || 0x8EB8DFBB
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">
+
<source lang="c">
// thread_index must be < 8
+
// on FW <= 1.691, flags is not used
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);
+
SceUID sceKernelOpenMemBlock(const char *name, int flags);
 
</source>
 
</source>
  
=== sceKernelCallRoundupDCacheLineFuncForKernel ===
+
=== sceKernelFindMemBlockByAddr ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xED512F50
+
| 0.990-3.60 || 0xA33B99D1
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Calls the function previously registered by sceKernelGetRoundupDCacheLineFuncForKernel.
+
<source lang="c">
 
+
/**
<source lang="C">int sceKernelCallRoundupDCacheLineFuncForKernel(int a1);</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>
  
=== sceKernelGetRoundupDCacheLineFuncForKernel ===
+
=== sceKernelFreeMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x66C3AA93
+
| 0.990-3.60 || 0xA91E15EE
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Uses CTR and CTR-DMINLINE to determine which function to return.
+
<source lang="c">
 +
/**
 +
* Free memory block.
 +
*
 +
* @param[in] uid block uid
 +
* @retval SCE_OK Success
 +
* @retval <SCE_OK Error code
 +
*/
 +
int sceKernelFreeMemBlock(SceUID uid);
 +
</source>
  
<source lang="C">(int sceKernelCallRoundupDCacheLineFuncForKernel(int) *) sceKernelGetRoundupDCacheLineFuncForKernel(void);</source>
+
=== sceKernelFreeMemBlockForVM ===
 
 
=== sceKernelVMWrite8ForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xA3C65664
+
| 3.60 || 0x4EA13FEA
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);</source>
+
<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source>
  
=== sceKernelVMWrite16ForKernel ===
+
=== sceKernelCloseMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xBF38A460
+
| 0.990-3.60 || 0xB680E3A0
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);</source>
+
<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source>
  
=== sceKernelVMWrite32ForKernel ===
+
=== sceKernelGetMemBlockBase ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x04D129B2
+
| 0.996-3.60 || 0xB8EF5818
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);</source>
+
<source lang="C">
 
+
/**
=== sceKernelVMReadUser8ForKernel ===
+
* @brief Get mapped base address of memory block.
{| class="wikitable"
+
*
|-
+
* Get base address of memory block.
! Version !! NID
+
* @param[in] uid block id
|-
+
* @param[out] ppBase base address of memory block
| 0.990 || 0x942B92C3
+
* @retval SCE_OK success
|-
+
* @retval <SCE_OK Error
| 3.60 || not present
+
*/
|}
+
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);
 +
</source>
  
<source lang="C">int sceKernelVMReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
+
=== sceKernelAllocMemBlock ===
 
 
=== sceKernelVMReadUser16ForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || unk
+
| 0.990-3.60 || 0xB9D5EBDE
|-
 
| 3.60 || unk
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
+
<source lang="c">
 +
/**
 +
* Reserve a new memory block.
 +
*
 +
* The memory types that can be specified for type are as follows.
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
 +
*
 +
* Allocate a memory block.
 +
*
 +
* @param[in] name Memory block name
 +
* @param[in] vsize Memory block virtual size
 +
* @param[in] flags Options
 +
* @retval id UID of memory block
 +
* @retval <SCE_OK Error code
 +
*/
 +
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);
 +
</source>
  
=== sceKernelVMReadUser32ForKernel ===
+
=== sceKernelAllocUnmapMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x6091086F
+
| 3.60 || 0xEC636BCB
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
+
<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source>
  
=== sceKernelVMRead8ForKernel ===
+
=== sceKernelOpenVMDomain ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xA2F0FE9D
+
| 1.69-3.60 || 0x9CA3EB2B
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
+
<source lang="c">int sceKernelOpenVMDomain();</source>
  
=== sceKernelVMRead16ForKernel ===
+
=== sceKernelSyncVMDomain ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xF31D4D10
+
| 1.69-3.60 || 0x19D2A81A
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
+
<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source>
  
=== sceKernelVMRead32ForKernel ===
+
=== sceKernelCloseVMDomain ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x316574B1
+
| 1.69-3.60 || 0xD6CA56CA
|-
+
|}
| 3.60 || not present
 
|}
 
  
<source lang="C">int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
+
<source lang="c">int sceKernelCloseVMDomain();</source>
  
=== sceKernelMMUUnmapSectionsWithFlagsForKernel ===
+
=== sceKernelAllocMemBlockForVM ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xFC657FD1
+
| 1.69-3.60 || 0xE2D7E137
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUUnmapSectionsWithFlagsForKernel(uint32_t a1, uint32_t a2, void *vbase, SceSize size, uint32_t a5);</source>
+
<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source>
  
=== sceKernelMMUUnmapSupersectionsWithFlagsForKernel ===
+
=== sceKernelCheckModelCapability ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x0E4D29C6
+
| 3.60 || 0x0144FBD9
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(uint32_t a1, uint32_t a2, void *vbase, SceSize size, uint32_t a5);</source>
+
<source lang="c">int sceKernelCheckModelCapability(int bit);</source>
  
=== sceKernelMMUMapSmallPagesForKernel ===
+
=== sceKernelGetModelForCDialog ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xB953E022
+
| 3.60 || 0xA2CB322F
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUMapSmallPagesForKernel(uint32_t vbase, uint32_t voffset, uint32_t vsize, uint32_t pbase);</source>
+
<source lang="c">int sceKernelGetModelForCDialog();</source>
  
=== sceKernelMMUMapSmallPageForKernel ===
+
=== sceKernelGetModel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xCC7C16F8
+
| 3.60 || 0xD0D4F729
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUMapSmallPageForKernel(uint32_t vbase, uint32_t voffset, uint32_t vsize, uint32_t pbase);</source>
+
<source lang="c">int sceKernelGetModel();</source>
  
=== sceKernelMMUL1VAtoPABySWForKernel ===
+
=== sceKernelIsPSVitaTV ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x8E4ECF17
+
| 3.60 || 0x1453A5E5
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUL1VAtoPABySWForKernel(uint32_t a1, void *pVA, void **pPA);</source>
+
<source lang="c">int sceKernelIsPSVitaTV();</source>
 +
 
 +
== SceDipsw ==
  
=== SceCpuForKernel_CA4124DE ===
+
=== sceKernelCheckDipsw ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xCA4124DE
+
| 1.69-3.60 || 0x1C783FB2
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int SceCpuForKernel_CA4124DE(uint32_t a1, void *pVA, void **pPA);</source>
+
=== sceKernelClearDipsw ===
 
 
=== sceKernelCpuSaveContextForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-