Difference between revisions of "SceSysmem"

From Vita Development Wiki
Jump to navigation Jump to search
Line 8,133: Line 8,133:
 
| 3.60 || 0xF10AB792
 
| 3.60 || 0xF10AB792
 
|}
 
|}
 +
 +
or sceKernelSysrootGetCachedSecureModuleForKernel
  
 
<source lang="c">
 
<source lang="c">
Line 8,140: Line 8,142:
 
#define SCE_SM_SELF_INDEX_ENDEC_W_PORTABILITY 2  // os0:sm/encdec_w_portability_sm.self
 
#define SCE_SM_SELF_INDEX_ENDEC_W_PORTABILITY 2  // os0:sm/encdec_w_portability_sm.self
  
typedef struct sm_self_info { // size is 0x0C
+
typedef struct SceCachedSecureModule { // size is 0x0C
 
   SceSize size; // Size of this structure
 
   SceSize size; // Size of this structure
 
   void *sm_self_data;  
 
   void *sm_self_data;  
 
   SceSize sm_self_size;
 
   SceSize sm_self_size;
} sm_self_info;
+
} SceCachedSecureModule;
  
int sceSysrootGetSmSelfInfoForKernel(SceSmSelfIndex index, sm_self_info* info);
+
int sceSysrootGetSmSelfInfoForKernel(SceSmSelfIndex index, SceCachedSecureModule *pInfo);
 
</source>
 
</source>
  

Revision as of 03:50, 28 June 2020

SceSysmem is a kernel module that acts as the heart of the kernel. It exports multiple libraries for various features. SceSysmem is the first module that is loaded in the kernel load sequence and its libraries are imported by almost all other modules. See Virtual Memory and Physical Memory for more details on the memory subsystem.

Contents

Module

This module exists in both non-secure and secure world. The non-secure world SELF can be found in os0:kd/sysmem.skprx. It also can be found in the Boot Image.

Known NIDs

Version Name World Privilege NID
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.80 SceSysmem Secure Kernel 0x72425377

Libraries

Known NIDs

Version Name World Visibility NID
1.50-3.60 SceSysmemForKernel Non-secure Kernel 0x63A519E5
3.65 SceSysmemForKernel Non-secure Kernel 0x02451F0F
1.50-3.60 SceSysmemForDriver Non-secure Kernel 0x6F25E18A
1.50-1.692 SceSysmemForDebugger Non-secure Kernel 0xC7309957
1.50-3.60 SceSysmem Non-secure User 0x37FE725A
1.50-3.60 SceDipsw Non-secure User 0xB36D5922
1.50-3.60 SceDipswForDriver Non-secure Kernel 0xC9E26388
1.50-3.60 SceUartForKernel Non-secure Kernel 0xC03DBE40
1.50-3.60 SceCpu Non-secure User 0x45265161
1.50-3.60 SceCpuForKernel Non-secure Kernel 0x54BF2BAB
3.65 SceCpuForKernel Non-secure Kernel 0xA5195D20
1.50-3.60 SceCpuForDriver Non-secure Kernel 0x40ECDB0E
1.50-1.69 SceSysclibForKernel Non-secure Kernel 0x24878615
3.60 SceSysclibForKernel Non-secure Kernel removed
1.50-3.60 SceSysclibForDriver Non-secure Kernel 0x7EE45391
1.50-3.60 SceSysrootForKernel Non-secure Kernel 0x3691DA45
1.50-3.60 SceSysrootForDriver Non-secure Kernel 0x2ED7F97A
1.50-3.60 SceKernelUtilsForDriver Non-secure Kernel 0x496AD8B4
1.50 SceZlibForDriver Non-secure Kernel 0xE241534E
1.50-3.60 SceKernelSuspendForDriver Non-secure Kernel 0x7290B21C
1.50-3.60 SceQafMgrForDriver Non-secure Kernel 0x4E29D3B6
1.50-3.60 ScePmMgrForDriver Non-secure Kernel 0xF13F32F9
1.50-3.60 SceSblAIMgrForDriver Non-secure Kernel 0xFD00C69A
1.50-3.60 SceProcEventForDriver Non-secure Kernel 0x887F19D0
1.50-3.60 SceDebugLed Non-secure User 0xAE004C0A
1.50-3.60 SceDebugLedForDriver Non-secure Kernel 0x7BC05EAD
1.50-3.60 SceDebugForKernel Non-secure Kernel 0x88C17370
1.50-3.60 SceDebugForDriver Non-secure Kernel 0x88758561
1.69-1.80 SceSysmemForTZS Secure Kernel 0x8680060
1.69-1.80 SceDipswForTZS Secure Kernel 0x9DBF584C
1.80 SceUartForTZS Secure Kernel 0xA1D740D7
1.80 SceDebugForTZS Secure Kernel 0x028FFADB
1.69-1.80 SceCpuForTZS Secure Kernel 0xC516B23E
1.69-1.80 SceSysclibForTZS Secure Kernel 0xC839BB78
1.69-1.80 SceSysrootForTZS Secure Kernel 0xFEFF641D
1.69-1.80 SceQafMgrForTZS Secure Kernel 0x637069DD
1.69-1.80 ScePmMgrForTZS Secure Kernel 0x27F1AFD8
1.69-1.80 SceSblAIMgrForTZS Secure Kernel 0x60D19047

Types

typedef int threadmgr_core_ctx;

typedef struct tctx_holder {
  int unk0;
  int unk4;
  int unk8;
  int unkC;
  int unk10;
  int unk14;
  int unk18;
  int unk1C;
  int unk20;
  int unk24;
  int unk28;
  int unk2C;
  int unk30;
  threadmgr_core_ctx *tctx_34;
} tctx_holder;

typedef struct callback_holder1 {
  int unk0;
  int (*unk4)(void);
  int (*unk8)(void);
  int (*unkC)(void);
  int unk10;
  int unk14;
  int unk18;
  int unk1C;
  int (*unk20)(void);
  int unk24;
  int unk28;
  int unk2C;
  int unk30;
  int unk34;
  int unk38;
  int (*unk3C)(void);
} callback_holder1;

typedef struct callback_holder2 {
  int size;
  int (__cdecl *unk4)(int result, int *a2);
  int (__cdecl *unk8)(SceUID *a1);
  int (__cdecl *unkC)(int, int *);
  int (__cdecl *sceKernelSysrootGetProcessSelfAuthInfoForKernel)(SceUID pid, SceSelfAuthInfo* self_auth_info);
  int (__cdecl *sceKernelSysrootGetProcessTitleIdForKernel)(SceUID pid, char *title_id, SceSize len);
  int (__cdecl *unk18)(unsigned int a1);
  int (__cdecl *unk1c)(int a1);
} callback_holder2;

typedef struct callback_holder3 {
  int unk0;
  int (*unk4)(void);
  int (*unk8)(void);
  int (__fastcall *unkC)(int);
  int (__fastcall *unk10)(int);
  int (*unk14)(void);
} callback_holder3;

typedef struct sysbase_t {
  tctx_holder *hldr[6];
  char unk[84];
  char *kbl_param;
  int unk70;
  char unk74[616];
  char unk2dc[52];
  int unk310;
  int unk314;
  int unk318;
  int unk31C;
  int unk320;
  int unk324;
  int unk328;
  int unk32C;
  int unk330;
  int unk334;
  int unk338;
  int unk33C;
  int unk340;
  int (__cdecl *GetThreadAccessLevel)();
  int unk348;
  int (*unk34C_some_callback1)(void);
  callback_holder3 *unk350;
  int unk354;
  callback_holder1 *unk358;
  callback_holder2 *unk35C;
  int (*unk360)(void);
  int (*unk364)(void);
  int (__fastcall *unk368)(int, int, int);
  char unk36C[20];
  int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)();
  int (__cdecl *SceSblPostSsMgrForDriver_22599675)();
  int (__cdecl *SceSblPostSsMgrForDriver_9b49c249)();
  int (__cdecl *SceSblPostSsMgrForDriver_d8a2d465)(unsigned long long);
  int (__cdecl *SceSblPostSsMgrForDriver_abdd68cd)(void *);
  int (__cdecl *sceSblUtMgrHasNpTestFlagForDriver)();
  int (*SceSblUpdateMgr_smth)(void);
  int (*ScePower_smth)(void);
} sysbase_t;

typedef struct sysbase360_t {
	int unk_0x00; // 0
	void *unk_0x04;
	SceSize sysbase_size; // 3.60:0x41C
	uint32_t sysbase_magic1;
	int unk_0x10; // 0
	int unk_0x14; // 0x400
	void *unk_0x18;
	int unk_0x1C; // 0x4
	void *unk_0x20;
	int unk_0x24; // 0
	int unk_0x28; // 0x10
	int unk_0x2C; // 0x1

	int unk_0x30; // 0x40004
	int unk_0x34; // 0
	int unk_0x38; // 0
	void *unk_0x3C;

	void *unk_0x40;
	void *unk_0x44; // SceExcpmgr data vaddr?
	void *unk_0x48; // SceKernelIntrMgr data vaddr?
	void *unk_0x4C;

	void *unk_0x50;
	int unk_0x54; // 0
	void *unk_0x58;
	int unk_0x5C; // 0

	int unk_0x60; // 0
	int unk_0x64; // 0
	int unk_0x68; // 0
	SceBootArgs *KblParam; // old name is sysroot buff

	int unk_0x70; // 0x51030100, paddr?
	int unk_0x74; // 0x80000115
	int unk_0x78; // 0
	int unk_0x7C; // 0x115

	int unk_0x80; // 0x10200
	int unk_0x84; // 0x704
	int unk_0x88; // 0x2800D000
	int unk_0x8C; // 0

	int unk_0x90; // 0x5
	int unk_0x94; // 0
	int unk_0x98; // 0
	int unk_0x9C; // 0

	int unk_0xA0[0x18]; // 0
	int unk_0x100[0x34]; // 0

	int unk_0x1D0; // 0
	int unk_0x1D4; // func ptr?, paddr:0x51003581
	int unk_0x1D8; // 0
	int (* sceKernelSysrootMountDummyTtypDevFs)(void);		// SceIofilemgr + 0x1
	int unk_0x1E0[0x8]; // 0
	int unk_0x200[0x14]; // 0

	int unk_0x250; // 0
	int (* sceKernelSysrootPowerTriggerFlag0x10000)(int a1);	// Temp name, ScePower + 0x21F5
	int unk_0x258; // 0
	int unk_0x25C; // 0

	int unk_0x260[0xC]; // 0

	int unk_0x290; // 0
	int (* sceKernelSysrootDisplayRev1)();				// SceDisplay + 0x1
	int unk_0x298; // 0
	int (* sceKernelSysrootMsifStart)(void);			// SceMsif + 0x3811

	int unk_0x2A0; // 0
	int (* sceKernelSysrootPowerRev1)();				// Temp name, ScePower + 0x7BCD
	int unk_0x2A8; // 0
	int (* sceKernelSysrootPowerTriggerFlag0x10000_2)(void);	// Temp name, ScePower + 0x218D

	int unk_0x2B0; // 0
	int (* sceKernelSysrootPowerEnableSubIntr)(void);		// Temp name, ScePower + 0x5B51
	int unk_0x2B8; // 0
	int unk_0x2BC; // 0

	int unk_0x2C0[0x4]; // 0

	int unk_0x2D0; // 0
	int (* sceKernelSysrootThreadFunction1)(void);			// Temp name, SceKernelThreadMgr + 0x4D85
	int (* sceKernelSysrootIofilemgrStart)(void);			// SceIofilemgr + 0x3E5
	void *unk_0x2DC;

	void *unk_0x2E0;
	void *unk_0x2E4;
	void *unk_0x2E8;
	void *unk_0x2EC;

	void *unk_0x2F0;
	void *unk_0x2F4;
	void *unk_0x2F8;
	void *unk_0x2FC;

	void *unk_0x300;
	void *unk_0x304;
	int unk_0x308; // 0x10001
	void *unk_0x30C;

	void *unk_0x310;
	void *unk_0x314;
	void *unk_0x318;
	int unk_0x31C; // 0

	void *unk_0x320;
	void *unk_0x324;
	SceUID (* sceKernelSysrootGetThreadId)(void);				// Temp name, SceKernelThreadMgr + 0x895
	int (* sceKernelSysrootGetThreadFunction3)(void);			// Temp name, SceKernelThreadMgr + 0xC79,  SceThreadmgrForDriver_91382762

	SceUID (* sceKernelSysrootGetProcessId)(void);				// Temp name, SceKernelThreadMgr + 0x8A9
	int (* sceKernelSysrootGetThreadFunction4)(void);			// Temp name, SceKernelThreadMgr + 0x8D1
	int (* sceKernelSysrootGetThreadFunction5)(void);			// Temp name, SceKernelThreadMgr + 0x8ED
	int (* sceKernelSysrootGetThreadFunction6)(void);			// Temp name, SceKernelThreadMgr + 0x90D

	void (* sceKernelSysrootGetThreadFunction7);				// Temp name, SceKernelThreadMgr + 0xE69
	int (* sceKernelSysrootGetThreadFunction8)(void);			// Temp name, SceKernelThreadMgr + 0x8BD, SceThreadmgrForDriver_332E127C
	int (* sceKernelSysrootThreadFunction9)(int a1, int a2, int a3);	// Temp name, SceKernelThreadMgr + 0x2541
	int (* sceKernelSysrootThreadFunction10)(int a1);			// Temp name, SceKernelThreadMgr + 0xC99, SceThreadmgrForDriver_AB977C72

	void *unk_0x350;
	int unk_0x354; // 0xFFFFFFFF
	void *unk_0x358;
	void *unk_0x35C;

	int unk_0x360;
	int (* sceKernelSysrootGetBusError)(void *dst, uint32_t len);		// SceKernelBusError + 0x23, SceBusErrorForKernel_EBB1F135
	int (* sceKernelSysrootAppMgrFunction1)(int a1, int a2, int a3, int a4, int a5, int a6); // SceAppMgr + 0x2795, SceAppMgrForDriver_324DD34E
	SceUID (* sceKernelSysrootGetShellPid)(void);	// SceAppMgr + 0x101F9, SceAppMgrForDriver_2FEACA9F

	void *unk_func_0x370;				// SceCoredump + 0x7109, SceCoredumpForDriver_A7D214A7
	void *unk_func_0x374;				// SceCoredump + 0x74F9, SceCoredumpForDriver_340856F7
	void *unk_func_0x378;				// SceCoredump + 0x132ED, SceCoredumpForDriver_EF20949F
	int unk_0x37C; // 0

	void *unk_func_0x380;				// SceSblPostSsMgr + 0x9001, sceSblLicMgrGetLicenseStatusForDriver
	int (* unk_func_0x384)(void);			// SceSblPostSsMgr + 0xB005, SceSblPostSsMgrForDriver_22599675, get flag
	int (* unk_func_0x388)(void);			// SceSblPostSsMgr + 0xB011, SceSblPostSsMgrForDriver_9B49C249, get flag
	void *unk_func_0x38C;				// SceSblPostSsMgr + 0xB4ED, SceSblPostSsMgrForDriver_D8A2D465

	void *unk_func_0x390;				// SceSblPostSsMgr + 0xB111, sceSblUtMgrGetTrilithiumBufferForDriver
	int (* sceKernelSysrootHasNpTestFlag)(void);	// SceSblPostSsMgr + 0xB01D
	void *unk_func_0x398;				// SceSblUpdateMgr + 0x8B01
	int (* sceKernelSysrootLedSetMode)(int led, int mode, void *led_configuration); // ScePower + 0x7C05

	void *unk_0x3A0;
	int unk_0x3A4; // 0
	int unk_0x3A8; // 0
	int unk_0x3AC; // 0

	int unk_0x3B0[0x4]; // 0

	int unk_0x3C0; // 0
	int unk_0x3C4; // 0
	int unk_0x3C8; // 0
	void *unk_func_0x3CC; // SceNetPs + 0x3E51, SceNetPsForDriver_83A12CCC

	void *unk_func_0x3D0; // SceNetPs + 0x3F4D, SceNetPsForDriver_C000CA8F
	int unk_0x3D4; // 0
	int unk_0x3D8; // 0
	void *unk_func_0x3DC; // SceNetPs + 0x3E51, SceNetPsForDriver_83A12CCC

	void *unk_func_0x3E0; // SceNetPs + 0x3F4D, SceNetPsForDriver_C000CA8F
	int (* sceKernelSysrootAppMgrFunction3)(int a1, int a2); // SceAppMgr + 0x9F49
	int (* sceKernelSysrootAppMgrFunction4)(int a1, int a2); // SceAppMgr + 0x9EED
	int (* sceKernelSysrootAppMgrFunction5)(int a1);	 // SceAppMgr + 0x9D31

	void *unk_func_0x3F0; // ScePfsMgr + 0x1, ScePfsMgrForKernel_4C148288
	void *unk_0x3F4;
	void *unk_0x3F8;
	int unk_0x3FC; // 0

	int unk_0x400[0x6]; // 0
	uint32_t sysbase_magic2;
} sysbase360_t;

typedef struct SceKernelFreeMemorySizeInfo {
	SceSize size;
	SceSize sizeMain;
	SceSize sizeCdram;
	SceSize sizePhycont;
} SceKernelFreeMemorySizeInfo;

typedef int (*SceClassCallback)(void *item);

typedef struct SceClass_0990 { // size is 0x10 on FW 0.990
	SceSize size; // Size of this structure
	struct SceClass *next;
	struct SceClass *root; // to confirm
	struct SceClass *prev; // to confirm
} SceClass_0990;

typedef struct SceClass { // size is 0x2C on FW 3.60
	struct SceClass *next;				// 0x00
	struct SceClass *root;				// 0x04
	struct SceClass *prev;				// 0x08
	const char *name;				// 0x0C
	struct SceClass *uid_class;			// 0x10
	unsigned int attr;				// 0x14
	unsigned short item_size;			// 0x18
	unsigned short unk_1A;				// 0x1A
	SceClassCallback constructor;			// 0x1C
	SceClassCallback destructor;			// 0x20
	const unsigned int magic;			// 0x24 - 0xABCE9DA5
	SceClassCallback allocMethod;			// 0x28
} SceClass;

typedef struct SceKernelObject { // size is at least 0x24
	void *pObject;			// 0x0
	SceClass pClass;		// 0x4
	uint32_t type;			// 0x8
	uint16_t lcount;		// 0xC
	uint16_t ucount;		// 0xE
	uint16_t ccount;		// 0x10
	uint32_t unk_12;		// 0x12 - 0x54c3
	uint16_t unk_16;		// 0x16
	uint32_t uid;			// 0x18
	char unk_1C[4];			// 0x1C
	const char *name;		// 0x20
	uint32_t indexRaw;		// 0x24
} SceKernelObject;

/** @name Memory types that can be specified with sceKernelAllocMemBlock
 */
/*@{*/

/**
 * @brief User readable / writable LPDDR2 memory
 *
 * This type secures a readable / writable memory block in user space.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RW			0x0c20d060U

#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA			SCE_KERNEL_MEMBLOCK_TYPE_USER_RW

/**
 * @brief User readable / writable LPDDR2 non-cache memory
 *
 * A type to secure a memory block on LPDDR2 that is readable
 * and writable in user space and does not use cache.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW			0x0c208060U

/**
 * @brief An alias for SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE		SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW

/**
 * @brief An alias for SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA_UNCACHE		SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE

/**
 * @brief User readable and writable LPDDR2 physical continuous memory
 *
 * A type that can read and write in user space and secure
 * memory blocks from the physical continuous memory area.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW		0x0c80d060U

/**
 * @brief User-readable and non-cacheable physical continuous memory
 *
 * A type for on-cacheable read / write in user space and to secure
 * memory blocks from the physical continuous memory area.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW	0x0d808060U

/**
 * @brief User-readable and non-cacheable CDRAM memory
 *
 * A type that can be read and written in user space and secures
 * memory blocks on CDRAM.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW			0x09408060U

/**
 * @brief An alias for SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW.
 */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RWDATA		SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW

/*@}*/

/**
 * @brief A type representing a memory type
 *
 * A type that represents the type of memory block secured by sceKernelAllocMemBlock.
 */
typedef int		SceKernelMemoryType;

/**
 * @brief Memory block information structure
 *
 * A structure for obtaining information about memory blocks. Size is 0x14 bytes on FW 0.990.
 */
typedef struct SceKernelMemBlockInfo0990 {
	SceSize				size;			/**< Size of the structure itself */
	void				*mappedBase;		/**< Map base address */
	SceSize				mappedSize;		/**< Mapped size */
	SceKernelMemoryType		memoryType;		/**< Memory type */
	SceUInt32			access;			/**< Access right */
} SceKernelMemBlockInfo0990;

/**
 * @brief Memory block information structure
 *
 * A structure for obtaining information about memory blocks. Size is 0x18 bytes on FWs 0.996+.
 */
typedef struct SceKernelMemBlockInfo {
	SceSize				size;			/**< Size of the structure itself */
	void				*mappedBase;		/**< Map base address */
	SceSize				mappedSize;		/**< Mapped size */
	SceKernelMemoryType		memoryType;		/**< Memory type */
	SceUInt32			access;			/**< Access right */
	SceKernelMemBlockType		type;			/**< Memory block type */
} SceKernelMemBlockInfo;

typedef struct SceKernelMemBlockInfoExDetails {
    SceKernelMemBlockType type;
    SceUID memblk_uid;
    const char *name;
    void *mappedBase;
    SceSize mappedSize;
    SceSize memblock_some_size_or_alignment;
    int extraLow;
    int extraHigh;
    int unk20;
    SceUID unk24; // ex: 0x10045, maybe some pid
    SceKernelObject *SceUIDPhyMemPartClass_obj;
} SceKernelMemBlockInfoExDetails;

typedef struct SceKernelMemBlockInfoEx { // size is 0xAC on FW 0.990, 0xB8 on FW 3.60
    SceSize size; // Size of this structure
    SceKernelMemBlockInfoExDetails details;
    SceSize unk30; // paddr num
    SceSize unk34; // paddr size num?
    void *paddr_list[0x10];
    SceSize size_list[0x10];
} SceKernelMemBlockInfoEx;

typedef struct SceKernelMemBlockInfoSimple { // size is 0x24 on FW 0.990
    SceSize size; // Size of this structure
    SceKernelMemBlockType type;
    SceUID uid;
    char *name; // "SceNULL" by default
    char unk_0x10[0x14];
} SceKernelMemBlockInfoSimple;

/*----- memory access permission -----*/

/**
 * @brief readable memory
 */
#define SCE_KERNEL_MEMORY_ACCESS_R		0x04U

/**
 * @brief writable memory
 */
#define SCE_KERNEL_MEMORY_ACCESS_W		0x02U

/**
 * @brief executable memory (kernel only)
 */
#define SCE_KERNEL_MEMORY_ACCESS_X		0x01U

/*----- memory type -----*/

/**
 * @brief uncache normal memory
 */
#define SCE_KERNEL_MEMORY_TYPE_NORMAL_NC	0x80

/**
 * @brief cache normal memory
 */
#define SCE_KERNEL_MEMORY_TYPE_NORMAL		0xD0

/**
 * Optional parameter of sceKernelAllocMemBlock for FWs <=0.940.
 */
 typedef struct SceKernelAllocMemBlockOpt0940 {
	SceSize		size;				/**< Size of this structure */
	SceUInt32	attr;				/**< Attributes field */
	SceSize		alignment;			/**< Specify alignment.
							SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT must be set for the attr member. */
	SceUID		uidBaseBlock;			/**< Base memory block UID */
	const char	*strBaseBlockName;		/**< Base memory block UID name */
} SceKernelAllocMemBlockOpt0940;

/**
 * Option parameter of sceKernelAllocMemBlock
 */
 typedef struct SceKernelAllocMemBlockOpt {
	/**
	 * Size of this structure
	 */
	SceSize		size;

	/**
	 * Attributes field
	 */
	SceUInt32	attr;

	/**
	 * Specify alignment.
	 * SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT must be set for the attr member.
	 */
	SceSize		alignment;

	/**
	 * reserved
	 */
	 SceUInt32	uidBaseBlock;

	/**
	 * reserved2
	 */
	const char	*strBaseBlockName;

#if 0
	/**
	 * mapped base address [out]
	 */
	void		*mappedBase;

	/**
	 * mapped size [out]
	 */
	SceSize		mappedSize;

	/**
	 * memory type [out]
	 */
	SceKernelMemoryType	memoryType;

	SceUInt32	access;
#endif
} SceKernelAllocMemBlockOpt;

/**
 * Option parameter of kernel sceKernelAllocMemBlock on old FWs (as seen on FWs 0.900-0.990)
 */
typedef struct SceKernelAllocMemBlockOptKernel_old { // size is 0x28 on 0.900, 0x2C on 0.910, 0x30 on 0.931-0.990, 0x34 on ?.??
    SceSize size;			// Size of this structure
    SceUInt32 unk_4;
    SceUInt32 attr;
    void *vbase;
    void *pbase;			// Physical address to use as base
    SceSize alignment;
    SceUInt32 extraLow;
    SceUInt32 extraHigh;
    void *base;
    SceUID pid;
    SceKernelPAVector *pPAV;
    SceSize vsize;
    SceUInt32 unk_30;
} SceKernelAllocMemBlockOptKernel_old;

/**
 * Option parameter of kernel sceKernelAllocMemBlock on recent FWs (as seen on FW 3.60)
 */
typedef struct SceKernelAllocMemBlockOptKernel { // size is 0x58 on FW 3.60
	SceSize size;			// Size of this structure
	SceUInt32 unk_4;
	SceUInt32 attr;
	void *vbase;
	void *pbase;			// Physical address to use as base
	SceSize alignment;
	SceUInt32 extraLow;
	SceUInt32 extraHigh;
	void *base;
	SceUID pid;
	SceKernelPAVector *pPAV;
	SceSize vsize;
	SceUInt32 unk_30;
	SceUInt32 unk_34;
	SceUInt32 unk_38;
	SceUInt32 unk_3C;
	SceUInt32 unk_40;
	SceUInt32 unk_44;
	SceUInt32 unk_48;
	SceUInt32 unk_4C;
	SceUInt32 unk_50;
	SceUInt32 unk_54;
} SceKernelAllocMemBlockOptKernel;

/**
 * Attributes to enable some SceKernelAllocMemBlockOpt members.
 */
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_VBASE		0x00000001
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PBASE		0x00000002
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT		0x00000004
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_LOW		0x00000008
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_HIGH		0x00000010
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASE			0x00000040
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PID			0x00000080
#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_PPAV			0x00001000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_SIZE			0x00002000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_FIELD_30		0x00010000
#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_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_ALLOW_PARTIAL_OP		0x04000000 // Allow partial operation. ?What does that mean?

/**
 * UID is created by sceKernelOpen***()
 */
#define SCE_UID_ATTR_OPEN_FLAG			0x00080000U

typedef struct SceKernelHeapInfo { // size is 0xCC on FW 0.990
	SceSize size;			// Size of this structure
	char unk_4[0xC8];
} SceKernelHeapInfo;

typedef struct SceKernelHeapObject { // size is 0x40 on FW 0.990
	SceSize size;				// Size of this structure
	uint32_t unk_4;				// 0x4
	uint32_t unk_8;				// 0x8
	uint32_t unk_C;				// 0xC
	uint32_t unk_10;			// 0x10
	uint32_t unk_14;			// 0x14
	uint32_t unk_18;			// 0x18
	uint32_t unk_1C;			// 0x1C
	uint32_t unk_20;			// 0x20
	uint32_t unk_24;			// 0x24
	uint32_t unk_28;			// 0x28
	uint32_t unk_2C;			// 0x2C
	uint32_t unk_30;			// 0x30
	uint32_t magic;				// 0x34 - 0xD2BBDEC3
	uint32_t unk_38;			// 0x38
	uint32_t unk_3C;			// 0x3C
	uint32_t unk_40;			// 0x40
} SceKernelHeapObject;

typedef struct SceKernelFixedHeap { // size is 0x40 on FW 0.990
	SceSize size;				// Size of this structure
	SceClass pClass;			// 0x4
	uint32_t unk_8;				// 0x8
	uint32_t unk_C;				// 0xC
	uint32_t unk_10;			// 0x10
	uint32_t unk_14;			// 0x14
	uint32_t pageSize;			// 0x18 - min 0x1000 on FW 0.990
	uint16_t itemSize;			// 0x1C
	uint16_t unk_1E;			// 0x1E
	uint32_t unk_20;			// 0x20
	uint32_t unk_24;			// 0x24
	uint32_t magic;				// 0x28 - 0xFD9B28A6
	uint16_t sizeInWords;			// 0x2C
	uint16_t index;				// 0x2E
	SceKernelHeapObject *heapObject;	// 0x30
	uint32_t unk_34;			// 0x34
	uint32_t unk_38;			// 0x38
	uint16_t unk_3C;			// 0x3C
} SceKernelFixedHeap;

typedef struct SceKernelFixedHeapInfo { // size is 0x14 on FW 0.990
	SceSize size;			// Size of this structure
	uint32_t unk_4;			// = (uint32_t)*(uint16_t *)(pObject + 0x1C)
	uint32_t unk_8;			// = *(uint32_t *)(pObject + 0x18) + (uint32_t)*(uint16_t *)(pObject + 0x2E)
	uint32_t unk_C;			// = (uint32_t)*(uint16_t *)(pObject + 0x1E)
	uint32_t unk_10;		// = (uint32_t)*(uint16_t *)(pObject + 0x20)
} SceKernelFixedHeapInfo;

typedef struct SceKernelHeapMemoryOpt { // size is 0x14 on FW 0.990
	SceSize size;			// Size of this structure
	uint32_t unk_4;
	uint32_t unk_8;
	uint32_t unk_C;			// example: 0x20
	uint32_t unk_10;
} SceKernelHeapMemoryOpt;

typedef struct SceAddressSpace { // size is at least 0xEC
	char unk[0x14];
	SceKernelMMUContext *context;
	char unk[0xC4];
	void *funcAlloc;
	char unk2[0x8];
	uint32_t magic;			// always 0x4d95AEEC
} SceAddressSpace;

typedef struct SceKernelAddressSpace { // size is 0x10 bytes on FW 0.940-3.60
    SceSize size; // Size of this structure
    int flag;
    void *data_0x08; // info dst buff ptr, need AddrSpace.flag  = 2;
    void *data_0x0C; // info dst buff ptr, need AddrSpace.flag |= 4;
} SceKernelAddressSpace;

typedef struct SceKernelVARange {
	uint32_t vaddr;
	uint32_t length;
} SceKernelVARange;

typedef struct SceKernelPARange {
	uint32_t paddr;
	uint32_t length;
} SceKernelPARange;

typedef struct SceKernelPAVector {
	SceSize size;			// Size of this structure (0x14 on 0.990)
	uint32_t pRanges_size;		// Ex: 8
	uint32_t nDataInVector;		// Must be <= 8
	uint32_t count;
	SceKernelPARange *pRanges;
} SceKernelPAVector;

#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
    uint32_t field_0x0;
    uint32_t field_0x4;
    uint32_t some_counter; // always positive
    uint32_t field_0xc;
    char *name;
    int type; // 0x10000 for Lpddr2Main, 0x30000 for Cdram
    int mutex;
    uint32_t field_0x1c;
    SceSize psize;
    int field_0x24;
    int pRoot;
    uint32_t field_0x2c;
    uint32_t field_0x30;
    uint32_t field_0x34;
    uint32_t field_0x38;
    int status;
    int pindex40; //1
    int field_0x44;
    int pindex48; //2
    int field_0x4c;
    int pindex50; //3
    int field_0x54;
    int pindex58; //4
    int field_0x5c;
    int pindex60; //5
    int field_0x64;
    int pindex68; //6
    int field_0x6c;
    int pindex70; //7
    int field_0x74;
    int pindex78; //8
    int field_0x7c;
    int pindex80; //9
    SceSize psize2;
    int min;
    int pindex8C; //10
    int field_0x90;
    int nClient;
    SceSize freeSize;
} SceKernelPhyMemPart;

/**
 * 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;

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;

GetPhyMemPartIndex

uint GetPhyMemPartIndex(uint param_1) {
  uint cpuId;
  
  if (param_1 == 0xea0d050) goto LAB_81009494;
  if (param_1 < 0xea0d051) {
    if (param_1 == 0x620d004) {
      return 6;
    }
    if (param_1 < 0x620d005) {
      if (param_1 != 0x3b0d060) {
        if (param_1 < 0x3b0d061) {
          if (param_1 != 0x3a0d060) {
            if (param_1 < 0x3a0d061) {
              if (param_1 == 0x3a0d040) goto LAB_81009494;
              if (param_1 == 0x3a0d050) {
                return 10;
              }
            }
            else {
              if (param_1 == 0x3b0d040) goto LAB_81009494;
              if (param_1 == 0x3b0d050) {
                return 0xb;
              }
            }
            goto LAB_81009402;
          }
        }
        else {
          if (param_1 != 0x3f0d060) {
            if (param_1 < 0x3f0d061) {
              if ((param_1 == 0x3f0d040) || (param_1 == 0x3f0d050)) goto LAB_81009494;
            }
            else {
              if (param_1 == 0x6208004) {
                return 6;
              }
              if (param_1 == 0x6208006) {
                return 6;
              }
            }
            goto LAB_81009402;
          }
        }
      }
LAB_81009494:
      return (param_1 << 8) >> 0x1c;
    }
    if (param_1 == 0xc208060) {
      return 0xb;
    }
    if (param_1 < 0xc208061) {
      if (param_1 == 0x9408060) {
        return 0xc;
      }
      if (param_1 < 0x9408061) {
        if (param_1 == 0x620d006) {
          return 6;
        }
        if (param_1 == 0x9404060) {
          return 0xc;
        }
      }
      else {
        if (param_1 == 0xb100860) {
          return 1;
        }
        if (param_1 == 0xc200860) {
          return 0xb;
        }
      }
    }
    else {
      if (param_1 == 0xea08040) goto LAB_81009494;
      if (param_1 < 0xea08041) {
        if (param_1 == 0xc20d050) {
          return 0xb;
        }
        if (param_1 == 0xc20d060) {
          return 0xb;
        }
      }
      else {
        if (param_1 == 0xea08060) goto LAB_81009494;
        if (param_1 == 0xea0d040) {
          return 10;
        }
      }
    }
  }
  else {
    if (param_1 == 0x20108004) {
      return 1;
    }
    if (param_1 < 0x20108005) {
      if (param_1 == 0x1020d006) {
        return 6;
      }
      if (param_1 < 0x1020d007) {
        if (param_1 == 0x10208004) {
          return 6;
        }
        if (param_1 < 0x10208005) {
          if (param_1 == 0xea0d060) goto LAB_81009494;
          if (param_1 == 0x10200806) {
            return 6;
          }
        }
        else {
          if (param_1 == 0x10208006) {
            return 6;
          }
          if (param_1 == 0x1020d004) {
            return 6;
          }
        }
      }
      else {
        if (param_1 == 0x20100206) {
          return 1;
        }
        if (param_1 < 0x20100207) {
          if (param_1 == 0x1050d006) {
            return 5;
          }
          if (param_1 == 0x20100204) {
            return 1;
          }
        }
        else {
          if (param_1 == 0x20100804) {
            return 1;
          }
          if (param_1 == 0x20100806) {
            return 1;
          }
        }
      }
    }
    else {
      if (param_1 == 0x60208006) {
        return 6;
      }
      if (param_1 < 0x60208007) {
        if (param_1 == 0x40404006) {
          return 0xc;
        }
        if (param_1 < 0x40404007) {
          if (param_1 == 0x20108006) {
            return 1;
          }
          if (param_1 == 0x2010d006) {
            return 1;
          }
        }
        else {
          if (param_1 == 0x40408006) {
            return 0xc;
          }
          if (param_1 == 0x60208004) {
            return 6;
          }
        }
      }
      else {
        if (param_1 == 0x6050d006) goto LAB_81009494;
        if (param_1 < 0x6050d007) {
          if (param_1 == 0x6020d004) {
            return 6;
          }
          if (param_1 == 0x6020d006) {
            return 6;
          }
        }
        else {
          if (0x70f0d003 < param_1) {
            if (param_1 < 0x70f0d007) goto LAB_81009494;
            if (param_1 == 0xa0408006) {
              return 0xc;
            }
          }
        }
      }
    }
  }
LAB_81009402:
  cpuId = ksceKernelCpuGetCpuId();
  SceDebugForDriver_1A3F2AA4
            (1,
             "%d:address_space.c:%s:Warning:Using SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX for0x%08x\n"
             ,cpuId,"GetPhyMemPartIndex",param_1);
  return 6;
}

Memory Block Type

The type parameter indicates what kind of memory to allocate. Here is a mapping of type 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

Mask Value Description
0x10000 0x10000 Global. nG bit NOT set
0xFF00 0x800 B bit set. Sharable device memory.
0xFF00 0x2000 TEX[2] and TEX[0] bit set. Outer cache Write-back, Write-Allocate. Inner cache non-cachable.
0xFF00 0x4000 TEX[2] and B bit set. Outer cache non-cachable. Inner cache Write-back, Write-Allocate
0xFF00 0x8000 TEX[0] bit set. S bit unset. Outer and inner non-cachable. Not sharable.
0xFF00 0xD000 TEX[0] bit set. C,B bits set. Outer and inner Write-back, Write-Allocate.
0xFF 0x4 AP[2:0] = 5, XN=1. Privileged RO, User NA.
0xFF 0x5 AP[2:0] = 5. Privileged RX, User NA.
0xFF 0x6 AP[2:0] = 1, XN=1. Privileged RW, User NA.
0xFF 0x7 AP[2:0] = 1. Privileged RWX, User NA. (Never used, 3.60 0x80024B01)
0xFF 0x50 AP[2:0] = 7. Privileged RX, User RX.
0xFF 0x60 AP[2:0] = 3, XN=1. Privileged RW, User RW.
0xFF 0x40 AP[2:0] = 7, XN=1. Privileged RO, User RO.
Mask Value Name
0x0F000000 0x09000000 SceKernelUserCdram
0x0F000000 0x0A000000 SceKernelUserShared
0x0F000000 0x0B000000 SceKernelUserIO
0x0F000000 0x0C000000 SceKernelUserMain
0x0F000000 0x0D000000 SceKernelUserUncache
0x0F000000 0x0E000000 SceKernelUserCDialog
0x0F000000 0x0F000000 SceKernelUserCDialogNC

Available memory types

See also : Memory budget

type bits

mask
0x0000000F : only kernel
0x000000F0 : only user

RWXO bit
0 1 1 0
? R W X

RO type when both w bit and x bit are 0

memory device type(?)
mask : 0x00000F00
0x00000200 : SO
0x00000800 : DEVICE

memory cache type
mask : 0x0000F000
0x00002000 : No internal cache only
0x00004000 : No external cache only
0x00008000 : NORMAL_NC (uncache)
0x0000D000 : NORMAL (cache)

memory budget type
mask : 0x00F00000
0x00100000 : IO
0x00200000 : NORMAL(kernel:KD, user:GAME)
0x00300000 : maybe unused
0x00400000 : CDRAM
0x00500000 : GAME
0x00800000 : PHYCONT
0x00900000 : SHARED(userland only)
0x00A00000 : CDIALOG
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)
mask : 0xF0000000
0x00000000 : USER
0x10000000 : ROOT
0x20000000 : IO
0x30000000 : PHYCONT
0x40000000 : CDRAM
0x50000000 : CDRAM2
0x60000000 : TMP
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_RO_UNCACHE          0x09408040
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW_UNCACHE          0x09408060
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW                  0x09408060
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RWDATA              0x09408060

SCE_KERNEL_MEMBLOCK_TYPE_USER_DEVICE_RW                 0x0C200860
SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW                     0x0C208060
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE                0x0C208060
SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA_UNCACHE            0x0C208060
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_RWDATA                    0x0C20D060
SCE_KERNEL_MEMBLOCK_TYPE_USER_GAME_RW                   0x0C50D060
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW           0x0C80D060
SCE_KERNEL_MEMBLOCK_TYPE_USER_UNKNOWN_RW_UNCACHE        0x0CA08060
SCE_KERNEL_MEMBLOCK_TYPE_USER_UNKNOWN_RW                0x0CA0D060
SCE_KERNEL_MEMBLOCK_TYPE_USER_UNKNOWN2_RW               0x0CF0D060

SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW        0x0D808060

SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RO_UNCACHE        0x0E208040
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX_UNCACHE        0x0E208050
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW_UNCACHE        0x0E208060
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RO                0x0E20D040
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW                0x0E20D060


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

#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

memory allocate test

mem type mem size mem base
0x0C200860 0x200000 0x80100000
0x0C208060 0x200000 0x70000000
0x0C20D040 0x200000 0x85200000
0x0C20D060 0x200000 0x85200000
0x0C50D060 0x200000 0x85200000
0x0C80D060 0x200000 0x85200000
0x0CA08060 0x200000 0x70000000
0x0CA0D060 0x200000 0x85200000
0x0CF0D060 0x200000 error, Looks like a memory type to reserve a fairly large size memory
0x0D808060 0x200000 0x70000000
0x0E208040 0x200000 0x68000000
0x0E208050 0x200000 error, It seems that RX memory cannot be allocated from the user
0x0E208060 0x200000 0x68000000
0x0E20D040 0x200000 0xD0300000
0x0E20D060 0x200000 0xD0300000

Types to reverse

from 0.990:

CDIALOG:
SCE_KERNEL_MEMBLOCK_TYPE_CDIALOG_NC_R

FREE:
SCE_KERNEL_MEMBLOCK_TYPE_FREE

KERNEL:
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW

SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_DEVICE_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R

SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW

SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_CDIALOG_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_DEVICE_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_GAME_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_RX
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_SO_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW

SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_R

SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_R
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RW
SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RX

USER:
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX

SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_NC_RW

SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_DEVICE_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_IO_SO_RW

SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_KTMP_RW

SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_DEVICE_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_GAME_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RX
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_NC_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RX

SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RX
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RX
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RX
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_R
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RW
SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RX

SceSysmemForKernel

sceKernelGrowPhyMemPartForKernel

Version NID
0.990-3.60 0x6B3F4102

Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.

int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);

sceKernelGrowPhyMemPartWithFlagsForKernel

Version NID
0.990 not present
3.60 0x775AA5E3

Grows physical memory partition with flags.

int sceKernelGrowPhyMemPartWithFlagsForKernel(SceKernelPhyMemPart *pPhyMemPart, int flags, SceSize psize);

sceKernelGetGrownPhyMemPartSizeForKernel

Version NID
0.990 not present
3.60 0x4D809B47

This is a temp name.

Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.

int sceKernelGetGrownPhyMemPartSizeForKernel(void);

sceKernelAddressSpaceSetProcessForKernel

Version NID
0.990-3.60 0x2476B90F
int sceKernelAddressSpaceSetProcessForKernel(SceUID uid, SceUID pid);

sceKernelAddressSpaceChangeMMUContextForKernel

Version NID
0.931-3.60 0x653B0849
int sceKernelAddressSpaceChangeMMUContextForKernel(SceUID uid);

sceKernelAddressSpaceGetMMUL1InfoForKernel

Version NID
0.931 0x671A3444
3.60 not present
int sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID uid, const void *addr, void *pInfo);

sceKernelAddressSpaceGetMMUL2InfoForKernel

Version NID
0.931 0xCB6E1C80
3.60 not present
int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID uid, const void *addr, void *pInfo);

sceKernelAddressSpaceGetMMUL1AllInfoForKernel

Version NID
0.931 0x1A898F2E
3.60 not present
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x4008];
} SceKernelAddressSpaceMMUL1AllInfo;

int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID uid, SceKernelAddressSpaceMMUL1AllInfo *pInfo);

sceKernelAddressSpaceGetMMUL2AllInfoForKernel

Version NID
0.931 0x1E1AA29B
3.60 not present
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x400];
} SceKernelAddressSpaceMMUL2AllInfo;

int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID uid, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);

sceKernelGetPhyPartKernelForKernel

Version NID
0.931-3.60 0x4D38F861

return gpPhyPartKernel;

int sceKernelGetPhyPartKernelForKernel(void);

sceKernelPhyMemLowAllocForKernel

Version NID
0.931-3.60 0x5E169FEF
// type must be 0x10001, 0x10002 or 0x20001
int sceKernelPhyMemLowAllocForKernel(int type, uint size, uint alignment, void *out);

sceKernelPhyMemLowPA2VAForKernel

Version NID
0.931-3.60 0x0FD6B756
// type must be 0x10002
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);

sceKernelGetPhyMemLowInfoForKernel

Version NID
0.931-0.990 0x06A4DA6C
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);

sceKernelPhyMemLowFreeForKernel

Version NID
0.931-3.60 0x18B99FDD
// type must be 0x10001, 0x10002 or 0x20001
int sceKernelPhyMemLowFreeForKernel(int type);

sceGUIDtoClassForKernel

Version NID
0.990-3.60 0x66636970
SceClass *sceGUIDtoClassForKernel(SceUID uid);

SceSysmemForKernel_95ABFDC3

Version NID
0.990-3.60 0x95ABFDC3
int SceSysmemForKernel_95ABFDC3(uint32_t flags);

sceKernelRegisterClassForKernel

Version NID
0.990 0x11761B77

sceKernelAllocKernelHeapForKernel

Version NID
0.931-0.990 0x432EADA6
int sceKernelAllocKernelHeapForKernel(SceSize size);

sceUIDCreateEntryHeapForKernel

Version NID
0.990-3.60 0x19CAEF35
int sceUIDCreateEntryHeapForKernel(void);

sceUIDObjectSetClassForKernel

Version NID
0.931-0.990 0x226DE851
3.60 not present
int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);

sceGUIDGetEntryInfoAllForKernel

Version NID
0.990-3.60 0x2A79C51C
int sceGUIDGetEntryInfoAllForKernel(SceUID uid, void *vectors, uint32_t nVector, void *out);

sceGUIDNameForKernel

Version NID
0.990 0x250EE289
char *sceGUIDNameForKernel(SceUID uid);

sceGUIDRegisterForKernel

Version NID
0.990-3.60 0xAF42AAD5
int sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);

sceUIDRegisterForKernel

Version NID
0.931-0.990 0x59162CD7
3.60 not present

Calls sceGUIDRegisterForKernel.

int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);

SceSysmemForKernel_48D87E17

Version NID
0.990-3.60 0x48D87E17

sceKernelGetAddressSpaceMMUContextForKernel

Version NID
0.990-3.60 0xFBEF93AA
int sceKernelGetAddressSpaceMMUContextForKernel(SceUID uid, void *context);

sceKernelAllocSimpleMemBlockForKernel

Version NID
0.990-3.60 0xF81F4672
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);

sceKernelGetSimpleMemBlockBaseForKernel

Version NID
0.990-3.60 0x0A8D14EC
int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);

sceKernelGetMemBlockInfoSimpleForKernel

Version NID
0.990-3.60 0x2364A170
int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);

sceKernelAddressSpaceVARangeToPAVectorForKernel

Version NID
0.990-3.60 0xF7250E6C
int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID uid, const SceKernelVARange *vRange, SceKernelPAVector *pVector);

sceKernelCreatePhyMemPartForKernel

Version NID
0.931-3.60 0x2E36E0C4

Calls sceKernelCreatePhyMemPartByPbaseForKernel with pbase = 0.

int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart *pPhyMemPart);

sceKernelCreatePhyMemPartByPbaseForKernel

Version NID
0.931-3.60 0x63D83911
// type: 0x10000 for Lpddr2Main, 0x30000 for Cdram
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart *pPhyMemPart);

sceKernelDeletePhyMemPartForKernel

Version NID
0.931-3.60 0x2AEA9E09
int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);

sceKernelGetPhyMemPartAllForKernel

Version NID
0.931-3.60 0x2F6F9C2C
int sceKernelGetPhyMemPartAllForKernel(int param_1, int param_2, void *pCountInBuffer);

sceKernelGetPhyMemPartInfoForKernel

Version NID
0.931-0.990 0x67849418
3.60 not present
int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);

sceKernelGetPhyMemPartInfoByIDForKernel

Version NID
0.931-3.60 0xF4FA0575
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);

sceUIDDeleteEntryHeapForKernel

Version NID
0.990-3.60 0xF0C3FCFC
int sceUIDDeleteEntryHeapForKernel(SceUID uid);

sceGUIDUnregisterForKernel

Version NID
0.931-0.990 0xE79BBCF2
int sceGUIDUnregisterForKernel(SceUID uid);

sceGUIDGetEntryInfoClassForKernel

Version NID
0.990-3.60 0xE90CFD62
int sceGUIDGetEntryInfoClassForKernel(SceUID uid, int a2, void *vectors, int nVector, void *out);

sceKernelGetPhyPageResetForKernel

Version NID
0.990-3.60 0xEB350679
void *sceKernelGetPhyPageResetForKernel(void);

sceKernelFreePhyPageForKernel

Version NID
0.990-3.60 0x00BC5B4A
int sceKernelFreePhyPageForKernel(uint32_t a1, int pPage, uint32_t a3, uint32_t a4);

sceKernelNameHeapInsertForKernel

Version NID
0.990-3.60 0x08AB3DAE
int sceKernelNameHeapInsertForKernel(char *name, uint32_t flags, uint32_t *out);

sceGUIDKernelCreateForKernel

Version NID
0.990 0xE6FAD50A
3.60 not present

Create a GUID with default attribute (0x30000).

int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);

sceGUIDKernelCreateWithAttrForKernel

Version NID
0.990-3.60 0x53E1FFDE

Create a GUID with the specified attribute.

int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);

scePUIDKernelCreateWithAttrForKernel

Version NID
0.990 not present
3.60 0xDF0288D7

Temp name was sceKernelCreateUidObjForKernel.

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);

scePUIDReleaseObjectForKernel

Version NID
0.990-3.60 0x3FCA782B
int scePUIDReleaseObjectForKernel(SceUID pid, SceUID uid);

scePUIDGetInfoForKernel

Version NID
0.990 not present
3.60 0x12ED88AE
// pInfo size is 0x14 bytes
int scePUIDGetInfoForKernel(SceUID pid, SceUID uid, void *pInfo);

sceGUIDGetEntryForKernel

Version NID
3.60 0x45F2A59C

sceGUIDGetVisibilityLevelForKernel

Version NID
3.60 0xC69666C3

sceGUIDSetVisibilityLevelForKernel

Version NID
3.60 0xCB8D03C0

sceGUIDFindByNameForKernel

Version NID
3.60 0xCEBA8031

sceGUIDFindByNameAllForKernel

Version NID
3.60 0x4B5C85AC

sceGUIDGetPIDForKernel

Version NID
3.60 0xCF5A2311

sceGUIDSetCNOAForKernel

Version NID
3.60 0x8D6AF468

sceGUIDSetForKernel

Version NID
0.931-3.60 0xD7B323EB
int sceGUIDSetForKernel(SceUID uid, SceClass *pClass, const char *name, SceKernelObject *pObject);

sceUIDGetProcUIDVectorByClassForKernel

Version NID
0.990 0x51C08396
3.60 not present

sceUIDReferObjectWithLevelForKernel

Version NID
0.990 0xF79B52B2
3.60 not present
int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);

sceKernelPhysicalMemWriteForKernel

Version NID
0.931 0x4B86A751
3.60 not present
int sceKernelPhysicalMemWriteForKernel(void *dest, const void *src, SceSize size);

sceKernelPhysicalMemReadForKernel

Version NID
0.931-0.990 0xF96E3AE2
3.60 not present

Temp name was memcpy_from_paddr.

dest must be a vaddr and src must be a paddr. Return copied size on success.

int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);

sceKernelAllocPartitionMemBlockForKernel

Version NID
0.931-3.60 0x5FFE4B79

Temp name was sceKernelAllocSystemCallTableForKernel.

SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);

sceUIDEntryHeapGetInfoForKernel

Version NID
0.990 not present
3.60 0x686AA15C

sceUIDEntryHeapCloseAllPUIDForKernel

Version NID
0.931-3.60 0xFAF96C1F
int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID uid);

sceKernelNameHeapGetInfoForKernel

Version NID
0.990 not present
3.60 0xE443253B

sceKernelGetFixedHeapInfoByPointerForKernel

Version NID
0.990-3.60 0x219E90FD
// pObject is of size 0x30
// pObject first 4 bytes are structure size
int sceKernelGetFixedHeapInfoByPointerForKernel(void *pObject, SceKernelFixedHeapInfo *pInfo);

sceKernelGetHeapInfoByPointerForKernel

Version NID
0.990 not present
3.60 0x68451777
int sceKernelGetHeapInfoByPointerForKernel(void *pObject, SceKernelHeapInfo *pInfo);

sceKernelGetHeapInfoForKernel

Version NID
0.990-3.60 0x91733EF4
int sceKernelGetHeapInfoForKernel(SceUID uid, SceKernelHeapInfo *pInfo);

sceKernelFreeSimpleMemBlockForKernel

Version NID
0.990-3.60 0xA1FFA2C9

sceKernelAllocForKernel

Version NID
0.990-3.60 0xC0A4D2F3
3.65 0x85571907
void *sceKernelAllocForKernel(SceSize len);

sceKernelAllocWithOptForKernel

Version NID
3.60 0xA2CD1697
typedef struct SceAllocOpt {
    SceSize size;   // 0x14
    SceSize data04; // maybe len align?
    SceSize align;
    int data0C;
    int data10; 
} SceAllocOpt;

void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);

sceKernelFreeForKernel

Version NID
0.990-3.60 0xABAB0FAB
3.65 0x4233C16D
void sceKernelFreeForKernel(void *ptr);

sceGUIDGetObjectWithClassForKernel

Version NID
0.990-3.60 0x7ABFA9A7

Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.

int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);

SceSysmemForKernel_C38D61FC

Version NID
0.990 0xC38D61FC

Calls SceSysmemForDriver_89A44858.

sceUIDGetObjectForKernel

Version NID
0.931-0.990 0xC4893914

Calls sceGUIDGetObjectForDriver.

int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);

SceSysmemForKernel_620E00E7

Version NID
0.990 0x620E00E7
SceSysmemForKernel_620E00E7(int a1, int global_id, _DWORD *out);

SceSysmemForKernel_7C797940

Version NID
0.990 0x7C797940

Calls SceSysmemForKernel_620E00E7 or sceGUIDReferObjectForDriver.

sceKernelRxMemcpyKernelToUserForPidForKernel

Version NID
0.990-3.60 0x30931572

Unrestricted memcpy to the virtual address space for process pid. Both dst and src must be in the address space of pid but src 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.

int sceKernelRxMemcpyKernelToUserForPidForKernel(SceUID pid, void * dst, const void *src, SceSize size);

sceUIDtoObjectForKernel

Version NID
0.990-3.60 0xED221825

Calls SceSysmem#sceGUIDGetObjectForDriver.

SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);

sceGUIDOpenByGUIDForKernel

Version NID
0.990-3.60 0xCF53EEE4

sceGUIDGetUIDVectorByClassForKernel

Version NID
0.931-3.60 0xEC7D36EF

sceUIDGetUIDVectorByClassForKernel

Version NID
0.931-0.990 0xA2F03233
3.60 not present

It is simply a wrapper for sceGUIDGetUIDVectorByClassForKernel.

sceKernelCreateAddressSpaceForKernel

Version NID
0.990-3.60 0x4A3737F0
3.65 0x8EE89D2C
// flag: 0x10000001
// name: maybe titleid
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 flag, SceKernelAddressSpace *pAS);

sceKernelDeleteAddressSpaceForKernel

Version NID
0.931-3.60 0xF2D7FE3A
int sceKernelDeleteAddressSpaceForKernel(SceUID guid);

sceKernelAddressSpaceFreeAllMemBlockForKernel

Version NID
0.931-3.60 0x89CE1F31
int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);

sceKernelAddressSpaceSetPhyMemPartForKernel

Version NID
0.931-3.60 0x67955EE9
int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID uid, int a2, SceKernelPhyMemPart *pPhyMemPart);

sceKernelAddressSpaceUnmapForKernel

Version NID
0.931-3.60 0xCE72839E
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int unk, void *vbase, SceSize size);

3.60:

int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int flags, int unk, uint32_t paddr, SceSize size);

Example: in SceSysStateMgr:

sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);

3.60

sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);

sceKernelAddressSpaceVAtoPAForKernel

Version NID
0.990-3.60 0xF2179820
int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, uint32_t mode, void *pVA, void **pPA);

sceKernelAddressSpaceGetMemoryTypeForKernel

Version NID
0.990-3.60 0xCC7BB240
int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);

sceKernelFindClassByNameForKernel

Version NID
3.60 0x62989905
int sceKernelFindClassByNameForKernel(const char *name, SceClass **class);

sceKernelGetMemBlockTypeForKernel

Version NID
3.60 0x289BE3EC
/***
 * Gets the memory block type of a memory block
 *
 * @param[in] uid - SceUID of the memory block
 * @param[out] type - Type of the memory block identified by uid
 *
 * @return 0 on success, < 0 on error.
*/
int sceKernelGetMemBlockTypeForKernel(SceUID uid, unsigned int *type);

sceKernelGetUidHeapClassForKernel

Version NID
3.60 0x4CCA935D
SceClass *sceKernelGetUidHeapClassForKernel(void);

sceKernelGetUidMemBlockClassForKernel

Version NID
3.60 0xAF729575
SceClass *sceKernelGetUidMemBlockClassForKernel(void);

sceKernelGetUidDLinkClassForKernel

Version NID
0.990-3.60 0xC105604E
SceClass *sceKernelGetUidDLinkClassForKernel(void);

SceSysmemForKernel_F8E95A5A

Version NID
0.990-3.60 0xF8E95A5A

Certainly returns address to a structure.

int SceSysmemForKernel_F8E95A5A(void);

SceSysmemForKernel_54E85275

Version NID
0.990-1.50 not present
3.60 0x54E85275

Uses result from SceSysmem#SceSysmemForKernel_F8E95A5A.

// some_struct comes from SceSysmemForKernel_F8E95A5A
// out_struct size is 0xB0 bytes
int SceSysmemForKernel_54E85275(void *some_struct, void *out_struct);

SceSysmemForKernel_7BD56D6D

Version NID
0.990-1.50 not present
3.60 0x7BD56D6D

Used by SceProcessmgr.

int SceSysmemForKernel_7BD56D6D(SceUID guid, const char *name);

SceSysmemForKernel_9C7B62AB

Version NID
0.990-3.60 0x9C7B62AB
// name max length is 31 characters
int SceSysmemForKernel_9C7B62AB(const char *name, SceUInt32 flag);

SceSysmemForKernel_153A08A0

Version NID
0.990-3.60 0x153A08A0

Calls sceKernelCpuAtomicAddAndGet32ForDriver to increment by 1 value at addr + 0x94.

int SceSysmemForKernel_153A08A0(void *addr);

SceSysmemForDriver

sceUIDGetDefaultClassForDriver

Version NID
0.931-0.990 0xFE28F5EB
3.60 not present
SceClass *sceUIDGetDefaultClassForDriver(void);

sceUIDtoClassForDriver

Version NID
0.990 0x65B9B393
3.60 not present

Calls sceGUIDtoClassForKernel.

SceClass *sceUIDtoClassForDriver(SceUID uid);

scePUIDGetClassForDriver

Version NID
0.990-3.60 0xE9728A12

Temp name was sceKernelGetClassForPidForUidForDriver.

int scePUIDGetClassForDriver(SceUID pid, SceUID uid, SceClass **ppClass);

sceGUIDGetClassForDriver

Version NID
0.990-3.60 0xC74B0152

Temp name was sceKernelGetClassForUidForDriver.

int sceGUIDGetClassForDriver(SceUID uid, SceClass **ppClass);

sceUIDClassInitForDriver

Version NID
0.931-0.990 0xE6D75E99
3.60 not present
int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);

add_heap

Version NID
0.990 0xB800123C
3.60 not present
int add_heap(SceUID uid, const char *name, SceClass *class);

sceKernelIsSubclassForDriver

Version NID
0.990 0x6484D03E
3.60 not present
SceBool sceKernelIsSubclassForDriver(SceClass *parentClass, SceClass *class);

sceGUIDNameForDriver

Version NID
0.990 0xB2BB6216
3.60 not present
char *sceGUIDNameForDriver(SceUID id);

sceKernelGetMemBlockAllocSizeForDriver

Version NID
0.990 0x63E5754B
3.60 not present
int sceKernelGetMemBlockAllocSizeForDriver(SceUID id, SceSize *size);

sceUIDGetClassInfoAllForDriver

Version NID
0.990 0x3EF32C6C
3.60 not present
int sceUIDGetClassInfoAllForDriver(SceClassInfo_0990 *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);

sceUIDCloseForDriver

Version NID
0.990 0x32C5F628
3.60 not present

if (a2 & 0x40000000) == 0 calls sceGUIDCloseForDriver else scePUIDCloseForDriver.

int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);

SceSysmemForDriver_F09A7D09

Version NID
0.990 0xF09A7D09
3.60 not present

Calls sceGUIDCloseForDriver.

int SceSysmemForDriver_F09A7D09(SceUID uid);

Switch TTB For PID

Version NID
1.69 0x6F2ACDAE
3.60 not present

Changes the TTBR to point to the tables for a given PID.

int switch_ttb_for_pid(SceUID pid);

sceKernelAllocHeapMemoryForDriver

Version NID
0.931-3.60 0x7B4CB60A

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

Calls sceKernelAllocHeapMemoryWithOptionForDriver with a3 = 0.

void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);

sceKernelAllocHeapMemoryFromGlobalHeapForDriver

Version NID
3.60 0x7750CEA7

Calls sceKernelAllocHeapMemoryForDriver with uid = -1 (global heap uid).

void* sceKernelAllocHeapMemoryFromGlobalHeapForDriver(SceSize size);

sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver

Version NID
0.990-3.60 0x0B4ED16A

Calls sceKernelAllocHeapMemoryWithOptionForDriver with uid = -1 (global heap uid).

void* sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelAllocHeapMemoryWithOptForDriver

Version NID
3.60 0xB415B5A8

Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.

Same as sceKernelAllocHeapMemoryForDriver but uses pOpt.

void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelAllocHeapMemoryWithOptionForDriver

Version NID
0.990-3.60 0x49D4DD9B

Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.

Same as sceKernelAllocHeapMemoryForDriver but uses pOpt.

void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelAllocMemBlockWithInfoForDriver

Version NID
0.990-3.60 0xD44F464D

Temp name was sceKernelAllocMemBlockExtForDriver.

SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);

sceKernelAllocMemBlockForDriver

Version NID
0.931-3.60 0xC94850C9

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 type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW.

To allocate a block of memory with a specific physical address, specify type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW or type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW, pOpt->attr = 2, and pOpt->paddr = physical address.

To allocate a block of memory that is kernel executable, specify type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX.

To allocate a block of memory that is physically contiguous, specify type = 0x30808006, pOpt->attr = 0x200004 and an alignment to pOpt->alignment.

To allocate a block of memory inside the CDRAM, specify type = 0x40404006.

SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelAllocMemBlockForDebuggerForDriver

Version NID
0.940-1.50 0x59F3159C

Same as sceKernelAllocMemBlockForDriver but authorize null pOpt.

SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelCreateClassForDriver

Version NID
3.60 0x61317102
int sceKernelCreateClassForDriver(SceClass *cls, const char *name, struct SceClass *uid_class, size_t item_size, SceClassCallback create, SceClassCallback destroy);

sceKernelCreateHeapForDriver

Version NID
0.931-3.60 0x9328E0E8

The heap pool is thread safe.

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;

// pOpt can be NULL
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);

sceUIDKernelCreateForDriver

Version NID
0.990 0x7FC849B1
3.60 not present

Calls sceGUIDKernelCreateForKernel.

Create a UID with default attribute (0x30000).

int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);

sceUIDKernelCreate2ForDriver

Version NID
0.990 not present
3.60 0x56A13E90

Temp name was sceKernelCreateUidObj2ForDriver.

Create a UID with default attribute (0x30000).

SceUID sceUIDKernelCreate2ForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);

sceGUIDCreateForDriver

Version NID
0.990-3.60 0x89A44858

Temp name was sceKernelCreateUidObjForUidForDriver.

Create a GUID with default attribute (0x30000) for the specified UID.

SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID uid, SceKernelObject **ppEntry);

scePUIDOpenByGUIDForDriver

Version NID
0.931-3.60 0xBF209859

Temp name was sceKernelCreateUserUidForDriver.

SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID uid);

scePUIDOpenByGUIDWithFlagsForDriver

Version NID
0.990-3.60 0xCED1547B

Temp name was sceKernelCreateUserUidForClassForDriver.

SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);

scePUIDOpenByNameForDriver

Version NID
0.931-3.60 0x513B9DDD

Temp name was sceKernelCreateUserUidForNameForDriver.

SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);

scePUIDOpenByNameWithClassForDriver

Version NID
0.931-3.60 0x8DA0BCA5
SceUID scePUIDOpenByNameWithClassForDriver(SceUID pid, const char *name, SceClass *cls);

sceKernelDeleteHeapForDriver

Version NID
0.940-3.60 0xD6437637
int sceKernelDeleteHeapForDriver(SceUID uid);

sceGUIDCloseForDriver

Version NID
0.990-3.60 0x047D32F2

Temp name was sceKernelDeleteUidForDriver.

int sceGUIDCloseForDriver(SceUID uid);

scePUIDCloseForDriver

Version NID
0.990-3.60 0x84A4AF5E

Temp name was sceKernelDeleteUserUidForDriver.

int scePUIDCloseForDriver(SceUInt32 flag_or_addr_or_pid, SceUID uid);

sceKernelGetMemBlockMemtypeByAddrForDriver

Version NID
0.990-3.60 0xF3BBE2E1

Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.

SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);

sceKernelFindMemBlockByAddrForDriver

Version NID
0.990-3.60 0x8A1742F6
SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);

sceKernelFindProcMemBlockByAddrForDriver

Version NID
0.990-3.60 0x857F1D5A

Temp name was sceKernelFindMemBlockByAddrForPidForDriver.

SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);

sceKernelFindMemBlockForDriver

Version NID
3.57 not present, added on 3.60
3.60 0x9C78064C
SceUID sceKernelFindMemBlockForDriver(int flags, void *addr, SceSize size);

sceKernelFindMemBlockProcForDriver

Version NID
3.60 0x9F6E45E3

Temp name was sceKernelFindMemBlockForPidForDriver.

SceUID sceKernelFindMemBlockProcForDriver(SceUID pid, int flags, void *addr, SceSize size);

sceKernelFirstDifferentBlock32UserForDriver

Version NID
3.60 0xBDA6E42B
int sceKernelFirstDifferentBlock32UserForDriver(unsigned int *ptr, int value, int byte_size);

sceKernelFirstDifferentBlock32UserForPidForDriver

Version NID
1.69-3.60 0x8334454F

Looks for an integer in userspace.

int sceKernelFirstDifferentBlock32UserForPidForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);

sceKernelFirstDifferentBlock64UserForDriver

Version NID
3.60 0xBB3B02C2
int sceKernelFirstDifferentBlock64UserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);

sceKernelFirstDifferentBlock64UserForPidForDriver

Version NID
3.60 0xE83855FD
int sceKernelFirstDifferentBlock64UserForPidForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);

sceKernelFreeHeapMemoryForDriver

Version NID
0.990-3.60 0x3EBCE343

Temp name was sceKernelMemPoolFreeForDriver.

int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);

sceKernelFreeHeapMemoryFromGlobalHeapForDriver

Version NID
3.60 0xFB817A59
int sceKernelFreeHeapMemoryFromGlobalHeapForDriver(void *ptr);

sceKernelFreeMemBlockForDriver

Version NID
3.60 0x009E1C61
int sceKernelFreeMemBlockForDriver(SceUID uid);

sceKernelGetMemBlockPARangeForDriver

Version NID
0.990-3.60 0x98C15666

Previous name was sceKernelGetMemBlockAddrPairForUidForDriver

Returns the paddr and size (pRange) of the memory block if it is physically continuous.

int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);

sceKernelGetMemBlockBaseForDriver

Version NID
0.990-3.60 0xA841EDDA
/**
 * @brief Get mapped base address of memory block.
 *
 * Get base address of memory block.
 * @param[in]	uid		block id
 * @param[out]	ppBase		base address of memory block
 * @retval	SCE_OK		success
 * @retval	<SCE_OK		Error
 */
int sceKernelGetMemBlockBaseForDriver(SceUID uid, void **ppBase);

sceKernelGetMemBlockVBaseForDriver

Version NID
3.60 0xB81CF0A3

Wrongly named sceKernelGetMemBlockKernelPageForDriver.

int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);

sceKernelGetMemBlockMappedBaseForDriver

Version NID
3.60 0x0B1FD5C3
int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);

sceKernelGetMemBlockPAVectorForDriver

Version NID
0.990-3.60 0x19A51AC7

Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.

int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pVector);

scePUIDGetEntryHeapNameForDriver

Version NID
0.990-3.60 0x09896EB7

Temp name was sceKernelGetNameForPidByUidForDriver. Real name might be scePUIDGetEntryHeapNameForDriver.

int scePUIDGetEntryHeapNameForDriver(SceUID pid, SceUID uid, char **pName);

sceKernelGetNameForUid2ForDriver

Version NID
3.60 0xE655852F
const char* sceKernelGetNameForUid2ForDriver(SceUID uid);

sceKernelGetNameForUidForDriver

Version NID
3.60 0xA78755EB
int sceKernelGetNameForUidForDriver(SceUID uid, char **pName);

sceUIDtoObjectForDriver

Version NID
0.990 0xAB7AC3D1

Calls sceUIDtoObjectForKernel.

SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);

sceGUIDGetObjectForDriver

Version NID
0.990-3.60 0x0FC24464

Temp name was sceKernelGUIDGetObjectForDriver.

int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);

scePUIDGetObjectForDriver

Version NID
0.990-3.60 0xFE6D7FAE

Temp name was sceKernelGetObjectForPidForUidForDriver.

int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);

sceGUIDReferObjectForDriver

Version NID
3.60 0x0F5C84B7

Temp name was sceKernelGetObjectForUidForDriver.

int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);

sceGUIDReferObjectWithLevelForDriver

Version NID
0.990 not present
3.60 0xF6DB54BA

Temp name was sceKernelGetObjectForUidForAttrForDriver.

int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);

sceGUIDReferObjectWithClassAttrForDriver

Version NID
0.990-3.60 0x77066FD1

Temp name was sceKernelGetObjectForUidForClassForAttrForDriver.

int sceGUIDReferObjectWithClassAttrForDriver(SceUID uid, SceClass *pClass, SceUInt32 attr, SceKernelObject **pEntry);

sceGUIDReferObjectWithClassForDriver

Version NID
0.990-3.60 0x00ED6C14

Temp name was sceKernelGetObjForUidForDriver.

int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);

sceGUIDReferObjectWithSubclassForDriver

Version NID
0.990-3.60 0x72A98D17

Temp name was sceKernelGetObjectForUidForClassTreeForDriver.

int sceGUIDReferObjectWithSubclassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);

sceKernelVAtoPAForDriver

Version NID
0.990-3.60 0x8D160E65

Temp name was sceKernelGetPaddrForDriver.

This will write the physical address for a virtual address pVA to memory pointed to by pPA.

Returns <0 on error, values >=0 indicate success.

int sceKernelVAtoPAForDriver(void *pVA, void **pPA);

sceKernelProcVAtoPAForDriver

Version NID
0.990 0xC51934BD
int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);

sceKernelProcModeVAtoPAForDriver

Version NID
0.990-3.60 0x61A67D32

Temp name was sceKernelGetPaddrForPidForDriver.

int sceKernelProcModeVAtoPAForDriver(SceUID pid, uint32_t mode, void *pVA, void **pPA);

sceKernelVARangeToPAVectorForDriver

Version NID
0.931-3.60 0xE68BEEBD

Temp name was sceKernelGetPaddrListForDriver.

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

int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);

sceKernelGetPaddrListForLargePageForDriver

Version NID
3.60 0x08A8A7E8
int sceKernelGetPaddrListForLargePageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);

sceKernelGetPaddrListForSmallPageForDriver

Version NID
3.60 0x16844CE6
int sceKernelGetPaddrListForSmallPageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pVector);

sceKernelVARangeToPARangeForDriver

Version NID
0.940-3.60 0xAE36C775

Temp name was sceKernelGetPaddrPairForDriver.

int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);

sceKernelGetPaddrPairForLargePageForDriver

Version NID
3.60 0x32257A24
int sceKernelGetPaddrPairForLargePageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);

sceKernelGetPaddrPairForSmallPageForDriver

Version NID
3.60 0xB3575090
int sceKernelGetPaddrPairForSmallPageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);

sceKernelVAtoPABySWForDriver

Version NID
0.990-3.60 0x65419BD3

Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver. Wrong name was sceKernelAddressSpaceVAtoPABySWForDriver.

int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);

sceKernelGetPidContextForDriver

Version NID
3.60 0x2ECF7944
struct SceKernelProcessContext
{
  SceUInt32 TTBR1;
  SceUInt32 DACR;
  SceUInt32 CONTEXTIDR;
};

int sceKernelGetPidContextForDriver(SceUID pid, SceKernelProcessContext **ctx);

sceKernelGetUidClassForDriver

Version NID
3.60 0x85336A1C
SceClass *sceKernelGetUidClassForDriver();

sceKernelGetUnknownValidPhysAddressSpaceForDriver

Version NID
3.60 0xC9928F5E
int sceKernelGetUnknownValidPhysAddressSpaceForDriver(void **start, void **end);

sceKernelIsPaddrWithinSameSectionForUidForDriver

Version NID
3.60 0xF4AD89D8
int sceKernelIsPaddrWithinSameSectionForUidForDriver(SceUID pid, int permission_type, void *vaddr, unsigned int len);

sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver

Version NID
3.60 0xA7C0D1FC
int sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver(void *vaddr);

scePUIDtoGUIDWithClassForDriver

Version NID
0.990 not present
3.60 0x184172B1

Temp name was sceKernelKernelUidForUserUidForClassForDriver.

SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID uid, SceClass *pClass);

scePUIDtoGUIDForDriver

Version NID
0.990-3.60 0x45D22597

Temp name was sceKernelKernelUidForUserUidForDriver.

Process UID to Global UID.

SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID uid);

sceKernelPartitionMapMemBlockForDriver

Version NID
0.990-3.60 0x58D21746

Temp name was sceKernelMapBlockUserVisibleForDriver.

int sceKernelPartitionMapMemBlockForDriver(SceUID uid);

sceKernelMapBlockUserVisibleWithFlagForDriver

Version NID
3.60 0x04059C4B
int sceKernelMapBlockUserVisibleWithFlagForDriver(SceUID uid, int some_flag);

sceKernelUserMapForDriver

Version NID
0.990-3.60 0x278BC201

Wrongly named sceKernelMapUserBlockDefaultTypeForDriver.

Assigns type 0.

int sceKernelUserMapForDriver(char *name, int permission, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);

sceKernelProcUserMapForDriver

Version NID
3.60 0x0091D74D

Wrongly named sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly real name.

Assigns type 0.

int sceKernelProcUserMapForDriver(SceUID pid, const char *name, int permission, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);

sceKernelMapUserBlockForDriver

Version NID
0.990 not present
1.50-3.60 0x7D4F8B5F

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

// this signature is for FW 1.50-1.69
int 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);

sceKernelDecRefCountMemBlockForDriver

Version NID
0.990-3.60 0xF50BDC0C

Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.

int sceKernelDecRefCountMemBlockDriver(SceUID uid);

sceKernelMemBlockGetInfoExForDriver

Version NID
3.60 0x24A99FFF
int sceKernelMemBlockGetInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *info);

sceKernelGetMemBlockInfoForDriver

Version NID
0.990-3.60 0xA73CFFEF

Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.

int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);

sceKernelMemBlockGetSomeSizeForDriver

Version NID
3.60 0x78337B62
int sceKernelMemBlockGetSomeSizeForDriver(SceUID uid, int *some_size);

sceKernelIncRefCountMemBlockForDriver

Version NID
0.990-3.60 0xEAF3849B

Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.

int sceKernelIncRefCountMemBlockForDriver(SceUID uid);

sceKernelUserUnmapForDriver

Version NID
0.990-3.60 0x00575B00

Temp name was sceKernelMemBlockReleaseForDriver.

int sceKernelUserUnmapForDriver(SceUID uid);

sceKernelMemBlockType2MemtypeForDriver

Version NID
0.931-3.60 0x20C811FA
int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);

sceKernelMemBlockTypeGetPrivilegesForDriver

Version NID
3.60 0x6A0792A3
int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);

sceKernelMemBlockTypeGetUnknownForDriver

Version NID
0.990-3.60 0xCB0F3A33
int sceKernelMemBlockTypeGetUnknownForDriver(SceKernelMemBlockType type);

sceKernelMemRangeReleaseForDriver

Version NID
3.60 0x75C70DE0
int sceKernelMemRangeReleaseForDriver(void *addr, SceSize size);

sceKernelMemRangeReleaseForPidForDriver

Version NID
3.60 0xA8525B06
int sceKernelMemRangeReleaseForPidForDriver(SceUID pid, void *addr, SceSize size);

sceKernelMemRangeReleaseWithPermForDriver

Version NID
3.60 0x22CBE925

Decrease references to pages.

int sceKernelMemRangeReleaseWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);

sceKernelMemRangeRetainForDriver

Version NID
3.60 0x59A4402F
int sceKernelMemRangeRetainForDriver(void *addr, SceSize size);

sceKernelMemRangeRetainForPidForDriver

Version NID
3.60 0x659586BF
int sceKernelMemRangeRetainForPidForDriver(SceUID pid, void *addr, SceSize size);

sceKernelMemRangeRetainWithPermForDriver

Version NID
3.60 0xBC0A1D60

Increase references to pages.

int sceKernelMemRangeRetainWithPermForDriver(SceKernelMemoryRefPerm perm, void *addr, SceSize size);

sceKernelRoMemcpyKernelToUserForPidForDriver

Version NID
0.990-1.69 0x571D2739
3.60 not present
int sceKernelRoMemcpyKernelToUserForPidForDriver(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelCopyToUserForDriver

Version NID
0.990-3.60 0x6D88EF8A

Temp name was sceKernelMemcpyKernelToUserForDriver.

int sceKernelCopyToUserForDriver(void *dst, const void *src, SceSize size);

sceKernelProcCopyToUserForDriver

Version NID
0.990-3.60 0x6B825479

Temp name was sceKernelMemcpyKernelToUserForPidForDriver. Possible name is sceKernelCopyoutProcForDriver.

This will not crash on invalid user pointers, but instead return error.

int sceKernelProcCopyToUserForDriver(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelReadUserForDriver

Version NID
0.990 0xE08F3967
3.60 not present
int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);

sceKernelCopyFromUserForDriver

Version NID
0.931-3.60 0xBC996A7A

Temp name was sceKernelMemcpyUserToKernelForDriver.

int sceKernelCopyFromUserForDriver(void *dst, const void *src, SceSize size);

sceKernelProcCopyFromUserForDriver

Version NID
0.990-3.60 0x605275F8

Temp name was sceKernelMemcpyUserToKernelForPidForDriver.

int sceKernelProcCopyFromUserForDriver(SceUID pid, void *dst, void *src, SceSize size);

sceKernelUserCopyForDriver

Version NID
0.990 not present
1.50-3.60 0x1BD44DD5

Temp name was sceKernelMemcpyUserToUserForDriver.

int sceKernelUserCopyForDriver(void *dst, const void *src, SceSize size);

sceKernelProcUserCopyForDriver

Version NID
0.990 not present
1.50-3.60 0x8E086C33

Temp name was sceKernelMemcpyUserToUserForPidForDriver.

int sceKernelProcUserCopyForDriver(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelUserStrnlenForDriver

Version NID
0.940-0.990 0xFF06898A
1.50-3.60 not present
SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);

sceKernelStrnlenUserForDriver

Version NID
0.990 not present
1.50-3.60 0xB429D419
SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);

sceKernelProcStrnlenUserForDriver

Version NID
0.990 not present
1.50-3.60 0x9929EB07
SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);

sceKernelProcUserStrcpyForDriver

Version NID
0.990-1.50 0xEBCB3970
3.60 not present
int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);

sceKernelStrncpyFromUserSpecialForDriver

Version NID
0.990-1.50 0x7440BCDA
3.60 not present
int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);

sceKernelStrncpyToUserSpecialForDriver

Version NID
0.990-1.50 0x369355F1
3.60 not present
int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);

sceKernelUserStrncpyForDriver

Version NID
0.940-0.990 0xE6D5EFE4
1.50-3.60 not present

Return 0 on success.

int sceKernelUserStrncpyForDriver(char *dst, const char *src, SceSize maxlen);

sceKernelStrncpyFromUserForDriver

Version NID
0.990 not present
1.50-3.60 0xDB3EC244
int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);

sceKernelProcStrncpyFromUserForDriver

Version NID
0.990 not present
1.50-3.60 0x75AAF178
int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);

sceKernelStrncpyToUserForDriver

Version NID
0.990 not present
1.50-3.60 0x80BD6FEB
int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);

sceKernelProcStrncpyToUserForDriver

Version NID
0.990 not present
1.50-3.60 0xFED82F2D

Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.

int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);

sceUIDOpenByNameForDriver

Version NID
0.931-0.990 0x796881D6
3.60 not present

Calls sceGUIDOpenByNameForDriver.

SceUID sceUIDOpenByNameForDriver(const char *name);

sceGUIDOpenByNameForDriver

Version NID
0.931-3.60 0xD76E7452

Temp name was sceKernelOpenUidForNameForDriver.

SceUID sceGUIDOpenByNameForDriver(const char *name);

sceKernelRemapMemBlockForDriver

Version NID
0.931-1.05 0x8D332AE1
1.50-3.60 not present

This can be used to remap RW memory as RX. To do this, first allocate a memory block of type SCE_KERNEL_MEMB