SceSysmem

From Vita Development Wiki
Jump to navigation Jump to search

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

Module

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

Version World Privilege
1.50-3.61 Non-secure Kernel
1.69-1.80 Secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
1.50-3.61 SceSysmemForKernel Non-secure Kernel 0x63A519E5
3.63-3.65 SceSysmemForKernel Non-secure Kernel 0x02451F0F
1.50-3.65 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.65 SceDipsw Non-secure User 0xB36D5922
1.50-3.65 SceDipswForDriver Non-secure Kernel 0xC9E26388
1.50-3.61 SceUartForKernel Non-secure Kernel 0xC03DBE40
3.63-3.65 SceUartForKernel Non-secure Kernel 0x1CCD9BA3
1.50-3.65 SceCpu Non-secure User 0x45265161
1.50-3.61 SceCpuForKernel Non-secure Kernel 0x54BF2BAB
3.63-3.65 SceCpuForKernel Non-secure Kernel 0xA5195D20
1.50-3.65 SceCpuForDriver Non-secure Kernel 0x40ECDB0E
1.50-1.69 SceSysclibForKernel Non-secure Kernel 0x24878615
1.80 SceSysclibForKernel Non-secure Kernel Removed
1.50-3.65 SceSysclibForDriver Non-secure Kernel 0x7EE45391
1.50-3.65 SceSysrootForKernel Non-secure Kernel 0x3691DA45
1.50-3.65 SceSysrootForDriver Non-secure Kernel 0x2ED7F97A
1.50-3.65 SceKernelUtilsForDriver Non-secure Kernel 0x496AD8B4
1.50-1.69 SceZlibForDriver Non-secure Kernel 0xE241534E
1.80 SceZlibForDriver Non-secure Kernel Moved to SceSblPostSsMgr
1.50-3.65 SceKernelSuspendForDriver Non-secure Kernel 0x7290B21C
1.50-3.65 SceQafMgrForDriver Non-secure Kernel 0x4E29D3B6
1.50-3.65 ScePmMgrForDriver Non-secure Kernel 0xF13F32F9
1.50-3.65 SceSblAIMgrForDriver Non-secure Kernel 0xFD00C69A
1.50-3.65 SceProcEventForDriver Non-secure Kernel 0x887F19D0
1.50-3.65 SceDebugLed Non-secure User 0xAE004C0A
1.50-3.65 SceDebugLedForDriver Non-secure Kernel 0x7BC05EAD
1.50-3.61 SceDebugForKernel Non-secure Kernel 0x88C17370
3.63-3.65 SceDebugForKernel Non-secure Kernel 0x13D793B7
1.50-3.65 SceDebugForDriver Non-secure Kernel 0x88758561
1.69-3.60 SceSysmemForTZS Secure Kernel 0x08680060
1.69-3.60 SceDipswForTZS Secure Kernel 0x9DBF584C
1.80-3.60 SceUartForTZS Secure Kernel 0xA1D740D7
1.80-3.60 SceDebugForTZS Secure Kernel 0x028FFADB
1.69-3.60 SceCpuForTZS Secure Kernel 0xC516B23E
1.69-3.60 SceSysclibForTZS Secure Kernel 0xC839BB78
1.69-3.60 SceSysrootForTZS Secure Kernel 0xFEFF641D
1.69-3.60 SceQafMgrForTZS Secure Kernel 0x637069DD
1.69-3.60 ScePmMgrForTZS Secure Kernel 0x27F1AFD8
1.69-3.60 SceSblAIMgrForTZS Secure Kernel 0x60D19047

Types

typedef struct SceKernelVARange SceKernelVARange;
typedef struct SceKernelBootArgs SceKernelBootArgs;
typedef struct SceSysrootProcessHandler SceSysrootProcessHandler;
typedef struct SceSysrootModulemgrHandlers SceSysrootModulemgrHandlers;
typedef struct SceSysrootForKernel_D29BCA77_struct SceSysrootForKernel_D29BCA77_struct;
typedef struct SceSysrootForKernel_733C243E_struct SceSysrootForKernel_733C243E_struct;

typedef SceUInt32 SceCachedSecureModule;
#define SCE_CACHED_SECURE_MODULE_GCAUTHMGR 0            // os0:sm/gcauthmgr_sm.self
#define SCE_CACHED_SECURE_MODULE_RMAUTH 1               // os0:sm/rmauth_sm.self
#define SCE_CACHED_SECURE_MODULE_ENDEC_W_PORTABILITY 2  // os0:sm/encdec_w_portability_sm.self

typedef struct SceCachedSecureModuleInfo { // size is 0xC
	SceSize size;     // Size of this structure
	void *pSelfData;  // Virtual address of the SM
	SceSize selfSize; // Size of the SM
} SceCachedSecureModuleInfo;

#define SCE_SYSROOT_INIT_CALLBACK_MAX_FUNC (9)
#define SCE_SYSROOT_INIT_CALLBACK_MAX_SLOT (8)

typedef struct SceUIDSysrootObject { // size is 0x41C on FW 3.60
	void *object;
	SceClass *sce_class;
	SceSize size; // Size of this structure
	SceUInt32 magic1;
	int cpu_intr;
	SceSize boot_alloc_memory_size; // 0x400
	void *boot_alloc_memory; // used by boot time malloc
	int unk_0x1C; // 0x4
	void *unk_0x20; // size is 0x80-bytes
	SceUInt32 boot_flags; // 0x10 for coldboot, 0x1 for secure state
	SceUInt32 status;
	SceCorelockContext corelock_context;

	// start ModulePrivate
	int unk_0x34;   // ex:0
	int unk_0x38;   // ex:0
	void *unk_0x3C; // size is 4 byte
	void *unk_0x40; // Related to SceHeap. Size is 0xDC byte.
	SceExcpmgrData *ExcpmgrData; // Same as value returned by sceKernelGetExcpDataForKernel
	void *unk_0x48; // ?SceKernelIntrMgr data VA?
	void *unk_0x4C;
	void *unk_0x50;
	int unk_0x54;   // ex:0
	void *unk_0x58;
	int unk_0x5C;   // ex:0
	int unk_0x60;   // ex:0
	int unk_0x64;   // ex:0
	int unk_0x68;   // Used by Tzs SceSblSmsched
	// end ModulePrivate

	SceKblParam *kbl_param;
	SceKernelBootArgs *boot_args;
	SceUInt32 soc_revision;
	SceUInt32 unk_0x78; // ex:0
	SceUInt32 soc_revision2;
	SceUInt32 model_info;
	SceUInt32 model_capability;

	void *longtime5base;

	int cpu_intr_for_init_callback;
	SceUInt32 init_callback_registable_base_number;
	struct {
		int (* callback)(int a1, void *args);
		void *args;
	} init_callback_slot[SCE_SYSROOT_INIT_CALLBACK_MAX_FUNC][SCE_SYSROOT_INIT_CALLBACK_MAX_SLOT];

	int (* sceKernelSysrootThreadMgrStartAfterProcess)(void);
	int (* sceKernelSysrootIofilemgrStart)(void);
	void *unk_0x2DC;
	void *unk_0x2E0;
	char *sysroot_names[9];
	SceUID this_object_uid;
	void *unk_0x30C; // size is 0x2C-bytes, maybe guid entry heap object
	void *unk_0x310;
	void *unk_0x314;
	void *VBAR;
	void *MVBAR;
	void *unk_0x320;
	void **unk_func_0x324; // SceSblACMgr
	SceUID (* sceKernelSysrootGetThreadId)(void);
	int (* sceKernelSysrootThreadFunction3)(void);                   // Temp name, SceKernelThreadMgr + 0xC79, SceThreadmgrForDriver_91382762
	SceUID (* sceKernelSysrootGetProcessId)(void);
	int (* sceKernelSysrootThreadFunction4)(void);                   // Temp name, SceKernelThreadMgr + 0x8D1
	int (* sceKernelSysrootThreadFunction5)(void);                   // Temp name, SceKernelThreadMgr + 0x8ED
	int (* sceKernelSysrootThreadFunction6)(void);                   // Temp name, SceKernelThreadMgr + 0x90D
	void (* sceKernelSysrootThreadFunction7)(void);                  // Temp name, SceKernelThreadMgr + 0xE69
	int (* sceKernelSysrootThreadFunction8)(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
	SceSysrootModulemgrHandlers *modulemgr_handlers;
	int unk_0x354; // ex:0xFFFFFFFF
	SceSysrootForKernel_D29BCA77_struct *processmgr_callbacks_1;
	SceSysrootForDriver_733C243E_struct *processmgr_callbacks_2;
	void *unk_func_0x360; // SceDeci4pSDfMgr
	int (* sceKernelSysrootGetBusError)(void *dst, SceSize len);
	int (* sceKernelSysrootAppMgrFunction1)(int a1, int a2, int a3, int a4, int a5, int a6); // SceAppMgr + 0x2795, SceAppMgrForDriver_324DD34E
	SceUID (* sceKernelSysrootGetShellPid)(void);
	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; // ex:0
	int (* sceKernelSysrootGetLicenseStatusForDriver)(void); // 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
	int (* sceKernelSysrootGetTrilithiumBufferForDriver)(void); // SceSblPostSsMgr + 0xB111, sceSblUtMgrGetTrilithiumBufferForDriver
	int (* sceKernelSysrootHasNpTestFlag)(void);
	void *unk_func_0x398; // SceSblUpdateMgr + 0x8B01
	int (* sceKernelSysrootLedSetMode)(int led, int mode, void *led_configuration);
	SceKernelVARange *cached_sm_info_ranges; // See SceCachedSecureModuleInfo
	int (* sceKernelSysrootGetFunctionNameByNIDForKernel)(SceNID funcnid, const char **name); // sceNidsymtblGetFunctionNameByNIDForDriver
	void *SceSysrootForKernel_47724459_func; // SceDeci4pSDfMgr or SceDeci4pDfMgr, set by SceSysrootForDriver_C5EAF5F7
	void *unk_0x3AC; // SceDeci4pSDfMgr
	void *unk_struct_0x3B0; // SceDeci4pDfMgr
	void *unk_0x3B4; // SceDeci4pTsmp
	void *unk_0x3B8; // SceDeci4pTsmp
	void *unk_0x3BC; // SceDeci4pTsmp
	void *unk_0x3C0; // SceDeci4pTsmp
	SceSysrootProcessHandler *process_handler; // maybe for SceDeci4p
	SceSysrootDbgpHandler    *dbgp_handler;    // maybe for SceDeci4p
	void *unk_func_0x3CC; // SceNetPs + 0x3E51, SceNetPsForDriver_83A12CCC
	void *unk_func_0x3D0; // SceNetPs + 0x3F4D, SceNetPsForDriver_C000CA8F
	void *unk_func_0x3D4; // SceDeci4pTmcp
	void *unk_func_0x3D8; // SceDeci4pSDbgp
	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_struct_0x3F4; // SceBt
	void *unk_struct_0x3F8; // SceHid
	void *unk_struct_0x3FC; // SceDeci4pSDbgp
	void *unk_data_0x400; // SceDeci4pSDbgp
	void *unk_func_0x404; // SceDeci4pSDfCtl
	void *unk_func_0x408; // SceDeci4pSDfCtl
	void *unk_func_0x40C; // ScePamgr
	void *unk_func_0x410; // ScePamgr
	void *unk_func_0x414; // ScePamgr
	SceUInt32 magic2;
} SceUIDSysrootObject;

typedef SceUIDSysrootObject SceSysroot;

typedef struct SceSysrootForKernel_D29BCA77_struct_0940 { //Valid for FW 0.940-0.945, size is 0x48
	SceSize size; // Size of this structure
	void *get_dword_from_offset_0x184;
	void *get_dword_from_offset_0x188;
	void *get_dword_from_offset_0x18C;
	void *sceKernelAllocCurrentProcessHeap;
	void *sceKernelFreeCurrentProcessHeap;
	void *sceKernelAllocRemoteProcessHeap;
	void *sceKernelFreeRemoteProcessHeap;
	void *sceKernelGetProcessLibdb;
	void *sceKernelSetProcessLibdb;
	void *ProcessmgrModuleStart2;
	void *sceKernelRegisterKPLS;
	void *sceKernelGetRemoteKPLS;
	void *sceKernelGetCurrentKPLS;
	void *sceKernelInhibitProcEvent;
        void *sceKernelPermitProcEvent;
	void *sceKernelInsertProcessThreadList;
	void *sceKernelDeleteProcessThreadList;
} SceSysrootForKernel_D29BCA77_struct_0940;

typedef struct SceSysrootForKernel_D29BCA77_struct_0990 { //Valid for FW 0.990-0.995, size is 0x44
	SceSize size; // Size of this structure
	void *get_dword_from_offset_0x184;
	void *get_dword_from_offset_0x188;
	void *get_dword_from_offset_0x18C;
	void *sceKernelAllocCurrentProcessHeap;
	void *sceKernelFreeCurrentProcessHeap;
	void *sceKernelAllocRemoteProcessHeap;
	void *sceKernelFreeRemoteProcessHeap;
	void *sceKernelGetProcessLibdb;
	void *sceKernelSetProcessLibdb;
	void *ProcessmgrModuleStart2;
	void *sceKernelRegisterKPLS;
	void *sceKernelGetRemoteKPLS;
	void *sceKernelGetCurrentKPLS;
	void *sceKernelInhibitProcEvent;
	void *sceKernelPermitProcEvent;
	void *sceKernelGetProcessHeapID;
} SceSysrootForKernel_D29BCA77_struct_0990;

//Size for 0.996.070 - 0.996.090 is 0x58
//Size for 1.000.071 - 1.500.151 (maybe higher) is 0x5C

typedef struct SceSysrootForKernel_D29BCA77_struct_3600 { //Valid for FW 3.60 - 3.65, size is 0x44
	SceSize size; // Size of this structure
        //a1 might be process object (needs to be checked)
	SceInt32 (*get_dword_from_offset_0x1E4)(void* a1);
	SceInt32 (*get_dword_from_offset_0x1E8)(void* a1);
	SceInt32 (*get_dword_from_offset_0x1EC)(void* a1);
        //Allocations are made from current process' "Unique" heap
        //Fails if TPIDRPRW is NULL
	void *(*sceKernelAllocCurrentProcessHeap)(SceSize size, SceKernelHeapMemoryOpt* opt);
	SceInt32 (*sceKernelFreeCurrentProcessHeap)(void* ptr);

	//Allocations are made from specified process' "Unique" heap
        //KERNEL_PID (0x10005), DummyProcessGame (0x10013) and DummyProcessSystem (0x10015) are accepted as PIDs
        void *(*sceKernelAllocRemoteProcessHeap)(ScePID process, SceSize size, SceKernelHeapMemoryOpt* opt);
	SceInt32 (*sceKernelFreeRemoteProcessHeap)(ScePID process, void* ptr);

	SceInt32 (*ProcessmgrModuleStart2)();

        //Equivalent to sceKernelWaitSema(processObject->EventLock_sema, 1, NULL);
	SceInt32 (*sceKernelInhibitProcEvent)(ScePID process);
	//Equivalent to sceKernelSignalSema(processObject->EventLock_sema, 1);
        SceInt32 *(sceKernelPermitProcEvent)(ScePID process);

        //info_type = 0 -> returns processObject->unk0x424
        //info_type = 1 -> returns processObject->MaxFHCount
        //other values -> return 0
        SceInt32 (*query_some_process_info)(ScePID process, SceUInt32 info_type);

	SceInt32 (*sceKernelRegisterKPLS)(char* name, SceSize size);
        //Fails if TPIDRPRW is NULL
        void *(*sceKernelGetCurrentKPLS)(SceUInt32 key);
	SceInt32 (*sceKernelGetRemoteKPLS)(ScePID process, SceUInt32 key, ScePVoid* pKPLS, SceBool create);

	SceInt32 (*sceKernelProcessDebugSuspend)(ScePID process, int status);
        //Retreived from process object's SceLoadProcessParam
        SceInt32 (*sceKernelGetCompiledSdkVersionByPid)(ScePID process, SceUInt32* pSdkVersion);
} SceSysrootForKernel_D29BCA77_struct;

typedef struct SceSysrootForKernel_733C243E_struct_old { // size is 0x28 on FW 0.990
	SceSize size; // Size of this structure
	SceUID (* sceKernelGetCurrentProcessId)(void);
	int (* sceKernelGetEntryHeap)(SceUID pid, int *pHeap);
	int (* SceProcessmgrForKernel_C77C2085)(SceUID pid);
	int (* sceKernelPIDtoAddressSpaceCB)(SceUID pid, void **pASCb);
	int (* FUN_81000000)(int* dst, int *src);
	int (* sceKernelGetProcessType)(SceUID pid);
	int (* sceKernelGetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
	int (* sceKernelSetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
	int (* sceKernelGetProcessAccessLevel)(SceUID pid);
} SceSysrootForKernel_733C243E_struct_old;

typedef struct SceSysrootForKernel_733C243E_struct { // size is 0x20 on FW 3.60-3.65
	SceSize size; // Size of this structure
	SceInt32 (* funcGetProcessEntryHeapObject)(SceUID pid, void **entry_heap_obj);
	SceUID (* get_process_address_space_UID)(SceUID pid);
	SceInt32 (* funcGetProcessAddressSpaceCB)(SceUID pid, void **address_space_obj);
	SceInt32 (* sceKernelGetProcessSelfAuthInfo)(SceUID pid, SceSelfAuthInfo *self_auth_info);
	SceInt32 (* sceKernelGetProcessTitleId)(SceUID pid, char *title_id, SceSize len); //Copies processObject->list_entry->process_name to title_id - maybe this should be GetProcessName?
	SceInt32 (* sceKernelIncProcessResource)(SceUInt32 type); //Type must be < 0x3
	SceInt32 (* sceKernelDecProcessResource)(SceUInt32 type); //^
} SceSysrootForKernel_733C243E_struct;

typedef struct SceSysrootProcessHandler { // size is 0x28 on FW 3.60
	SceSize size;                                                       // Size of this structure
	void (* unk_4)(SceUID pid, SceUID modid, int flags, uint64_t time); //!< process start shared modules
	void (* exit)(SceUID pid, int flags, uint64_t time);
	void (* kill)(SceUID pid);                                          //!< by SceShell
	void (* unk_10)(SceUID pid, SceUID modid, uint64_t time);
	void (* unk_14)(SceUID pid, SceUID modid, uint64_t time);
	void (* unk_18)(SceUID pid, SceUID modid, uint64_t time);
	int (* on_process_created)(int a1, int a2, int a3);                 //!< called when process is created
	void (* unk_20)(SceUID pid, SceUID modid, uint64_t time);
	void (* unk_24)(SceUID pid, SceUID modid, int flags, uint64_t time);
} SceSysrootProcessHandler;

typedef struct SceSysrootModulemgrHandlers { // size is 0x18 on FW 3.60
	SceSize size; // Size of this structure
	int (* sceKernelGetProcessSyscallInfo)(SceUID pid, const void *module_addr, void *pInfo); // SceKernelModulemgr + 0x20D0 on FW 3.60
	int (* handler_2)(SceUID pid, const void *module_addr); // SceKernelModulemgr + 0x1F44 on FW 3.60
	void *sceKernelGetModuleInfoMinByAddr;
	void *sceKernelBacktraceInternal;
	void *sceKernelPrintBacktrace;
} SceSysrootModulemgrHandlers;

// ScePamgrCallbacks
typedef struct SceSysrootForDriver_C94C76FA_struct { // size is 0x10 on FW 3.60
	SceSize size; // Size of this structure
	int (__cdecl *unk_func_4)();
	int (__cdecl *unk_func_8)();
	int (__cdecl *unk_func_C)();
} SceSysrootForDriver_C94C76FA_struct;

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_wrong { // 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_wrong;

// Aka SceObjectBase in vitasdk
typedef struct SceKernelObject {
	void *pObject;
	SceClass *pClass;
	uintptr_t data[];
} SceKernelObject;

// Added with the wrong struct, but this could be another SceUIDXxxClass struct
typedef struct SceKernelObject_wrong { // size is at least 0x24
	void *pObject;			// 0x0
	SceClass pClass;		// 0x4
	uint32_t type;			// 0x8
	uint16_t lcount;		// 0xC
	uint16_t ucount;		// 0xE
	uint16_t ccount;		// 0x10
	uint32_t unk_12;		// 0x12 - 0x54c3
	uint16_t unk_16;		// 0x16
	uint32_t uid;			// 0x18
	char unk_1C[4];			// 0x1C
	const char *name;		// 0x20
	uint32_t indexRaw;		// 0x24
} SceKernelObject_wrong;

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

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

#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA			SCE_KERNEL_MEMBLOCK_TYPE_USER_RW

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

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

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

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

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

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

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

/*@}*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * Option parameter of sceKernelAllocMemBlock
 */
 typedef struct SceKernelAllocMemBlockOpt { // size is 0x14/0x38/0x3C/0x40 on FW 3.60
	/**
	 * 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 roundupUnitSize;
	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;                // Never used?
	SceUInt32 attr;
	void *vbase;                    // Virtual address memblock should be mapped at
	void *pbase;			// Physical address to use as base
	SceSize alignment;
	SceSize extraLow;               // Size of extra area starting from memblock vbase
	SceSize extraHigh;              // Size of extra area starting "after" memblock - extra area is ?not mapped?
	SceUID baseMemBlock;            // UID of memblock this one is based on
	SceUID pid;
	SceKernelPAVector *pPAV;
	SceSize roundupUnitSize;        // Used to roundup memblock vsize
	SceUInt8 domain;
	SceUInt32 unk_34; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_38; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_3C; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_40; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_44; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_48; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_4C; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_50; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
	SceUInt32 unk_54; // Related to SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20
} SceKernelAllocMemBlockOptKernel;

/**
 * Attributes to enable some SceKernelAllocMemBlockOpt members.
 */
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_VBASE        0x00000001
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PBASE        0x00000002
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT    0x00000004
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_LOW    0x00000008
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_EXTRA_HIGH   0x00000010
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_0x20         0x00000020
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASE         0x00000040
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PID          0x00000080
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_BASENAME     0x00000200 // Only available for sceKernelAllocMemBlockForUser - kernel callers must use HAS_BASE instead
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_PPAV         0x00001000 // Official name may be HAS_PVECTOR
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ROUNDUP      0x00002000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_DOMAIN       0x00010000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_NOPHYPAGE        0x00020000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_PHYCONT	        0x00200000 // Memory area is physically continuous.
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_UNK              0x00400000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_SHARE_VBASE      0x00800000 // Memblock shares vbase with base block - requires HAS_BASE
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_SHARE_PHYPAGE    0x01000000 // Memblock shares physical pages with base block - requires HAS_BASE
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_ALLOW_PARTIAL_OP 0x04000000 // Allow partial operation. ?What does that mean?

/**
 * 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;
	SceSize alignment;		// ex: 0x10
	uint32_t unk_C;			// ex: 0x20
	uint32_t unk_10;
} SceKernelHeapMemoryOpt;

typedef struct SceKernelHeapCreateOpt { // size is 0x14 on FW 0.931-0.990, 0x1C on FW 3.60
  SceSize size;
	union { //<! Union for compatibility
		SceUInt32 attr;
		SceUInt32 uselock; //<! Do not use uselock as it will be deprecated. ex: 1, 0x100
	};
  SceUInt32 field_8; // ex: 0x8000
  SceUInt32 field_C;
  SceUInt32 block_type; // wrongly called memtype in vitasdk
  SceUInt32 field_14;
  SceUInt32 field_18;
} SceKernelHeapCreateOpt;

typedef struct 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 addr;
	SceSize size;
} SceKernelVARange;

typedef struct SceKernelPARange {
	uint32_t addr;
	SceSize size;
} SceKernelPARange;

typedef struct SceKernelPAVector { // size is 0x14 on FW 0.990
	SceSize size;			// Size of this structure
	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 FWs 0.931-3.60
	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 totalSize;
	int field_0x24;
	void *pRoot;
	uint32_t field_0x2c;
	uint32_t field_0x30;
	uint32_t field_0x34;
	uint32_t field_0x38;
	int status;
	int pindex40; //1
	int field_0x44;
	int pindex48; //2
	int field_0x4c;
	int pindex50; //3
	int field_0x54;
	int pindex58; //4
	int field_0x5c;
	int pindex60; //5
	int field_0x64;
	int pindex68; //6
	int field_0x6c;
	int pindex70; //7
	int field_0x74;
	int pindex78; //8
	int field_0x7c;
	int pindex80; //9
	SceSize psize2;
	int min;
	int pindex8C; //10
	int field_0x90;
	SceUInt32 nClient;
	SceSize freeSize;
} SceKernelPhyMemPart;

typedef struct ScePhyMemPartInfoCore { // size is 0x10 on FWs 0.990-3.60
	SceUInt32 unk_0; // same as SceKernelPhyMemPart field 0x1C
	SceSize totalSize;
	SceSize freeSize;
	SceUInt32 unk_C; // maybe some counter
} ScePhyMemPartInfoCore;

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

/*
Target Manager (Communication Processor) Logging levels.
These levels can be set using psp2ctrl set-logging-level <level>.
LOG_LEVEL_NONE (0)
LOG_LEVEL_ERROR (1)
LOG_LEVEL_WARNING (2)
LOG_LEVEL_SERVICE (3)
LOG_LEVEL_INFO (4)
LOG_LEVEL_INTERNAL (5)
LOG_LEVEL_MAX (6)
*/

typedef struct SceSyscallInfo { // size is 0x3C on FW 3.60
	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;

// process
typedef struct SceKernelDebugEventLog1 { // size is 0x1C
	int data_0x40;
	SceUID pid;
	int budget_type;
	int data_0x4C;    // 0xA
	char titleid[0xC];
} __attribute__((packed)) SceKernelDebugEventLog1;

// Related to network
typedef struct SceKernelDebugEventLog2 { // size is 0x4
	int data_0x40;    // 0 or 0x80412118?
} __attribute__((packed)) SceKernelDebugEventLog2;

// Related to network
typedef struct SceKernelDebugEventLog3 { // size is 0x54
	int data_0x40;    // 0?
	char ip1[0x10];
	char ip2[0x10];
	char ip3[0x10];
	char ip4[0x10];
	char ip5[0x10];
} __attribute__((packed)) SceKernelDebugEventLog3;

typedef struct SceKernelDebugEventLog {
	SceSize size;
	int data_0x04;    // 0xA, titleid size?
	char titleid[0xC];
	int flags;
	SceUID ppid;
	SceUID data_0x1C; // thid?
	int rsvd[4];
	SceUInt64 time;
	int data_0x38;
	SceSize item_size;
	union {
		SceKernelDebugEventLog1 type1;
		SceKernelDebugEventLog2 type2;
		SceKernelDebugEventLog3 type3;
	};
} __attribute__((packed)) SceKernelDebugEventLog;

typedef SceVoid(*SceKernelSysrootVeneziaRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);

typedef SceVoid(*SceKernelSysrootVipRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);

// This is a guessed name
typedef SceUInt32 SceKernelMemoryRefPerm;
#define SCE_KERNEL_MEMORY_REF_PERM_0x10 0x10
#define SCE_KERNEL_MEMORY_REF_PERM_0x20 0x20

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 = sceKernelCpuIdForDriver();
  sceKernelPrintfLevelForDriver
            (1,
             "%d:address_space.c:%s:Warning:Using SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX for0x%08x\n"
             , cpuId, "GetPhyMemPartIndex", param_1);
  return 6;
}

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 (usermode only)
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? (kernel only)
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

/* Seems alloc from remaining area */
#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

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

sceKernelStrnlenFromUserForKernel

Version NID
0.931 0x9BC3DEAC
3.60 not present
SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);

SceSysmemForKernel_BD33EDDF

Version NID
0.931 0xBD33EDDF
3.60 not present

Gets thread's name. Returns 0 on success.

int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);

scePUIDGetEntryInfoAllForKernel

Version NID
3.60 0x2770A7D7
int scePUIDGetEntryInfoAllForKernel(int a1, int a2, int a3, int a4, int a5, void *pInfoAll);

sceGUIDGetUIDVectorWeakByClassForKernel

Version NID
3.60 0x59F577E8
int sceGUIDGetUIDVectorWeakByClassForKernel(int a1, int a2, int a3, int a4, void *pUIDVectorWeak);

scePUIDGetAttrForKernel

Version NID
3.60 0x86E83C0D
int scePUIDGetAttrForKernel(SceUID pid, SceUID uid, void *pAttr);

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-0.990 0x1A898F2E
3.60 not present
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931
  SceSize size; // Size of this structure
  char unk[0x4008];
} SceKernelAddressSpaceMMUL1AllInfo;

int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID 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.61 0x4D38F861
3.63-3.65 0x0164D817

return gpPhyPartKernel;

void *sceKernelGetPhyPartKernelForKernel(void);

sceKernelGetPhyPartToolForKernel

Version NID
3.60-3.61 0xF8E95A5A
3.63 0x0B1B4ACA
void *sceKernelGetPhyPartToolForKernel(void);

sceKernelGetPhyPartGameForKernel

Version NID
3.60-3.61 0xB60568F9
3.63 0x62800A6B
void *sceKernelGetPhyPartGameForKernel(void);

sceKernelSetPhyPartGameForKernel

Version NID
3.60-3.61 0x77876A8D
3.63 0x3753C584
void sceKernelSetPhyPartGameForKernel(void *pPhyPart);

sceKernelGetPhyMemPartInfoCoreForKernel

Version NID
0.931 not present
0.990-3.61 0x3650963F
3.63-3.65 0xB9B69700
int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);

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

sceGUIDFindByObjectForKernel

Version NID
0.990-3.60 0x95ABFDC3
int sceGUIDFindByObjectForKernel(uint32_t uid_or_flags_or_object);

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
3.65 0x89BEF058
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 *pPAV);

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

ORed values:
0x00002 : Shell
0x00004 : Game
0x00005 : PhyCont
0x00060 : CDialog
0x10000 : Lpddr2Main
0x30000 : Cdram

seen values:
0x10002 : ShellLpddr2Main (shared)
0x10004 : GameLpddr2Main
0x10005 : PhyContLpddr2Main
0x10064 : GameCDialogLpddr2Main

0x30002 : ShellCdram
0x30004 : GameCdram
*/

int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);

sceKernelDeletePhyMemPartForKernel

Version NID
0.931-3.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
3.65 0xF6D09BD9
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 *pInfoClass);

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
3.65 0xFB6390CE

This is a guessed name. 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 classAttr;
	SceUInt32 uidAttr;
	SceUID pid2;
} 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
int sceGUIDGetEntryForKernel(SceUID guid, SceGUIDEntry **ppEntry);

sceGUIDGetVisibilityLevelForKernel

Version NID
3.60 0xC69666C3

sceGUIDSetVisibilityLevelForKernel

Version NID
3.60 0xCB8D03C0

Sets visibilityLevel into guid's GUIDEntry.

int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);

sceGUIDFindByNameForKernel

Version NID
3.60 0xCEBA8031

sceGUIDFindByNameAllForKernel

Version NID
3.60 0x4B5C85AC

sceGUIDGetPIDForKernel

Version NID
3.60 0xCF5A2311

Returns Process ID for guid.

SceUID sceGUIDGetPIDForKernel(SceUID guid);

sceGUIDSetPIDForKernel

Version NID
3.60 0x812E7A53

Sets Process ID for guid.

int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);

sceGUIDSetCNOAForKernel

Version NID
3.60 0x8D6AF468

sceGUIDSetForKernel

Version NID
0.931-3.60 0xD7B323EB

Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.

int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);

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

sceGUIDReferForKernel

Version NID
3.60 0xB3E2AA7A
int sceGUIDReferForKernel(SceUID pid, int guid);

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 virtual address and src must be a physical address. Returns copied size on success.

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

sceKernelAllocPartitionMemBlockForKernel

Version NID
0.931-3.60 0x5FFE4B79
3.65 0x6DB45017

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
3.65 0x133024A5
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);

sceKernelGetHeapInfoAllChunkForKernel

Version NID
0.931-0.990 0xAC4C0EB1
3.60 not present
int sceKernelGetHeapInfoAllChunkForKernel(SceUID uid, SceKernelHeapInfo *pInfo);

sceKernelGetHeapInfoByPointerForKernel

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

sceKernelGetHeapInfoForKernel

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

// 3.60:
int sceKernelGetHeapInfoForKernel(SceUID uid, SceUInt32 level, 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);

scePUIDReferObjectForKernel

Version NID
0.990-3.60 0x620E00E7
int scePUIDReferObjectForKernel(SceUID pid, int global_id_or_addr, int *pOut);

SceSysmemForKernel_7C797940

Version NID
0.931-0.990 0x7C797940

Calls #SceSysmemForKernel_620E00E7 or #sceGUIDReferObjectForDriver.

sceKernelCopyFromUser32DomainForKernel

Version NID
0.931 0xD530399A
3.60 not present
int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelProcCopyToUserRxForKernel

Version NID
0.990-3.60 0x30931572
3.65 0x2995558D

This is a guessed name. Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel.

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 sceKernelProcCopyToUserRxForKernel(SceUID pid, void *dst, const void *src, SceSize size);

sceKernelCopyToUserRxForKernel

Version NID
3.60 0x67BAD5B4
3.65 0x5EF1DAAF

This is a guessed name. Temp name was sceKernelMemcpyToUserRxForKernel.

int sceKernelCopyToUserRxForKernel(void *dst, const void *src, SceSize len);

sceKernelCopyToUserRoForKernel

Version NID
3.60 0xA6F95838

This is a guessed name. Temp name was sceKernelMemcpyToUserRoForKernel.

int sceKernelCopyToUserRoForKernel(void *dst, const void *src, SceSize len);

sceUIDtoObjectForKernel

Version NID
0.990-3.60 0xED221825
3.65 0xFA6C098C

Calls SceSysmem#sceGUIDGetObjectForDriver.

SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);

sceGUIDOpenByGUIDForKernel

Version NID
0.990-3.60 0xCF53EEE4

sceGUIDGetUIDVectorByClassForKernel

Version NID
0.931-3.60 0xEC7D36EF
3.65 0x52137FA3

Copy uid to vector by referring to all objects created by cls.

/*
 * num - max copy number
 */
int sceGUIDGetUIDVectorByClassForKernel(SceClass *cls, int vis_level, SceUID *vector, SceSize num, SceSize *ret_num);

scePUIDGetUIDVectorByClassForKernel

Version NID
3.60 0xB16D5136

Similar to #sceGUIDGetUIDVectorByClassForKernel.

int scePUIDGetUIDVectorByClassForKernel(SceUID pid, int a2, int a3, int a4, int a5, SceSize *ret_num);

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
// type: 0x10000001 (user AS)
// name: maybe titleid
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelAddressSpace *pAS);

sceKernelDeleteAddressSpaceForKernel

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

sceKernelAddressSpaceFreeAllMemBlockForKernel

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

sceKernelAddressSpaceSetPhyMemPartForKernel

Version NID
0.931-3.60 0x67955EE9
3.65 0x7DF07D60
int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, 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
3.65 0x7D87F706
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
3.65 0x0B1B4ACA

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
3.65 0xCEBC4963

Official name might be sceKernelSetAddressSpaceName.

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

SceSysmemForKernel_942D15FC

Version NID
3.60 0x942D15FC

Used to get GUID by name.

int SceSysmemForKernel_942D15FC(const char *name, SceSize namelen, int unk_guid_global_value);

SceSysmemForKernel_C8672A3D

Version NID
3.60 0xC8672A3D
int SceSysmemForKernel_C8672A3D(int unk);

sceKernelInitProcessMemoryForKernel

Version NID
3.60 0xE7938BFB

This is guessed name.

Used by SceProcessmgr

int sceKernelInitProcessMemoryForKernel(void);

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
1.80 Removed

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.65 0xC94850C9

The interface is the same as the usermode version of this function, however more types can be specified and more options are in the pOpt argument.

To allocate a kernel RW block of memory, specify type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW.

To allocate a block of memory with a specific physical address, specify type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW or type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW, pOpt->attr = 2, and pOpt->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.

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

sceKernelIsAccessibleRangeForDriver

Version NID
0.931-3.60 0x9C78064C

Temp name was sceKernelFindMemBlockForDriver.

Also exported as #sceKernelIsAccessibleRangeForDebugger.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeForDriver(SceUInt32 mode, const void *pVA, SceSize size);

sceKernelIsAccessibleRangeProcForDriver

Version NID
0.931-3.60 0x9F6E45E3

Temp name was sceKernelFindMemBlockForPidForDriver.

Also exported as #sceKernelIsAccessibleRangeProcForDebugger.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 mode, const void *pVA, 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
0.931-3.65 0x009E1C61
int sceKernelFreeMemBlockForDriver(SceUID uid);

sceKernelGetMemBlockPARangeForDriver

Version NID
0.990-3.60 0x98C15666

Previous name was sceKernelGetMemBlockAddrPairForUidForDriver

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

int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);

sceKernelGetMemBlockBaseForDriver

Version NID
0.990-3.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

Temp name was sceKernelGetMemBlockKernelPageForDriver.

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

sceKernelGetMemBlockMappedBaseForDriver

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

sceKernelGetMemBlockPAVectorForDriver

Version NID
0.990-3.60 0x19A51AC7

Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.

int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);

scePUIDGetEntryHeapNameForDriver

Version NID
0.990-3.60 0x09896EB7

Real name might be scePUIDGetEntryHeapNameForDriver. Temp name was sceKernelGetNameForPidByUidForDriver.

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

sceGUIDGetNameForDriver

Version NID
3.60 0xA78755EB

This is a guessed name, but near. Temp name was sceKernelGetNameForUidForDriver.

int sceGUIDGetNameForDriver(SceUID guid, char **pName);

sceGUIDGetName2ForDriver

Version NID
3.60 0xE655852F

This is a guessed name, but near. Temp name was sceKernelGetNameForUid2ForDriver.

const char* sceGUIDGetName2ForDriver(SceUID guid);

sceUIDtoObjectWrapperForDriver

Version NID
0.990 0xAB7AC3D1

This is a guessed name.

Calls #sceUIDtoObjectForKernel.

SceKernelObject *sceUIDtoObjectWrapperForDriver(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);

sceGUIDReferObjectWithClassLevelForDriver

Version NID
0.990-3.60 0x77066FD1
int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);

sceGUIDReferObjectWithClassForDriver

Version NID
0.990-3.60 0x00ED6C14

Temp name was sceKernelGetObjForUidForDriver.

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

sceGUIDReferObjectWithSubclassForDriver

Version NID
0.990-3.60 0x72A98D17

Temp name was sceKernelGetObjectForUidForClassTreeForDriver.

int sceGUIDReferObjectWithSubclassForDriver(SceUID 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, SceUInt32 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 *pPAV);

sceKernelGetPaddrListForLargePageForDriver

Version NID
3.60 0x08A8A7E8

This is a guessed and bad name.

int sceKernelGetPaddrListForLargePageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);

sceKernelGetPaddrListForSmallPageForDriver

Version NID
3.60 0x16844CE6

This is a guessed and bad name.

int sceKernelGetPaddrListForSmallPageForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);

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

This is a guessed and bad name.

int sceKernelGetPaddrPairForLargePageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);

sceKernelGetPaddrPairForSmallPageForDriver

Version NID
3.60 0xB3575090

This is a guessed and bad name.

int sceKernelGetPaddrPairForSmallPageForDriver(SceKernelVARange *pair, SceKernelPARange *result_pair);

sceKernelVAtoPABySWForDriver

Version NID
0.990-3.60 0x65419BD3

Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.

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

sceKernelGetPidContextForDriver

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

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

sceKernelGetUIDClassForDriver

Version NID
3.60 0x85336A1C

This is a guessed and bad name.

SceClass *sceKernelGetUIDClassForDriver(void);

sceKernelGetUnknownValidPASForDriver

Version NID
3.60 0xC9928F5E

This is a guessed and bad name. Temp name was sceKernelGetUnknownValidPhysAddressSpaceForDriver.

int sceKernelGetUnknownValidPASForDriver(void **start, void **end);

sceKernelProcIsPAWithinSameSectionForDriver

Version NID
3.60 0xF4AD89D8

This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinSameSectionForUidForDriver.

int sceKernelProcIsPAWithinSameSectionForDriver(SceUID pid, int permission_type, void *pVA, SceSize len);

sceKernelIsPAWithinUnknownValidPASForDriver

Version NID
3.60 0xA7C0D1FC

This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver.

int sceKernelIsPAWithinUnknownValidPASForDriver(void *pVA);

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

Temp name was sceKernelMapUserBlockDefaultTypeForDriver.

Assigns type 0.

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

sceKernelProcUserMapForDriver

Version NID
3.60 0x0091D74D

Temp name was sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly the real name.

Assigns type 0.

SceUID sceKernelProcUserMapForDriver(SceUID pid, const char *name, int permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *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);

sceKernelProcCopyToUserRoForDriver

Version NID
0.990-1.69 0x571D2739
3.60 not present

This is a guessed name Temp name was sceKernelRoMemcpyKernelToUserForPidForDriver.

int sceKernelProcCopyToUserRoForDriver(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);

sceKernelStrnlenFromUserForDriver

Version NID
0.931 not present (in ForKernel)
0.940-0.990 0xFF06898A
1.50-3.60 not present
SceSize sceKernelStrnlenFromUserForDriver(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);

sceKernelStrncpyFromUserForDriver

Version NID
0.931 not present (present but not exported)
0.940-0.990 0xE6D5EFE4
1.50-3.60 not present

Returns 0 on success.

int sceKernelStrncpyFromUserForDriver(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 (in ForKernel?)
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_MEMBLOCK_TYPE_KERNEL_RW. After you are done writing, call sceKernelRemapMemBlockForDriver with type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX.

int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);

sceKernelPartialRemapMemBlockForDriver

Version NID
0.990 not present
1.50-3.60 0xDFE2C8CB

Temp name was sceKernelRemapBlockForDriver, sceKernelRemapMemBlockForDriver.

This can be used to remap RW memory as RX. To do this, first allocate a memory block of type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW. After you are done writing, call sceKernelPartialRemapMemBlockForDriver with type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX.

int sceKernelPartialRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);

scePUIDSetNameForDriver

Version NID
0.990-3.60 0x12624884

Temp name was sceKernelSetNameForPidForUidForDriver.

int scePUIDSetNameForDriver(SceUID pid, SceUID uid, const char *name);

scePUIDSetNameForDriver

Version NID
0.931-3.60 0x4CFA4100

Temp name was sceKernelSetObjectForUidForDriver.

int scePUIDSetNameForDriver(SceUID puid, const char *name);

sceKernelSwitchPidContextForDriver

Version NID
3.60 0x2D711589
int sceKernelSwitchPidContextForDriver(SceKernelProcessContext *new_context, SceKernelProcessContext *prev_context);

sceGUIDReleaseObjectForDriver

Version NID
0.990-3.60 0x149885C4

Temp name was sceKernelUidReleaseForDriver.

int sceGUIDReleaseObjectForDriver(SceUID uid);

sceKernelUnmapMemBlockForDriver

Version NID
3.60 0xFFCD9B60
int sceKernelUnmapMemBlockForDriver(SceUID uid);

sceKernelGetPhysicalMemoryTypeForDriver

Version NID
0.990-3.60 0x0AAA4FDD

Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver

int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);

some_memblock_operation

Version NID
3.60 0x13805CA8
int some_memblock_operation(SceUID uid, int a2, int a3, int a4);

some_memblock_operation

Version NID
3.60 0x16713BE8

Same as above but with different flags.

int some_memblock_operation(SceUID uid, int a2, int a3, int a4);

some_memblock_operation

Version NID
3.60 0x16713BE8

Same as above but with different flags.

int some_memblock_operation(SceUID uid, int a2, int a3, int a4);

some_memblock_operation

Version NID
3.60 0x4C584B29

Same as above but with different flags.

int some_memblock_operation(SceUID uid, int a2, int a3, int a4);

some_memblock_operation

Version NID
3.60 0x6C76AD89

Same as above but with different flags.

int some_memblock_operation(SceUID uid, int a2, int a3, int a4);

some_memblock_operation

Version NID
3.60 0x8C43B052

Same as above but with different flags.

int some_memblock_operation(SceUID uid, int a2, int a3, int a4);

sceKernelGetMemBlockProcessForDriver

Version NID
0.990-3.60 0x1EFC96EA
int sceKernelGetMemBlockProcessForDriver(SceUID uid);

memblock_related_operation

Version NID
3.60 0x64DBE472
int memblock_related_operation(SceUID uid, int a2);

memblock_related_operation

Version NID
3.60 0x987EE587
struct result_987ee587
{
  int unk0;
  int unk4;
  int unk8;
  int unkC;
  int unk10;
};

int memblock_related_operation(SceUID uid, result_987ee587 *result);

SceSysmemForDriver_856FA2E3

Version NID
3.60 0x856FA2E3

Seems related to heap.

int SceSysmemForDriver_856FA2E3(SceUID uid);

sceKernelGetPhyMemInfoForDriver

Version NID
0.931-3.60 0x89475192
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60
  SceSize size;  // Size of this structure
  void* pbase;   // Physical base address
  SceSize psize; // Physical size
} SceKernelPhyMemInfo;

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

SceInt32 sceKernelGetPhyMemInfoForDriver(SceUInt32 pindex, SceKernelPhyMemInfo *pInfo);

sceKernelVerifyHeapForDriver

Version NID
0.990-3.60 0xC50A9C0D
int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);

SceSysmemForDebugger

This library was removed somewhere between FWs 1.692 and 3.60.

sceKernelPhysicalAddressSpaceStartForDebugger

Version NID
0.931 0x6AE2188F
1.691-3.60 not present
int sceKernelPhysicalAddressSpaceStartForDebugger(void);

sceKernelGetPhysicalAddressSpaceForDebugger

Version NID
0.931 0xE8905626
1.691-3.60 not present

In FW 0.931, it calls sceKernelPhysicalAddressSpaceStartForDebugger.

void *sceKernelGetPhysicalAddressSpaceForDebugger(void);

sceKernelIsAccessibleRangeProcForDebugger

Version NID
0.931-1.691 0x01DFC193
3.60 not present. Exported as #sceKernelIsAccessibleRangeProcForDriver.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);

sceKernelIsAccessibleRangeForDebugger

Version NID
0.931-1.691 0xD027761F
3.60 not present. Exported as #sceKernelIsAccessibleRangeForDriver.

?Returns 0 on success (if is accessible range)?

int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);

SceSysmem

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

SceDipsw

sceKernelCheckDipsw

Version NID
1.69-3.60 0x1C783FB2

sceKernelClearDipsw

Version NID
1.69-3.60 0x800EDCC1

sceKernelSetDipsw

Version NID
1.69-3.60 0x817053D4

SceDipswForDriver

sceKernelCheckDipswForDriver

Version NID
3.60 0xA98FC2FD
int sceKernelCheckDipswForDriver(int no);

sceKernelGetDipswInfoForDriver

Version NID
3.60 0xB2AD48BE

This is a guessed name (cannot find an evidence).

return *(int *)(dipsw_addr + 4 * info_id);

info_id:

  • 0: CP timestamp 1
  • 1: CP Version, CP Board ID
  • 2: CP timestamp 2
  • 3: ASLR Seed

See Sysroot#DIP_Switches.

int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);

sceKernelClearDipswForDriver

Version NID
3.60 0xF1F3E9FE
void sceKernelClearDipswForDriver(int no);

sceKernelSetDipswForDriver

Version NID
3.60 0x82E45FBF
void sceKernelSetDipswForDriver(int no);

SceUartForKernel

sceKernelUartInitForKernel

Version NID
0.931-3.60 0xA9C74212

Temp name was sceUartInitForKernel.

It initializes the clock generator registers for the UART port. See UART Registers. The default baud rate is 115200 for ports 0-5 and 250000 for port 6.

// port: 0-6
int sceKernelUartInitForKernel(SceUInt32 port);

sceKernelUartReadAvailableForKernel

Version NID
0.990 not present
3.60 0x38DB7629

Temp name was sceUartReadAvailableForKernel.

Returns the number of words available to read from the read FIFO.

int sceKernelUartReadAvailableForKernel(int port);

sceKernelUartReadForKernel

Version NID
0.931-3.60 0x9BBF1255

Temp name was sceUartReadForKernel.

int sceKernelUartReadForKernel(int port);

sceKernelUartWriteForKernel

Version NID
0.931-3.60 0x41973874

Temp name was sceUartWriteForKernel.

int sceKernelUartWriteForKernel(int port, char c);

sceKernelUartPutcharForKernel

Version NID
0.931-0.990 0xAF243C6A
3.60 not present
int sceKernelUartPutcharForKernel(char c);

SceCpu

This library provides wrapper for much ARM CP15 co-processor access as well as low level support of spinlocks and other synchronization primitives.

sceKernelCpuId

Version NID
1.69-3.60 0x2704CFEE

Return the CPU ID of the current core.

SceUInt sceKernelCpuId(void);

SceCpuForKernel

sceKernelSendEventForKernel

Version NID
0.990 0x45885327
3.60 not present
void sceKernelSendEventForKernel(void);

sceKernelWaitForEventForKernel

Version NID
0.931 0xD2629465
3.60 not present
void sceKernelWaitForEventForKernel(void);

sceKernelPrintCpuModeForKernel

Version NID
0.931 0xDC99515C
3.60 not present

sceKernelTlsKernelSetForKernel

Version NID
0.940 0x7A180AA4
3.60 not present
// thread_index must be < 8
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);

sceKernelTlsKernelGetForKernel

Version NID
0.940 0x28E080BC
3.60 not present
// thread_index must be < 8
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);

sceKernelRoundupDCacheLineForKernel

Version NID
0.931-0.990 0xED512F50
3.60 not present

Calls the function previously registered by SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel.

int sceKernelRoundupDCacheLineForKernel(int a1);

sceKernelSetRoundupDCacheLineFuncForKernel

Version NID
0.931-0.990 0x66C3AA93
3.60 not present

Uses CTR and CTR-DMINLINE to determine which function to return.

(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);

sceKernelReadUser8ForKernel

Version NID
0.990 0x942B92C3
3.60 not present
int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);

sceKernelReadUser16ForKernel

Version NID
0.990 maybe present
3.60 not present
int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);

sceKernelReadUser32ForKernel

Version NID
0.990 0x6091086F
3.60 not present
int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);

sceKernelWriteUser8ForKernel

Version NID
0.990 0x13B7B151
3.60 not present
int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);

sceKernelWriteUser16ForKernel

Version NID
0.990 maybe present
3.60 not present
int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);

sceKernelWriteUser32ForKernel

Version NID
0.990 0x101894E0
3.60 not present
int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);

sceKernelVMRead8ForKernel

Version NID
0.990 0xA2F0FE9D
3.60 not present
int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);

sceKernelVMRead16ForKernel

Version NID
0.990 0xF31D4D10
3.60 not present
int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);

sceKernelVMRead32ForKernel

Version NID
0.931-0.990 0x316574B1
3.60 not present
int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);

sceKernelVMWrite8ForKernel

Version NID
0.931 0xA3C65664
3.60 not present
int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);

sceKernelVMWrite16ForKernel

Version NID
0.931 0xBF38A460
3.60 not present
int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);

sceKernelVMWrite32ForKernel

Version NID
0.931 0x04D129B2
3.60 not present
int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);

sceKernelMMUIsValidMapForKernel

Version NID
0.931 0x4891F923
3.60 not present
int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);

sceKernelMMUIsValidUnmapForKernel

Version NID
0.931 0x60EA8433
3.60 not present
int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);

sceKernelMMUL1GetInfoForKernel

Version NID
0.931-0.990 0x9D346F87
3.60 not present
int sceKernelMMUL1GetInfoForKernel(int a1, void *addr, void *pInfo);

sceKernelMMUL2GetInfoForKernel

Version NID
0.931-0.990 0x247629A7
3.60 not present
int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);

sceKernelMMUMapSectionsForKernel

Version NID
0.931-0.990 0x868B471A
3.60 not present
3.65 Present, but not exported
SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);

sceKernelMMUMapSupersectionsForKernel

Version NID
0.931-0.990 0x0D9DA15F
3.60 not present
3.65 Present, but not exported
SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);

sceKernelMMUMapSmallPagesForKernel

Version NID
0.931-0.990 0xB953E022
3.60 not present
3.65 Present, but not exported
int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);

sceKernelMMUMapSmallPageForKernel

Version NID
0.931-0.990 0xCC7C16F8
3.60 not present
int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);

sceKernelMMUMapLargePagesForKernel

Version NID
0.931-0.990 0x78D32D38
3.60 not present
3.65 Present, but not exported
int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);

sceKernelMMUUnmapSectionsWithFlagsForKernel

Version NID
0.931-0.990 0xFC657FD1
3.60 not present
int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);

sceKernelMMUUnmapSupersectionsWithFlagsForKernel

Version NID
0.931-0.990 0x0E4D29C6
3.60 not present
int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);

sceKernelMMUUnmapSmallPagesWithFlagsForKernel

Version NID
0.931-0.990 0x11EBA8CE
3.60 not present
int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);

sceKernelMMUUnmapLargePagesWithFlagsForKernel

Version NID
0.931-0.990 0x44319918
3.60 not present
int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);

sceKernelMMUL1VAtoPABySWForKernel

Version NID
0.990 0x8E4ECF17
3.60 not present
int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);

sceKernelMMUSetL2PageTableForKernel

Version NID
0.990 0xAECA0820
3.60 not present
int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);

sceKernelMMUUnsetL2PageTableForKernel

Version NID
0.990 0xCB519DF3
3.60 not present
int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);

SceCpuForKernel_CA4124DE

Version NID
0.990 0xCA4124DE
3.60 not present

Returns 1, 2 or 6 based on some page/section properties.

int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);

sceKernelMMUGetContextForKernel

Version NID
0.931 0x211B89DA
3.60 not present

Temp name was sceKernelCpuSaveContextForKernel.

typedef struct SceKernelMMUContext { // size is 0xC on FW 0.931
  uint32_t unk_0;
  uint32_t unk_4;
  uint32_t unk_8;
} SceKernelMMUContext;

int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);

sceKernelMMUChangeContextForKernel

Version NID
0.931 0x0A4F0FB9
3.60 not present

Temp name was sceKernelCpuRestoreContextForKernel.

int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);

sceKernelMMUVAtoPAWithModeForKernel

Version NID
0.931-3.60 0x67343A07

Temp name was sceKernelCpuGetPaddrWithMaskForKernel.

mode (maskPAR) is usually 0x33, sometimes 2.

int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);

sceKernelMMUCheckRangeWithModeForKernel

Version NID
0.931 0xCCDA3B8C
3.60 not present

Return 0 if all pages are valid, < 0 else.

int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);

sceKernelMMUVAtoPAForKernel

Version NID
0.931-3.60 0x2A46E800

Temp name was sceKernelCpuGetPaddrForKernel.

Uses mode (maskPAR) 0x33.

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

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

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

sceKernelCpuGetCONTEXTIDRForKernel

Version NID
3.60 0x5B6B3274

The CONTEXTIDR, bits [31:0] contain the process ID number.

  return (unsigned __int8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)
void sceKernelCpuGetCONTEXTIDRForKernel(void);

sceKernelCpuUpdateSCTLRForKernel

Version NID
3.60 0x04008CF7
  int result;
  result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)
  __mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)
  return result;
void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)

sceKernelCpuBranchPredictorInvalidateAllISForKernel

Version NID
3.60 0x1BB2BB8D
void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)

sceKernelCpuBranchPredictorInvalidateAllForKernel

Version NID
3.60 0x4C4C7D6B
void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all

sceKernelCpuDcacheInvalidateMVACForKernel

Version NID
3.60 0x470EAE1E
void sceKernelCpuDcacheInvalidateMVACForKernel(int mva); // DCIMVAC, Data cache invalidate by MVA (PoC)

sceKernelCpuDcacheInvalidateMVACRangeForKernel

Version NID
3.60 0x583F30D1
void sceKernelCpuDcacheInvalidateMVACRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)

sceKernelDcacheWritebackInvalidateRangeForKernel

Version NID
0.931-3.60 0x6BA2E51C

Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel.

// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)
void sceKernelDcacheWritebackInvalidateRangeForKernel(const void *addr, unsigned int size);

sceKernelCpuDcacheInvalidateSWForKernel

Version NID
3.60 0x2F3BF020
void sceKernelCpuDcacheInvalidateSWForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)

sceKernelCpuDcacheCleanSWForKernel

Version NID
3.60 0x73A30DB2
void sceKernelCpuDcacheCleanSWForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)

sceKernelCpuDcacheCleanInvalidateSWForKernel

Version NID
3.60 0x76DAB4D0
void sceKernelCpuDcacheCleanInvalidateSWForKernel(void); // DCCISW, Data cache clean and invalidate by set/way (all the cache)

sceKernelCpuDcacheCleanMVACForKernel

Version NID
3.60 0xF7159B55
void sceKernelCpuDcacheCleanMVACForKernel(int mva); // DCCMVAC, Data cache clean by MVA (PoC)

sceKernelCpuDcacheCleanMVACRangeForKernel

Version NID
3.60 0xC5C1EE4E
void sceKernelCpuDcacheCleanMVACRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)

sceKernelCpuDcacheCleanInvalidateMVACForKernel

Version NID
3.60 0xC8E8C9E9
void sceKernelCpuDcacheCleanInvalidateMVACForKernel(int mva); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)

sceKernelCpuIcacheInvalidateAllUISForKernel

Version NID
3.60 0x264DA250
3.65 0x803C84BF
void sceKernelCpuIcacheInvalidateAllUISForKernel(void); // ICIALLUIS, Instruction cache invalidate all (PoU, IS)

sceKernelCpuIcacheInvalidateAllUForKernel

Version NID
3.60 0xAEE0B489
void sceKernelCpuIcacheInvalidateAllUForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)

sceKernelCpuIcacheInvalidateMVAURangeForKernel

Version NID
0.931-3.60 0xF4C7F578

Temp name was sceKernelCpuIcacheInvalidateRangeForKernel.

// ICIMVAU, Instruction cache invalidate by MVA (PoU)
void sceKernelCpuIcacheInvalidateMVAURangeForKernel(void *start, SceSize size);

sceKernelIcacheInvalidateRangeForKernel

Version NID
0.931-3.60 0x19F17BD0
3.65-3.68 0x73E895EA

Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.

int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);

sceKernelCpuPreloadEngineKill

Version NID
3.60 0xD0D85FF8
  • NSACR (Non-Secure Access Control Register)
  • Test bit NS access to the Preload Engine resources
  • [>] PLEFF (Preload Engine FIFO flush operation)
  • [>] PLEKC (Preload Engine kill channel operation)
  • [<] PLEASR (Preload Engine Activity Status Register)
int sceKernelCpuPreloadEngineKill(void);

sceKernelCpuUnrestrictedMemcpyForKernel

Version NID
1.69-3.60 0x8C683DEC
3.65 Removed

Unrestricted memcpy by first setting the DACR register to 0xFFFF0000 and then doing a memcpy.

int sceKernelCpuUnrestrictedMemcpyForKernel(void *dest, const void *src, SceSize len);

sceKernelCpuForKernel_9B8173F4

Version NID
3.60 0x9B8173F4

Might be get_vaddr_memory_type.

Return value can be:

  • 2
  • 8
  • 0x40
  • 0x80
  • 0xD0
  • 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)
int sceKernelCpuForKernel_9B8173F4(void *vaddr);

sceKernelCoreSyncAllForKernel

Version NID
3.60 0xA5C9DBBA

This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.

typedef struct SceCpuCoreSyncCtx {
	int lock;
	int16_t core_count;
	int16_t last_wait_core; // 0:core3, 1:core0, 2:core1, 3:core2
} SceCpuCoreSyncCtx;

void sceKernelCoreSyncAllForKernel(SceCpuCoreSyncCtx *pCtx);

sceKernelCoreSyncWaitForKernel

Version NID
0.931-3.60 0x9D72DD1B

This is a temp name.

#define SCE_CPU_WAIT_CORE_0 1
#define SCE_CPU_WAIT_CORE_1 2
#define SCE_CPU_WAIT_CORE_2 3
#define SCE_CPU_WAIT_CORE_3 0

void sceKernelCoreSyncWaitForKernel(SceCpuCoreSyncCtx *pCtx, int core);

sceKernelInitCpuCoreSyncCtxForKernel

Version NID
0.931-3.60 0x4CD4D921

This is a temp name.

void sceKernelInitCpuCoreSyncCtxForKernel(SceCpuCoreSyncCtx *pCtx);

SceCpuForKernel_43CC6E20

Version NID
3.60 0x43CC6E20

DACR off

Does some memory copies between the args.

int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);

sceCpuUnrestrictedBzeroIntForKernel

Version NID
3.60 0x76EB0DD4

DACR off

int sceCpuUnrestrictedBzeroIntForKernel(int *addr);

SceCpuForKernel_337473B5

Version NID
0.931-3.60 0x337473B5

DACR off

If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.

int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);

sceKernelCpuAtomicSubIfGreater64ForKernel

Version NID
3.60 0x37FBFD12

DACR is not disabled

int sceKernelCpuAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);

sceKernelCpuAtomicLimit64ForKernel

Version NID
3.60 0x6190A018

DACR is not disabled

int sceKernelCpuAtomicLimit64ForKernel(unsigned long long *result, int limit);

sceKernelCpuAtomicAdd32AndGet64InRangeForKernel

Version NID
3.60 0xD8A7216C

DACR is not disabled

int sceKernelCpuAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);

sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel

Version NID
3.60 0xD37AABE5

DACR is not disabled

int sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);

sceKernelCpuAtomicGet32AndSet64ForKernel

Version NID
0.990 not present
3.60 0x4553FBDE

DACR is not disabled

int sceKernelCpuAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);

sceKernelCpuAtomicGet32AndSet64_2ForKernel

Version NID
0.990 not present
3.60 0x7FB4E7AC

Exact same code as SceCpuForKernel_4553FBDE.

DACR is not disabled

int sceKernelCpuAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);

sceKernelCpuAtomicDecIfLowPositive32ForKernel

Version NID
3.60 0x8510FA52

DACR is not disabled

int sceKernelCpuAtomicDecIfLowPositive32ForKernel(unsigned int *addr);

sceKernelCpuAtomicHiLoAlgorithmForKernel

Version NID
3.60 0x5F64E5ED

DACR is not disabled

Returns current value (high + low), and sets it to max_low.

int sceKernelCpuAtomicHiLoAlgorithmForKernel(SceUInt32 *max_low);

sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel

Version NID
3.60 0x98E91C1C

DACR is not disabled

If val is negative, returns 2 and does not override val.

int sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel(int *val, int add_val, int limit);

SceCpuForKernel_6C7E7B57

Version NID
0.931-3.60 0x6C7E7B57

Set TTBR lower value (0x4A).

int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);

SceCpuForKernel_AED8F8D7

Version NID
0.931 0xAED8F8D7
3.60 not present

Initialize TTBR.

int SceCpuForKernel_AED8F8D7(const void *ttbr);

SceCpuForKernel_9A3281C0

Version NID
0.990-3.60 0x9A3281C0
3.65 0xC32687D0

Gets start and end of a special code area in which the kernel<->user memory copy routines reside. See SceExcpmgr page for more information about how this is used.

In older firmware, this function also provides the start and end of the "memory access error range" code area (see SceExcpmgrForKernel_C45C0D3D for what this range is for).

//0.990
void SceCpuForKernel_9A3281C0(SceUIntPtr *pMemErrorAreaStart, SceUIntPtr* pMemErrorAreaEnd, SceUIntPtr *pUKCopyAreaStart, SceUIntPtr* pUKCopyAreaEnd)

//3.60+
void SceCpuForKernel_9A3281C0(SceUIntPtr *pUKCopyAreaStart, SceUIntPtr* pUKCopyAreaEnd);

SceCpuForKernel_9CB82EB0

Version NID
3.60 0x9CB82EB0
return;
int SceCpuForKernel_9CB82EB0(void);

SceCpuForDriver

sceKernelRoundupDCacheLine3ForDriver

Version NID
0.931-0.990 0xF0849812
3.60 not present
int sceKernelRoundupDCacheLine3ForDriver(int a1);

sceKernelAbortForDriver

Version NID
0.931-0.990 0x6DCA6903
3.60 not present
void sceKernelAbortForDriver(void);

sceKernelCpuIdForDriver

Version NID
0.990-3.60 0x5E4D5DE1

Return the CPU ID of the current core.

int sceKernelCpuIdForDriver(void);

sceKernelCpuAtomicAddAndGet8ForDriver

Version NID
3.60 0x1E850481
unsigned char sceKernelCpuAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);

sceKernelCpuAtomicAddAndGet16ForDriver

Version NID
3.60 0x59F74E94
unsigned short sceKernelCpuAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicAddAndGet32ForDriver

Version NID
3.60 0x5F6A8743
unsigned int sceKernelCpuAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicAddAndGet64ForDriver

Version NID
3.60 0x4E459A03
unsigned long long sceKernelCpuAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicAddUnless8ForDriver

Version NID
3.60 0x5CC62CEC
int sceKernelCpuAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);

sceKernelCpuAtomicAddUnless16ForDriver

Version NID
3.60 0x0F84AFE9
int sceKernelCpuAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);

sceKernelCpuAtomicAddUnless32ForDriver

Version NID
3.60 0x1F157DC3
int sceKernelCpuAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);

sceKernelCpuAtomicAddUnless64ForDriver

Version NID
3.60 0x06CCFA4B
int sceKernelCpuAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);

sceKernelCpuAtomicAndAndGet8ForDriver

Version NID
3.60 0x32B62B1A
unsigned char sceKernelCpuAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicAndAndGet16ForDriver

Version NID
3.60 0xB281D52A
unsigned short sceKernelCpuAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicAndAndGet32ForDriver

Version NID
3.60 0xDF899E4B
unsigned int sceKernelCpuAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicAndAndGet64ForDriver

Version NID
3.60 0xD18E7B54
unsigned long long sceKernelCpuAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicClearAndGet8ForDriver

Version NID
3.60 0x8E538AB5
unsigned char sceKernelCpuAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicClearAndGet16ForDriver

Version NID
3.60 0x6B050D7C
unsigned short sceKernelCpuAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicClearAndGet32ForDriver

Version NID
3.60 0x78C1F148
unsigned int sceKernelCpuAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicClearAndGet64ForDriver

Version NID
3.60 0x2149CD4C
unsigned long long sceKernelCpuAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicClearMask8ForDriver

Version NID
3.60 0x1B3336B0
void sceKernelCpuAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicClearMask16ForDriver

Version NID
3.60 0x1BE58599
void sceKernelCpuAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicClearMask32ForDriver

Version NID
3.60 0x4AE1BCC0
void sceKernelCpuAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicClearMask64ForDriver

Version NID
3.60 0x55760309
void sceKernelCpuAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicCompareAndSet8ForDriver

Version NID
3.60 0x3627F4E0
unsigned char sceKernelCpuAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);

sceKernelCpuAtomicCompareAndSet16ForDriver

Version NID
3.60 0x6F63F56D
unsigned short sceKernelCpuAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);

sceKernelCpuAtomicCompareAndSet32ForDriver

Version NID
3.60 0xCDA96E81
unsigned int sceKernelCpuAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);

sceKernelCpuAtomicCompareAndSet64ForDriver

Version NID
3.60 0x4B527009
unsigned long long sceKernelCpuAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);

sceKernelCpuAtomicDecIfPositive8ForDriver

Version NID
3.60 0x45153D4E
unsigned char sceKernelCpuAtomicDecIfPositive8ForDriver(unsigned char *addr);

sceKernelCpuAtomicDecIfPositive16ForDriver

Version NID
3.60 0x9A693F5B
unsigned short sceKernelCpuAtomicDecIfPositive16ForDriver(unsigned short *addr);

sceKernelCpuAtomicDecIfPositive32ForDriver

Version NID
3.60 0x2A71B03C
unsigned int sceKernelCpuAtomicDecIfPositive32ForDriver(unsigned int *addr);

sceKernelCpuAtomicDecIfPositive64ForDriver

Version NID
3.60 0x267D0B33
unsigned long long sceKernelCpuAtomicDecIfPositive64ForDriver(unsigned long long *addr);

sceKernelCpuAtomicGetAndAdd8ForDriver

Version NID
3.60 0xFCDCD4DE
unsigned char sceKernelCpuAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicGetAndAdd16ForDriver

Version NID
3.60 0x225DF91A
unsigned short sceKernelCpuAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicGetAndAdd32ForDriver

Version NID
3.60 0x341B6E81
unsigned int sceKernelCpuAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicGetAndAdd64ForDriver

Version NID
3.60 0x043FD446
unsigned long long sceKernelCpuAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicGetAndAnd8ForDriver

Version NID
3.60 0xD8E675C0
unsigned char sceKernelCpuAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);

sceKernelCpuAtomicGetAndAnd16ForDriver

Version NID
3.60 0x4A820BC5
unsigned short sceKernelCpuAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicGetAndAnd32ForDriver

Version NID
3.60 0x10EB35EB
unsigned int sceKernelCpuAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicGetAndAnd64ForDriver

Version NID
3.60 0x18A17E07
unsigned long long sceKernelCpuAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicGetAndClear8ForDriver

Version NID
3.60 0x382D1466
unsigned char sceKernelCpuAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicGetAndClear16ForDriver

Version NID
3.60 0x8E9C086D
unsigned short sceKernelCpuAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicGetAndClear32ForDriver

Version NID
3.60 0xE36F3A46
unsigned int sceKernelCpuAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicGetAndClear64ForDriver

Version NID
3.60 0x88BA6002
unsigned long long sceKernelCpuAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicGetAndOr8ForDriver

Version NID
3.60 0xBDF6F8E4
unsigned char sceKernelCpuAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);

sceKernelCpuAtomicGetAndOr16ForDriver

Version NID
3.60 0x004F09D1
unsigned short sceKernelCpuAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicGetAndOr32ForDriver

Version NID
3.60 0x2A40BB93
unsigned int sceKernelCpuAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicGetAndOr64ForDriver

Version NID
3.60 0xCB73D6D5
unsigned long long sceKernelCpuAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicGetAndSet8ForDriver

Version NID
3.60 0x29599FC8
unsigned char sceKernelCpuAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicGetAndSet16ForDriver

Version NID
3.60 0x085532C8
unsigned short sceKernelCpuAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicGetAndSet32ForDriver

Version NID
3.60 0x0EE04C03
unsigned int sceKernelCpuAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicGetAndSet64ForDriver

Version NID
3.60 0xD2DEE625
unsigned long long sceKernelCpuAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);

sceKernelCpuAtomicGetAndSub8ForDriver

Version NID
3.60 0x7B43D0D7
unsigned char sceKernelCpuAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);

sceKernelCpuAtomicGetAndSub16ForDriver

Version NID
3.60 0x3EE9B5B8
unsigned short sceKernelCpuAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicGetAndSub32ForDriver

Version NID
3.60 0xF891CF2A
unsigned int sceKernelCpuAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicGetAndSub64ForDriver

Version NID
3.60 0xA7585370
unsigned long long sceKernelCpuAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicGetAndXor8ForDriver

Version NID
3.60 0xBAF47F7B
unsigned char sceKernelCpuAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicGetAndXor16ForDriver

Version NID
3.60 0x711801E6
unsigned short sceKernelCpuAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicGetAndXor32ForDriver

Version NID
3.60 0x77E34309
unsigned int sceKernelCpuAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicGetAndXor64ForDriver

Version NID
3.60 0xE212ECAD
unsigned long long sceKernelCpuAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicOrAndGet8ForDriver

Version NID
3.60 0x5D515F1B
unsigned char sceKernelCpuAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicOrAndGet16ForDriver

Version NID
3.60 0xADD39B84
unsigned short sceKernelCpuAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);

sceKernelCpuAtomicOrAndGet32ForDriver

Version NID
3.60 0xBC248C30
unsigned int sceKernelCpuAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);

sceKernelCpuAtomicOrAndGet64ForDriver

Version NID
3.60 0x3E218AF7
unsigned long long sceKernelCpuAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);

sceKernelCpuAtomicSet8ForDriver

Version NID
3.60 0x0836537E
void sceKernelCpuAtomicSet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicSet16ForDriver

Version NID
3.60 0x532CA3E8
void sceKernelCpuAtomicSet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicSet32ForDriver

Version NID
3.60 0x3168BC57
void sceKernelCpuAtomicSet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicSet64ForDriver

Version NID
3.60 0xC381CE8C
void sceKernelCpuAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicSetIfGreaterGet8ForDriver

Version NID
3.60 0xC3868071
unsigned char sceKernelCpuAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicSetIfGreaterGet16ForDriver

Version NID
3.60 0x875B094D
unsigned short sceKernelCpuAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicSetIfGreaterGet32ForDriver

Version NID
3.60 0x26F71995
unsigned int sceKernelCpuAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);

sceKernelCpuAtomicSubAndGet8ForDriver

Version NID
3.60 0xEB085370
unsigned char sceKernelCpuAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);

sceKernelCpuAtomicSubAndGet16ForDriver

Version NID
3.60 0x515682C9
unsigned short sceKernelCpuAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);

sceKernelCpuAtomicSubAndGet32ForDriver

Version NID
3.60 0xA4884C4E
unsigned int sceKernelCpuAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicSubAndGet64ForDriver

Version NID
3.60 0xB5F8919C
unsigned long long sceKernelCpuAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelCpuAtomicXorAndGet8ForDriver

Version NID
3.60 0x03887992
unsigned char sceKernelCpuAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);

sceKernelCpuAtomicXorAndGet16ForDriver

Version NID
3.60 0x646003D6
unsigned short sceKernelCpuAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);

sceKernelCpuAtomicXorAndGet32ForDriver

Version NID
3.60 0x4244BE65
unsigned int sceKernelCpuAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);

sceKernelCpuAtomicXorAndGet64ForDriver

Version NID
3.60 0x692C51B3
unsigned long long sceKernelCpuAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);

sceKernelDcacheInvalidateRange_1ForDriver

Version NID
0.931-3.60 0x02796361

Temp name was sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.

int sceKernelDcacheInvalidateRange_1ForDriver(const void *start, SceSize size);

sceKernelDcacheInvalidateRange_0x10ForDriver

Version NID
0.990 0x614C6698
3.60 not present

Temp name was sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.

int sceKernelDcacheInvalidateRange_0x10ForDriver(const void *start, SceSize size);

sceKernelDcacheInvalidateRange_0x20ForDriver

Version NID
0.990-3.60 0x8B4C26DF

Temp name was sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.

int sceKernelDcacheInvalidateRange_0x20ForDriver(const void *start, SceSize size);

sceKernelDcacheCleanInvalidateRange_1ForDriver

Version NID
0.931-3.60 0x364E68A4

Temp name was sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver.

int sceKernelDcacheCleanInvalidateRange_1ForDriver(const void *start, SceSize size);

sceKernelDcacheCleanInvalidateRange_0x10ForDriver

Version NID
0.990 0x364E68A4
3.60 not present
int sceKernelDcacheCleanInvalidateRange_0x10ForDriver(const void *start, SceSize size);

sceKernelDcacheCleanInvalidateRange_0x20ForDriver

Version NID
0.990-3.60 0xE551F99B

Temp name was sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.

int sceKernelDcacheCleanInvalidateRange_0x20ForDriver(const void *start, SceSize);

sceKernelDcacheCleanRange_1ForDriver

Version NID
0.931-3.60 0x103872A5

Temp name was sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.

int sceKernelDcacheCleanRange_1ForDriver(const void *start, SceSize size);

sceKernelDcacheCleanRange_0x10ForDriver

Version NID
0.990 0x2A5344B7
3.60 not present
int sceKernelDcacheCleanRange_0x10ForDriver(const void *start, SceSize size);

sceKernelDcacheCleanRange_0x20ForDriver

Version NID
0.990-3.68 0x9CB9F0CE

Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.

int sceKernelDcacheCleanRange_0x20ForDriver(const void *start, SceSize size);

SceCpuForDriver_E813EBB2

Version NID
1.69-3.60 0xE813EBB2

Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.

#define SceL2CacheReg 0x1A002000
__dsb();
*(int *)(SceL2CacheReg + 0x730) = 0;
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )
    ;
__dmb();
int SceCpuForDriver_E813EBB2(void);

sceKernelCpuIsVaddrMappedForDriver

Version NID
3.60 0x337CBDF3
  uint32_t vaddr_memory_type = SceCpuForKernel_9B8173F4(vaddr);
  if (vaddr_memory_type != 8) {
    if (vaddr_memory_type <= 8) {
      if (vaddr_memory_type != 2)
        return 0;
    } else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)
      return 0;
  }
  return 1;
int sceKernelCpuIsVaddrMappedForDriver(void *vaddr);

These functions implement a simple mutual exclusive access on a resource address using LDREX/STREX.

sceKernelCpuLockStoreLRForDriver

Version NID
1.60-3.60 0xBF82DEB2
void sceKernelCpuLockStoreLRForDriver(unsigned int *addr);

sceKernelCpuTryLockStoreLRForDriver

Version NID
3.60 0x5AC9D394
unsigned int sceKernelCpuTryLockStoreLRForDriver(unsigned int *addr);

sceKernelCpuUnlockStoreLRForDriver

Version NID
1.60-3.60 0xD6ED0C46
void sceKernelCpuUnlockStoreLRForDriver(unsigned int *addr);

sceKernelCpuLockStoreFlagForDriver

Version NID
3.60 0x3F42B434
void sceKernelCpuLockStoreFlagForDriver(unsigned int *result);

sceKernelCpuTryLockStoreFlagForDriver

Version NID
3.60 0x4F7790B4
unsigned int sceKernelCpuTryLockStoreFlagForDriver(unsigned int *addr);

sceKernelCpuUnlockStoreFlagForDriver

Version NID
3.60 0xCB8ABDF0
void sceKernelCpuUnlockStoreFlagForDriver(unsigned int *addr);

These functions implement a simple mutual exclusive access on a resource addr using LDREX/STREX.

LR is stored as addr value.

While mutex is held, interrupts are disabled.

Used like this:

int prev_state = sceKernelCpuLockSuspendIntrStoreLRForDriver(mutex);
// do work
sceKernelCpuUnlockResumeIntrStoreLRForDriver(mutex, prev_state);

sceKernelCpuLockSuspendIntrStoreLRForDriver

Version NID
0.990-3.60 0xD32ACE9E

Temp name was sceKernelCpuSuspendIntrForDriver.

SceUInt32 sceKernelCpuLockSuspendIntrStoreLRForDriver(SceUInt32 *addr);

sceKernelCpuTryLockSuspendIntrStoreLRForDriver

Version NID
3.60 0x27C0B340
unsigned int sceKernelCpuTryLockSuspendIntrStoreLRForDriver(int *addr);

sceKernelCpuUnlockResumeIntrStoreLRForDriver

Version NID
0.990-3.60 0x7BB9D5DF

Temp name was sceKernelCpuResumeIntrForDriver.

void sceKernelCpuUnlockResumeIntrStoreLRForDriver(SceUInt32 *addr, int prev_state);

These functions implement a simple mutual exclusive access on a resource addr using LDREX/STREX.

0x80000000 is stored as addr value.

While mutex is held, interrupts are disabled.

Used like this:

int prev_state = sceKernelCpuLockSuspendIntrStoreFlagForDriver(mutex);
// do work
sceKernelCpuUnlockResumeIntrStoreFlagForDriver(mutex, prev_state);

sceKernelCpuLockSuspendIntrStoreFlagForDriver

Version NID
0.990-3.60 0x4C38CE4D
int sceKernelCpuLockSuspendIntrStoreFlagForDriver(void *addr);

sceKernelCpuTryLockSuspendIntrStoreFlagForDriver

Version NID
3.60 0xDE6482C6
unsigned int sceKernelCpuTryLockSuspendIntrStoreFlagForDriver(unsigned int *addr);

sceKernelCpuUnlockResumeIntrStoreFlagForDriver

Version NID
0.990-3.60 0x9EC91017
void sceKernelCpuUnlockResumeIntrStoreFlagForDriver(void *addr, unsigned int prev_state);

sceKernelCpuSpinLockStoreLRForDriver

Version NID
3.60 0xCAC9AE80
void sceKernelCpuSpinLockStoreLRForDriver(unsigned int *result);

sceKernelCpuTrySpinLockStoreLRForDriver

Version NID
3.60 0x093925BD
unsigned int sceKernelCpuTrySpinLockStoreLRForDriver(unsigned int *addr);

sceKernelCpuSpinUnlockStoreLRForDriver

Version NID
3.60 0xF5FD5676
void sceKernelCpuSpinUnlockStoreLRForDriver(unsigned int *result);

sceKernelCpuSpinLockSuspendIntrStoreLRForDriver

Version NID
3.60 0xEC53D007
unsigned int sceKernelCpuSpinLockSuspendIntrStoreLRForDriver(unsigned int *addr);

sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver

Version NID
3.60 0xF02467D1
unsigned int sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver(unsigned int *addr);

sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver

Version NID
3.60 0x740A0750
void sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver(unsigned int *addr, unsigned int prev_state);

sceKernelCpuDisableInterruptsForDriver

Version NID
1.60-3.60 0x821FC0EE

Disable irq (but not fiq) and returns previous interrupt bit status (so either 0 or 0x80).

unsigned int sceKernelCpuDisableInterruptsForDriver(void);

sceKernelCpuEnableInterruptsForDriver

Version NID
1.60-3.60 0xF5BAD43B

Restore previous irq state, pass either 0 or 0x80.

unsigned int sceKernelCpuEnableInterruptsForDriver(unsigned int prev_state);

SceSysclibForKernel

Was present on 1.69. Doesn't exist on 3.60.

__vsnprintf_internal

Version NID
0.931-1.50 0xE38E7605
3.60 moved to ForDriver

SceSysclibForKernel_F7E34376

Version NID
1.50 0xF7E34376

SceSysclibForKernel_FA746181

Version NID
0.990-1.50 0xFA746181

return a1 * (- 0x6e19295b) - 0x6e19295b;

In SceSysmem it is used internally to modify a global variable, like a multiplication hash function would do.

int SceSysclibForKernel_FA746181(int a1);

SceSysclibForDriver

The C standard library for use in kernel only. Usermode has access to SceLibKernel, which confusingly is usermode only.

Includes standard string functions (no insecure variants like strcpy).

__aeabi_idiv

Version NID
3.60 0x2518CD9E

__aeabi_lcmp

Version NID
3.60 0x709077A1

__aeabi_lmul

Version NID
3.60 0xFEE5E751

__aeabi_uidiv

Version NID
0.990-3.60 0xA9FF1205

__aeabi_uidivmod

Version NID
0.990-3.60 0xA46CB7DE

__aeabi_ldivmod

Version NID
3.60 0x7554AB04

__aeabi_ulcmp

Version NID
0.931-3.60 0xFE900DE8

__memcpy_chk

Version NID
3.60 0x8A0B0815

__memmove_chk

Version NID
3.60 0x35DBB110

__memset_chk

Version NID
3.60 0x1A30BB28

__stack_chk_fail

Version NID
1.50-3.60 0xB997493D

__stack_chk_guard

Version NID
3.60 0x99EEBD1F

This is a variable.

__strlcat_chk

Version NID
3.60 0x224BE33F

__strlcpy_chk

Version NID
3.60 0xCF86EA38

__strncat_chk

Version NID
3.60 0x33EE298B

__strncpy_chk

Version NID
3.60 0x96268C53

__snprintf_chk

Version NID
3.60 0x7DBE7007

__vsnprintf_chk

Version NID
0.931-0.990 not present
3.60 0xCBF64DF6

__vsnprintf_internal

Version NID
0.931 in ForKernel
3.60 0xE38E7605

Supported format

Format Description
\x20 maybe space fill
# unknown
* unknown
- unknown
+ unknown
. unknown
0 unknown
1~9 unknown
D unknown
L unknown
O unknown
U unknown
X print hex number as uppercase
c print char
d print decimal number
h unknown
l unknown
o unknown
p print pointer as lowercase
s print strings
u unknown
x print hex number as lowercase

sortof_vsnprintf

Version NID
0.931-0.990 0x589BAF6B
3.60 not present

This is a temporary name.

sortof_vsnprintf_2

Version NID
0.931-0.990 0x658EA38E
3.60 not present

This is a temporary name.

vsnprintf

Version NID
0.931-3.60 0x3DDBE2E1
int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);

get_ctype_table

Version NID
0.931-0.990 0x0614B013
3.60 not present

look_ctype_table

Version NID
3.60 0xCDF7F155

memchr

Version NID
3.60 0x60DAEA30

timingsafe_memcmp

Version NID
3.60 0xB5A4D745

timing constant memcmp

memcmp

Version NID
0.931-3.60 0xF939E83D

memcpy

Version NID
0.931-3.60 0x40C88316

memmove

Version NID
1.50-3.60 0x6CC9C1A1

On 1.69, this seems to be implemented incorrectly.

memset

Version NID
0.931-3.60 0x0AB9BF5C

memset2

Version NID
0.931-1.69 0x502B000D
3.60 not present

lshift_1

Version NID
0.931-3.60 0xE46C47E6

This is a temporary name.

Returns the computation of a lot of shifts using the three arguments.

lshift_2

Version NID
0.931-3.60 0x72D31F9D

This is a temporary name.

Returns the computation of a lot of shifts using the three arguments.

rshift

Version NID
0.931-3.60 0x1D89F6C0

snprintf

Version NID
1.69-3.60 0xAE7A8981

strchr

Version NID
1.50-3.60 0x38463759

strcmp

Version NID
1.69-3.60 0x0B33BC43

strlcat

Version NID
3.60 0x12504E09

strlcpy

Version NID
3.60 0x7FB4EBEC

strlen

Version NID
0.931-3.60 0xCFC6A9AC

strncat

Version NID
1.69-3.60 0xA1D1C32C

strncmp

Version NID
1.60-3.60 0x12CEE649

strncpy

Version NID
0.931-3.60 0x6D286146

strncpy_s

Version NID
0.931 not present
0.990-3.60 0xFE39AEAC

strnlen

Version NID
1.69-3.60 0xCD4BD884

strrchr

Version NID
1.69-3.60 0x7F0E0835

strstr

Version NID
1.69-3.60 0x1304A69D

strtol

Version NID
0.931-3.60 0xAB77C5AA

SceSysclibForDriver_32373DF7

Version NID
0.931-0.990 0x32373DF7
3.60 not present

Helper for strtol in base 10.

int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);

strtoll

Version NID
3.60 0x87AAAFA2

strtoul

Version NID
3.60 0x4E5042DA

tolower

Version NID
3.60 0x0021DAF9

toupper

Version NID
3.60 0xA685DCB1

SceSysclibForDriver_9D148CDE

Version NID
0.931-3.60 0x9D148CDE

Returns the 64-bit quotient of the division of dividend by divisor.

Used for example to convert SceRtc ticks to a simpler format (divide by time unit in ms) or to compute the number of storage device blocks in SceStor (divide by block size).

// ex: SceSysclibForDriver_9D148CDE(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000,0);
SceUInt64 SceSysclibForDriver_9D148CDE(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);

SceSysclibForDriver_33388DBC

Version NID
0.931-0.990 0x33388DBC
3.60 not present

Calculates xor of a1 and a2, then does some calculation with a3.

SceSysclibForDriver_72429909

Version NID
0.931-0.990 0x72429909
3.60 not present

SceSysrootForKernel

SceSysrootForKernel_611F17A4

Version NID
0.931-3.60 0x611F17A4

Registers the function called by #SceSysrootForKernel_118657C6.

int SceSysrootForKernel_611F17A4(void *func);

SceSysrootForKernel_118657C6

Version NID
0.931-3.65 0x118657C6

Calls the function registered by #SceSysrootForKernel_611F17A4.

Used in SceExcpmgr.

SceKernelProcessContext* SceSysrootForKernel_118657C6(void);

SceSysrootForKernel_081F2C20

Version NID
0.931-0.990 not present
1.60-1.69 0x081F2C20
3.60 not present

Registers sceKernelGetProcessId_2 from SceKernelThreadMgr.

int SceSysrootForKernel_081F2C20(void *func);

SceSysrootForKernel_C5EAF5F7

Version NID
0.990-3.60 0xC5EAF5F7

Registers the function called by #SceSysrootForKernel_47724459.

int SceSysrootForKernel_C5EAF5F7(void *func);

SceSysrootForKernel_47724459

Version NID
0.990-3.60 0x47724459

Calls the function registered by #SceSysrootForKernel_C5EAF5F7.

SceSysrootForKernel_8747D415

Version NID
0.990-3.60 0x8747D415

Registers the function used by #SceSysrootForKernel_B27B7530.

int SceSysrootForKernel_8747D415(void *func);

SceSysrootForKernel_B27B7530

Version NID
0.990-3.60 0xB27B7530

Calls the function registered by #SceSysrootForKernel_8747D415.

Used by SceKernelBusError.

SceSysrootForKernel_82FC6405

Version NID
0.990-3.60 0x82FC6405

Registers the function used by #SceSysrootForKernel_CD4B84F7.

Used by SceKernelBusError.

int SceSysrootForKernel_82FC6405(void *func);

SceSysrootForKernel_CD4B84F7

Version NID
0.990-3.60 0xCD4B84F7

Calls the function registered by #SceSysrootForKernel_82FC6405.

Used by SceKernelBusError.

SceSysrootForKernel_733C243E

Version NID
0.990-3.60 0x733C243E

Registers many Sysroot SceProcessmgr callbacks.

int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);

SceSysrootForKernel_7334F1E8

Version NID
3.60 0x7334F1E8

Calls SceProcessmgr#SceProcessmgrForKernel_C77C2085 function registered by #SceSysrootForKernel_733C243E.

int SceSysrootForKernel_7334F1E8(SceUID pid);

SceSysrootForKernel_D29BCA77

Version NID
0.990-3.60 0xD29BCA77

Registers many Sysroot SceProcessmgr callbacks.

int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);

SceSysrootForKernel_DD7821AA

Version NID
0.990-3.60 0xDD7821AA

Register the function called by #SceSysrootForKernel_340575CB.

int SceSysrootForKernel_DD7821AA(void *func);

SceSysrootForKernel_340575CB

Version NID
0.990-3.60 0x340575CB

Return some PID.

SceUID SceSysrootForKernel_340575CB(void);

sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel

Version NID
0.990-3.60 0xBE1EF51C

Registers the function called by #sceKernelSysrootCheckRemapCodeForUserForKernel.

int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);

sceKernelSysrootCheckRemapCodeForUserForKernel

Version NID
0.990-3.60 0xF8769E86

sceKernelAllocCurrentProcessHeapForKernel

Version NID
0.990-3.60 0x2F75C1DC
void *sceKernelAllocCurrentProcessHeapForKernel(SceSize size);

sceKernelSysrootCorelockUnlockForKernel

Version NID
0.931-3.60 0xAE55B7CC

Calls #SceCpuForKernel_A5C9DBBA.

void sceKernelSysrootCorelockUnlockForKernel(void);

SceSysrootForKernel_21F5790B

Version NID
0.931 not present
3.60 0x21F5790B

Registers a function related to kernel panic.

int SceSysrootForKernel_21F5790B(void *func);

SceSysrootForKernel_0DF574A9

Version NID
0.931 not present
3.60 0x0DF574A9

Calls the function related to kernel panic registered by #SceSysrootForKernel_21F5790B.

int SceSysrootForKernel_0DF574A9(void);

SceSysrootForKernel_2D6B2A79

Version NID
0.990-3.60 0x2D6B2A79

Registers a function related to kernel panic, called by #SceSysrootForKernel_CC7A0E63.

SceSysrootForKernel_CC7A0E63

Version NID
0.990-3.60 0xCC7A0E63

Calls a function related to kernel panic, registered by #SceSysrootForKernel_2D6B2A79.

// type: 1: kernel_assertion_or_panic, 3: kernel_exception
// size: must be <= 0x1000
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);

SceSysrootForKernel_1D84C4D4

Version NID
0.931 not present
3.60-3.65 0x1D84C4D4

Get module name, dbgFingerprint and base from address.

int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);

SceSysrootForKernel_5B5EBFB1

Version NID
3.60 0x5B5EBFB1

Registers pointer to SceLT5 used by #SceSysrootForKernel_E20F6FC8.

int SceSysrootForKernel_5B5EBFB1(uint a1);

SceSysrootForKernel_41636522

Version NID
3.60 0x41636522

Returns current SceLT5 value pointed by pointer registered using #SceSysrootForKernel_E20F6FC8. Long/low (64bit) time in microseconds. It is about "awake" uptime from system boot.

uint64_t SceSysrootForKernel_41636522(void);

SceSysrootForKernel_E20F6FC8

Version NID
0.931 not present
3.60-3.65 0xE20F6FC8

Same as #SceSysrootForKernel_41636522 but "asynchronous".

Used by SceDebug Kernel Exceptions handlers.

uint64_t SceSysrootForKernel_E20F6FC8(void);

SceSysrootForKernel_1D8DB3A5

Version NID
3.60 0x1D8DB3A5

Same as #SceSysrootForKernel_41636522 but "asynchronous".

Returns 0 on success, 0x80020006 if pTime is a NULL pointer.

int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);

sceKernelSysrootCorelockLockForKernel

Version NID
0.931-3.60 0x8E4B61F1

Calls SceCpuForKernel_9D72DD1B.

int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);

SceSysrootForKernel_06182D59

Version NID
3.60 0x06182D59

Reimplementation:

int SceSysrootForKernel_06182D59(int a1) {
	return *(uint32_t *)(pSysroot + 0x20) + (a1 << 0x5);
}
int SceSysrootForKernel_06182D59(int a1);

SceSysrootForKernel_7385CADE

Version NID
0.990 not present
3.60 0x7385CADE

Get current syscall PID.

// Returns KERNEL_PID if the function has not been set
SceUID SceSysrootForKernel_7385CADE(void);

SceSysrootForKernel_D441DC34

Version NID
0.990 not present
3.60 0xD441DC34

Executes a function registered by #SceSysrootForKernel_26458702, related to syscall frame printing on kernel panic.

get_SceKernelSysrootClass_itemsize

Version NID
0.990-3.60 0xEEB867C0

On FW 0.990 return hardcoded value 0x470.

On FW 3.60 return hardcoded value 0x41C.

SceSize get_SceKernelSysrootClass_itemsize(void);

get_SceKernelSysrootClass_object

Version NID
0.990-3.60 0x085C2BCB
SceKernelObject *get_SceKernelSysrootClass_object(void);

sceKernelSysrootGetLibraryDBForKernel

Version NID
0.990 0xCD70C9D7

sceKernelSysrootSetLibraryDBForKernel

Version NID
0.990 0xCB58A0F4

sceKernelSysrootAllocForKernel

Version NID
0.940-0.990 0xB0149E69
void *sceKernelSysrootAllocForKernel(SceSize size);

sceKernelSysrootSetStatusForKernel

Version NID
0.990-3.60 0xA84676E3
status description
3 Global malloc heap initialization completed.
4 Start initialization for load the module
0x10 Initialization to load the module is complete
0x100 First process create
0x1000 Kernel boot completed.
int sceKernelSysrootSetStatusForKernel(SceUInt32 status);

sceKernelSysrootGetProcessCBExitDeleteThreadForKernel

Version NID
0.990-3.60 0xBBFD2E3C

sceKernelSysrootGetCurrentProcessCBForKernel

Version NID
0.990-3.60 0x9991B1AF

sceKernelSysrootGetCurrentThreadAttrForKernel

Version NID
0.990-3.60 0x73601453
int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);

sceKernelGetCurrentTimeForKernel

Version NID
0.990 0x4FCFA359
SceRtcTick *sceKernelGetCurrentTimeForKernel(void);

sceKernelSysrootGetSystemTimeForKernel

Version NID
0.990 0xE0D41319
3.60 not present
int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)

sceKernelGetSystemTimeLowForKernel

Version NID
0.990 0x2464329D
3.60 not present
int sceKernelGetSystemTimeLowForKernel(void);

sceKernelSysrootAssertSysrootForKernel

Version NID
0.990 0x1B7F150F

Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).

int sceKernelSysrootAssertSysrootForKernel(void *sysroot);

sceKernelSysrootSetVbaseResetVectorForKernel

Version NID
0.990-3.60 0x0F2F2B4E

sceKernelSysrootThreadMgrStartAfterProcessForKernel

Version NID
0.990-3.60 0x0EB5D7CD

sceKernelSysrootGetCurrentProcessForKernel

Version NID
0.931-0.990 0x5B7570C5

Return the current process id.

SceUID sceKernelSysrootGetCurrentProcessForKernel(void);

sceKernelSysrootTrapThreadAfterSyscallForKernel

Version NID
0.990-3.60 0x9139E22B

sceKernelSysrootReturnFromExcpToThreadForKernel

Version NID
0.931-3.65 0xDADFF828

Used in SceExcpmgr.

int sceKernelSysrootReturnFromExcpToThreadForKernel(void);

sceKernelSysrootBacktraceForKernel

Version NID
0.931-3.60 0xCC893F37

See also SceKernelModulemgr#SceSceBacktraceForDriver.

int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);

sceKernelSysrootPrintBacktraceForKernel

Version NID
0.931-3.60 0x491CE8DF

See also SceKernelModulemgr#SceSceBacktraceForDriver.

int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);

sceKernelSysrootRegisterBacktraceForKernel

Version NID
0.940 0x1C307A31
3.60 not present
int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());

sceKernelSysrootGetSharedMemoryForKernel

Version NID
0.990-3.60 0xC8C8C321

sceKernelSysrootSetSharedMemoryForKernel

Version NID
0.990-3.60 0xFBB91741

sceKernelSysrootGetPUIDEntryHeapForKernel

Version NID
0.990-3.60 0x88DE85EF
int sceKernelSysrootGetPUIDEntryHeapForKernel(SceUID pid, void **entryHeap);

sceKernelSysrootGetStatusForKernel

Version NID
0.990-3.60 0x5C426B19
int sceKernelSysrootGetStatusForKernel(void);

sceKernelSysrootIofilemgrStartForKernel

Version NID
0.990-3.60 0xF6A6D205

sceKernelSysrootSetCurrentAddressSpaceCBForKernel

Version NID
0.940 0x63EBB05B
3.60 not present
int sceKernelSysrootSetCurrentAddressSpaceCBForKernel(void *pasCB);

sceKernelSysrootGetCurrentAddressSpaceCBForKernel

Version NID
0.940-3.60 0x63EBB05B

Calls the function registered by #SceSysrootForKernel_26458702.

callback *sceKernelSysrootGetCurrentAddressSpaceCBForKernel();

SceSysrootForKernel_BF82931F

Version NID
3.60 0xBF82931F

Calls the function registered by #SceSysrootForDriver_2BE874EF.

No usage seen on CEX OS. Maybe used in DEX/TOOL OS.

int SceSysrootForKernel_BF82931F(int maybe_app_id, void *pOut);

SceSysrootForKernel_6D111FA7

Version NID
3.60 0x6D111FA7

Calls the function registered by #SceSysrootForDriver_3B19B06B.

Used only in SceCoredump.

int SceSysrootForKernel_6D111FA7(int maybe_app_id, void *pOut);

SceSysrootForKernel_2A03DFA1

Version NID
3.60 0x2A03DFA1

Calls the function registered by #SceSysrootForDriver_70AD47A9.

Used only in SceCoredump.

// pOut: A buffer of at least 0xF8 bytes
int SceSysrootForKernel_2A03DFA1(void *pOut);

sceKernelSysrootAppMgrSpawnProcessForKernel

Version NID
0.990-3.60 0x3ACACD22

sceKernelSysrootGetCachedSecureModuleInfoForKernel

Version NID
3.60 0xF10AB792

Temp name was sceKernelSysrootGetSmSelfInfoForKernel.

Index SM SELF location
0 os0:sm/gcauthmgr_sm.self
1 os0:sm/rmauth_sm.self
2 os0:sm/encdec_w_portability_sm.self
int sceKernelSysrootGetCachedSecureModuleForKernel(SceCachedSecureModule id, SceCachedSecureModuleInfo *pInfo);

sceKernelSysrootGetProcessSelfAuthInfoForKernel

Version NID
0.931-3.60 0x4F0A4066

Temp name was sceSysrootGetSelfAuthInfoForKernel.

int sceKernelSysrootGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *pSelfAuthInfo);

sceKernelSysrootGetProcessTitleIdForKernel

Version NID
3.60 0xEC3124A3

Temp name was sceSysrootGetProcessTitleIdForPidForKernel.

int sceKernelSysrootGetProcessTitleIdForKernel(SceUID pid, char *title_id, SceSize len);

sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel

Version NID
3.60 0xB39CD708
int sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel(void *func);

sceKernelSysrootGetFunctionNameByNIDForKernel

Version NID
3.60 0x0B79E220

Mirror of SceSysLibTrace#sceNidsymtblGetFunctionNameByNIDForDriver.

int sceKernelSysrootGetFunctionNameByNIDForKernel(SceNID funcnid, const char **name);

SceSysrootForKernel_26458702

Version NID
0.990 not present
3.60 0x26458702

Registers some functions.

SceSysrootForKernel_B171CC2D

Version NID
0.990 not present
3.60 0xB171CC2D

Seems to be used to register some functions.

used by SceKernelModulemgr

int SceSysrootForKernel_B171CC2D(SceSysrootModulemgrHandlers *pHandlers);

sceKernelSysrootGetProcessSyscallInfoForKernel

Version NID
3.60 0xFF9F80FF
int sceKernelSysrootGetProcessSyscallInfoForKernel(SceUID pid, const void *PC, SceSyscallInfo *pInfo);

sceKernelSysrootGetVbaseResetVectorForKernel

Version NID
0.990-3.60 0xCC85905B

Returns the exception vectors base address. The address of the exception vectors for the CPU i is: sceKernelSysrootGetVbaseResetVectorForKernel() + 0x40 * i.

void *sceKernelSysrootGetVbaseResetVectorForKernel(void);

sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel

Version NID
3.60 0x71DB83A2

Registers SceSblPostSsMgr#sceSblLicMgrGetLicenseStatusForDriver.

int sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel(int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)());

sceKernelSysrootLicMgrGetLicenseStatusForKernel

Version NID
3.60 0x377895EB

Called by sceSblAuthMgrAuthHeaderForKernel before Cmep request.

int sceKernelSysrootLicMgrGetLicenseStatusForKernel(void);

sceKernelSysrootGetSysrootForKernel

Version NID
3.60-3.65 0x3E455842

Temp name was sceKernelGetSysbaseForKernel.

SceSysroot *sceKernelSysrootGetSysrootForKernel(void);

sceKernelSysrootGetKblParamForKernel

Version NID
0.931-3.65 0x9DB56D1F

Temp name was sceKernelGetSysrootBufferForKernel, sceSysrootGetSysrootBufferForKernel.

Returns pointer to KBL Param.

SceKblParam *sceKernelSysrootGetKblParamForKernel(void);

sceSysrootGetFactorySystemSwVersionForKernel

Version NID
3.60 0xD3872270

return (int)(kbl_param->factory_fw_version);

int sceSysrootGetFactorySystemSwVersionForKernel(void);

sceSysrootGetUnkCForKernel

Version NID
3.60 0xFFD6E24D

return (int)(kbl_param->unk_C);

int sceSysrootGetUnkCForKernel(void);

sceSysrootGetUnk10ForKernel

Version NID
0.990-3.60 0x403B509E

return (int)(kbl_param->unk_10);

Used by SceKernelBusError.

int sceSysrootGetUnk10ForKernel(void);

sceSysrootGetUnkC0ForKernel

Version NID
3.60 0xAB3CC7D0

return kbl_param->unk_C0;

int sceSysrootGetUnkC0ForKernel(void);

sceSysrootGetWakeupFactorForKernel

Version NID
3.60 0x2F97041A

return kbl_param->wakeup_factor;

int sceSysrootGetWakeupFactorForKernel(void);

sceSysrootGetSessionIdForKernel

Version NID
3.60 0x84783B71

Writes kbl_param->session_id to buffer.

Buffer size is 0x10.

int sceSysrootGetSessionIdForKernel(char *buffer);

sceSysrootIsExternalBootModeForKernel

Version NID
3.60 0x89D19090

return *(int *)(kbl_param->boot_type_indicator_1) & 1;

int sceSysrootIsExternalBootModeForKernel(void);

sceKernelIsSomeBootModeForKernel

Version NID
3.60 0x7B7F8171

??? sceKernelIsAllowSdCardFromMgmt ???

return (*(int *)(kbl_param->boot_type_indicator_1) >> 19) & 1;

Return true if boot_type_indicator_1 has flag 0x80000 ?sd mode? - (Mgmt bit 1)

int sceSysrootIsSomeBootModeForKernel(void);

sceSysrootIsExternalBootMode2ForKernel

Version NID
3.60 0x7918D44E

This is a guessed name.

Temp name was sceSysrootIsSomeBootMode2ForKernel.

??? sceKernelIsAllowFwCheckSkip ???

return kbl_param->boot_type_indicator_1[2] & 1;

Return true if boot_type_indicator_1 has flag 0x10000 seems to be never set in external (release) second_loader, allows to bypass current fw check for module loading

int sceSysrootIsExternalBootMode2ForKernel(void);

sceSysrootIsUartModeForKernel

Version NID
0.931-3.60 0xAE7A8F1D

Temp name was sceSysrootIsSomeModeForKernel. This is a guessed name.

Returns true if (kbl_param->boot_flags[1] != 0xFF).

Used to check if UART must be initialized or not.

int sceSysrootIsUartModeForKernel(void);

sceKernelSysrootIsSafeModeForKernel

Version NID
0.990-3.60 0x834439A7
int sceKernelSysrootIsSafeModeForKernel(void);

sceKernelSysrootIsUpdateModeForKernel

Version NID
3.60 0xB0E1FC67
int sceKernelSysrootIsUpdateModeForKernel(void);

sceSysrootIsBsodRebootForKernel

Version NID
3.60 0x4373AC96

return ((pKblParam->wakeup_factor) & 0x7Fu) == 0x17;

int sceSysrootIsBsodRebootForKernel(void);

sceSysrootIsUsbEnumWakeupForKernel

Version NID
3.60 0x79C9AE10
 if ( *(int *)(kbl_param->unk_C0) & 0x90000 )
   result = 1;
 else
   result = (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) <= 0xF;
 return result;
int sceSysrootIsUsbEnumWakeupForKernel(void);

sceSysrootIsUnknownRebootForKernel

Version NID
3.60 0xE4EA1960

return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) <= 1;

int sceSysrootIsUnknownRebootForKernel(void);

sceSysrootIsManufacturingModeForKernel

Version NID
0.940-3.60 0x55392965


This is a guessed name. Temp name was sceSysrootUseExternalStorageForKernel.

When returns true it allows loading sd0:psp2config.skprx.

Returns true when Manufacturing Mode flag is set:

return (*(int *)(kbl_param->boot_type_indicator_1) >> 2) & 1;

int sceSysrootIsManufacturingModeForKernel(void);

sceSysrootUseInternalStorageForKernel

Version NID
3.60 0x50FE3B4D

Returns true when use internal storage flag is not set:

return *(char *)(kbl_param->boot_flags[5]) & 1 ^ 1;

int sceSysrootUseInternalStorageForKernel(void);

sceKernelSysrootGetThreadAccessLevelForKernel

Version NID
3.60 0x20009397

Calls int (__cdecl *GetThreadAccessLevel)(); // 0x344 on 3.60

int sceKernelSysrootGetThreadAccessLevelForKernel(void);

sceKernelSysrootAllocRemoteProcessHeapForKernel

Version NID
0.990-3.60 0xD351EBC8

Temp name was sceKernelAllocHeapMemoryForKernel.

Same as sceKernelAllocHeapMemoryWithOptForDriver but does set pid to 0x1000B.

Checks that pid is 0x10013 or 0x10005 (kernel).

void* sceKernelSysrootAllocRemoteProcessHeapForKernel(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelSysrootGetModulePrivateForKernel

Version NID
0.990-3.60 0x37EC12BB

data size : 3:0xDC, 9:0xAC

void *sceKernelSysrootGetModulePrivateForKernel(int idx);

sceKernelSysrootSetModulePrivateForKernel

Version NID
0.990-3.65 0x7A7E7C0C
void sceKernelSysrootSetModulePrivateForKernel(int idx, void *data);

sceKernelSysrootSetSysrootForKernel

Version NID
0.940-3.60 0x36916C30
void sceKernelSysrootSetSysrootForKernel(SceUID sysroot_uid);

sceKernelSysrootProcessmgrStart2ForKernel

Version NID
0.990-3.60 0x62E8F511

sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel

Version NID
0.990-3.60 0x256B2394

sceKernelSysrootRegisterIsUserModeThreadForKernel

Version NID
0.940 0x5BD911A8
3.60 not present
int sceKernelSysrootRegisterIsUserModeThreadForKernel(void *func);

sceKernelSysrootIsUserModeThreadForKernel

Version NID
0.940-3.60 0x7FC7A163

sceKernelSysrootGetSecureStatusForKernel

Version NID
0.940 0x0A63CA5E
3.60 not present

return *(uint *)some_buf->field_0x28 & 1;

int sceKernelSysrootGetSecureStatusForKernel(void);

sceKernelIsSecureStateForKernel

Version NID
0.940 0x3193DAB2
3.60 not present

return (*(uint *)some_buf->field_0x28 ^ 1) & 1;

SceBool sceKernelIsSecureStateForKernel(void);

sceKernelIsColdBootForKernel

Version NID
0.940-3.60 0xD7198963

return (*(uint *)some_buf->field_0x28 & 10; // FW 3.60 in IDA PRO

return ((*(uint *)some_buf->field_0x28 ^ 0x10) << 0x1b) >> 0x1f; // FW 0.940 in Ghidra

int sceKernelIsColdBootForKernel(void);

SceSysrootForDriver

sceKernelSysrootSetVipRpcDebugFuncForDriver

Version NID
3.60 0xA6A0A038

This is a guessed name.

void sceKernelSysrootSetVipRpcDebugFuncForDriver(SceKernelSysrootVipRpcDebugFunc func);

sceKernelSysrootClearVipRpcDebugFuncForDriver

Version NID
3.60 0x0ECD711E

This is a guessed name.

void sceKernelSysrootClearVipRpcDebugFuncForDriver();

sceKernelSysrootGetVipRpcDebugFuncForDriver

Version NID
3.60 0x483EF108

This is a guessed name.

SceKernelSysrootVipRpcDebugFunc sceKernelSysrootGetVipRpcDebugFuncForDriver();

sceKernelSysrootSetVeneziaRpcDebugFuncForDriver

Version NID
3.60 0x47F19DD3

This is a guessed name.

void sceKernelSysrootSetVeneziaRpcDebugFuncForDriver(SceKernelSysrootVeneziaRpcDebugFunc func);

sceKernelSysrootClearVeneziaRpcDebugFuncForDriver

Version NID
3.60 0x5B106EB3

This is a guessed name.

void sceKernelSysrootClearVeneziaRpcDebugFuncForDriver();

sceKernelSysrootGetVeneziaRpcDebugFuncForDriver

Version NID
3.60 0x49843C16

This is a guessed name.

SceKernelSysrootVeneziaRpcDebugFunc sceKernelSysrootGetVeneziaRpcDebugFuncForDriver();

SceSysrootForDriver_2A5DBD38

Version NID
0.931-0.990 not present
3.60 0x2A5DBD38

Sets a value to 3.

void SceSysrootForDriver_2A5DBD38(void);

sceSysrootGetTimebaseClockFrequencyForDriver

Version NID
0.931-0.990 not present
3.60 0xBFD8F2A2

Calls the function registered by #SceSysrootForDriver_C94C76FA.

Functions are registered only in DevKit.

Used by SceGpuEs4.

SceUInt32 sceSysrootGetTimebaseClockFrequencyForDriver(void);

SceSysrootForDriver_C94C76FA

Version NID
0.931-0.990 not present
3.60 0xC94C76FA

Registers some Sysroot functions.

int SceSysrootForDriver_C94C76FA(SceSysrootForDriver_C94C76FA_struct *pParam);

SceSysrootForDriver_2BE874EF

Version NID
3.60 0x2BE874EF

Registers the function called by #SceSysrootForKernel_BF82931F.

Used only in SceAppMgr.

int SceSysrootForDriver_2BE874EF(void *func);

SceSysrootForDriver_3B19B06B

Version NID
3.60 0x3B19B06B

Registers the function called by #SceSysrootForKernel_6D111FA7.

Used only in SceAppMgr.

int SceSysrootForDriver_3B19B06B(void *func);

SceSysrootForDriver_70AD47A9

Version NID
3.60 0x70AD47A9

Registers the function called by #SceSysrootForKernel_2A03DFA1.

Used only in SceAppMgr.

int SceSysrootForDriver_70AD47A9(void *func);

SceSysrootForDriver_AA770EF7

Version NID
0.931 not present
3.60 0xAA770EF7

Registers the function called by #SceSysrootForDriver_591BB490.

The function is registered from SceTty2uart only if DIP Switch 211 is set.

int SceSysrootForDriver_AA770EF7(void *func);

SceSysrootForDriver_591BB490

Version NID
0.931 not present
3.60 0x591BB490

Calls the function registered by #SceSysrootForDriver_AA770EF7.

Gets tty2uart information into a 0x1000-sized buffer, similarly to #sceKernelGetTtyInfoForDriver. Returns some size, maybe size of the written tty2uart buffer.

Used only in SceCoredump.

// size: usually 0x1000
int SceSysrootForDriver_591BB490(int magic_or_size, void *pBuf, SceSize size

SceSysrootForDriver_C5EAF5F7

Version NID
0.990-3.60 0xC5EAF5F7

Registers the function called by #SceSysrootForDriver_47724459.

int SceSysrootForDriver_C5EAF5F7(void *func);

SceSysrootForDriver_47724459

Version NID
0.990-3.60 0x47724459

Calls the function registered by #SceSysrootForDriver_C5EAF5F7.

SceSysrootForDriver_F9FB9A2A

Version NID
0.990 0xF9FB9A2A
3.60-3.73 not present

Registers the function called by #SceSysrootForDriver_40F28DC6.

int SceSysrootForDriver_F9FB9A2A(void *func);

SceSysrootForDriver_40F28DC6

Version NID
0.990 0x40F28DC6
3.60-3.73 not present

Calls the function registered by #SceSysrootForDriver_F9FB9A2A.

sceKernelSysrootGetCompiledSdkVersionByPidForDriver

Version NID
0.931-0.990 not present
2.00-3.60 0xCAE820B2

Temp name was sceKernelGetProcessHeapIDForDriver.

Calls the function registered by #SceSysrootForKernel_D29BCA77.

Used in SceKernelModulemgr functions that load modules, for example SceKernelModulemgr#sceKernelStartModuleForPidForKernel.

int sceKernelSysrootGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);

SceSysrootForDriver_8747D415

Version NID
0.990-3.60 0x8747D415

Registers the function called by #SceSysrootForDriver_B27B7530.

int SceSysrootForDriver_8747D415(void *func);

SceSysrootForDriver_B27B7530

Version NID
0.990-3.60 0xB27B7530

Calls the function registered by #SceSysrootForDriver_8747D415.

SceSysrootForDriver_82FC6405

Version NID
0.990-3.60 0x82FC6405

Registers the function called by #SceSysrootForDriver_CD4B84F7.

int SceSysrootForDriver_82FC6405(void *func);

SceSysrootForDriver_CD4B84F7

Version NID
0.990-3.60 0xCD4B84F7

Calls the function registered by #SceSysrootForDriver_82FC6405.

SceSysrootForDriver_FF2DD7AB

Version NID
3.60 0xFF2DD7AB

Registers something.

typedef struct SceSysrootForDriver_FF2DD7AB_struct { // size is 0x1C on FW 3.60
  SceSize size; // Size of this structure
  char unk_4[0x18];
} SceSysrootForDriver_FF2DD7AB_struct;

int SceSysrootForDriver_FF2DD7AB(SceSysrootForDriver_FF2DD7AB_struct *pData);

SceSysrootForDriver_3AE319DA

Version NID
3.60 0x3AE319DA

Used by SceSyscon.

Get something registered by #SceSysrootForDriver_FF2DD7AB.

int SceSysrootForDriver_3AE319DA(void);

sceSysrootGetHardwareFlagsForDriver

Version NID
3.60 0x46E72428

Writes kbl_param->hardware_flags to buffer.

Buffer size is 0x10.

int sceSysrootGetHardwareFlagsForDriver(void *pData);

sceSysrootGetHardwareInfoForDriver

Version NID
3.60 0x930B1342

return kbl_param->hardware_info;

int sceSysrootGetHardwareInfoForDriver(void);

sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver

Version NID
3.60 0xE541959B
int sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver(void *func);

sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver

Version NID
3.60 0x9421B223
int sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver(void);

sceKernelSysrootSDfCtlSetBootParameterForDriver

Version NID
3.60 0x7AAC4EE7
// bootparam max size is 0x80 bytes
int sceKernelSysrootSDfCtlSetBootParameterForDriver(const char *bootparam);

sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver

Version NID
3.60 0x35875119

Registers the function called by #sceKernelSysrootUtMgrGetTrilithiumBufferForDriver.

int sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver(void *func);

sceKernelSysrootUtMgrGetTrilithiumBufferForDriver

Version NID
3.60 0xD75D4F37
int sceKernelSysrootUtMgrGetTrilithiumBufferForDriver(SceUtokenDecrypted *buffer);

sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver

Version NID
0.990 not present
3.60 0xA12C9950

Registers the function called by #sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver.

The function is SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465.

int sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver(void *func);

sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver

Version NID
3.60 0x56D85EB0

Used by SceSblACMgr.

Calls the function registered by #sceKernelSysrootSetSceSblPostSsMgrForDriver_56D85EB0FuncForDriver.

The function is SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465.

sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver

Version NID
0.990 not present
3.60 0xE25D2FD5

Registers the functions called by #sceKernelSysrootSblUtMgrHasUNK1FlagForDriver.

int sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver(void *func);

sceKernelSysrootSblUtMgrHasUNK1FlagForDriver

Version NID
0.990 not present
3.60 0x26AA237C

Calls the function registered by #sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver.

int sceKernelSysrootSblUtMgrHasUNK1FlagForDriver(void);

sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver

Version NID
3.60 0xE2E88E3E

Registers the function called by #sceKernelSysrootSblUtMgrHasUNK2FlagForDriver.

int sceKernelSysrootsceSetSblUtMgrHasUNK2FlagFuncForDriver(void *func);

sceKernelSysrootSblUtMgrHasUNK2FlagForDriver

Version NID
3.60 0xE2515A08

Calls the function registered by #sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver.

Used by SceSblACMgr#sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver.

int sceKernelSysrootSblUtMgrHasUNK2FlagForDriver(void);

sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver

Version NID
3.60 0xEE5D6CE9
int sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver(void *func);

sceKernelSysrootUtMgrHasNpTestFlagForDriver

Version NID
3.60 0xA43599E9
int sceKernelSysrootUtMgrHasNpTestFlagForDriver(void);

SceSysrootForDriver_2D6B2A79

Version NID
0.990-3.60 0x2D6B2A79

Registers a function related to kernel panic, called by #SceSysrootForDriver_CC7A0E63 or #SceSysrootForKernel_CC7A0E63.

SceSysrootForDriver_CC7A0E63

Version NID
0.990-3.60 0xCC7A0E63

Calls a function related to kernel panic, registered by #SceSysrootForDriver_2D6B2A79 or #SceSysrootForKernel_2D6B2A79.

// type: 1: kernel_assertion_or_panic, 3: kernel_exception
// size: must be <= 0x1000
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
int SceSysrootForDriver_CC7A0E63(int type, SceSize size, const char *pBuf);

sceKernelSysrootDisableAutoClockDownForDriver

Version NID
0.931 not present
3.60 0xEE934615

Derived from vshbridge.

return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0x10);

Adds 0x10 from a SceSysmem global variable and returns it.

int sceKernelSysrootDisableAutoClockDownForDriver(void);

sceKernelSysrootEnableAutoClockDownForDriver

Version NID
0.931 not present
3.60 0xEEF091A7

Derived from vshbridge.

return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0xfffffff0);

Subtracts 0x10 from a SceSysmem global variable and returns it.

Used by SceCompat, ScePower, SceKernelDmacMgr, SceSblAuthMgr, SceSblSmschedProxy, SceSblSsSmComm.

int sceKernelSysrootEnableAutoClockDownForDriver(void);

SceSysrootForDriver_6050A467

Version NID
3.60 0x6050A467

Debug related. Returns an error when called because there is no handler set for retail.

int SceSysrootForDriver_6050A467(SceUID pid);

SceSysrootForDriver_F4340469

Version NID
3.60 0xF4340469

Coredump related. Called during process load. something is same as in SceSysrootForDriver_6050A467.

int SceSysrootForDriver_F4340469 (int something, SceUID pid, ...);

sceKernelSysrootRegisterCoredumpTriggerForDriver

Version NID
0.990-3.60 0xDD473B05
int sceKernelSysrootRegisterCoredumpTriggerForDriver(void *func);

sceKernelSysrootCoredumpTriggerForDriver

Version NID
0.990-3.60 0xCD8CD242

Used by SceDeci4pDbgp.

int sceKernelSysrootCoredumpTriggerForDriver(int a1, int a2, int a3, SceCoredumpForDriver_A7D214A7_Opt *pOpt);

sceKernelSysrootRegisterCoredumpCancelForDriver

Version NID
0.990-3.60 0x400B9793
int sceKernelSysrootRegisterCoredumpCancelForDriver(void *func);

sceKernelSysrootCoredumpCancelForDriver

Version NID
0.990-3.60 0x80FBC69D
int sceKernelSysrootCoredumpCancelForDriver(int a1);

sceKernelSysrootSetProcessHandlerForDriver

Version NID
0.931-0.990 not present
3.60 0x0F07C3FC

Registers some handlers.

int sceKernelSysrootSetProcessHandlerForDriver(SceSysrootProcessHandler *pHandler);

sceKernelSysrootClearProcessHandlerForDriver

Version NID
0.931-0.990 not present
3.60 0x5A7FFDC1
void sceKernelSysrootClearProcessHandlerForDriver(void);

SceSysrootForDriver_421EFC96

Version NID
0.931-0.990 not present
3.60 0x421EFC96

Calls a function registered by #sceKernelSysrootSetProcessHandler.

Used only by SceAppMgr and called on process creation.

Hooked in:

to make it return 0 (success).

int SceSysrootForDriver_421EFC96(int a1, int a2, int a3);

sceKernelSysrootDbgpSuspendProcessAndWaitResumeForDriver

Version NID
0.990-3.60 0x256B2394

sceKernelSysrootGetShellPidForDriver

Version NID
0.990-3.60 0x05093E7B
SceUID sceKernelSysrootGetShellPidForDriver(void);

sceKernelSysrootAppMgrSpawnProcessForDriver

Version NID
0.990-3.60 0x3ACACD22

sceKernelSysrootInformUpdateStartedForDriver

Version NID
0.990-3.60 0x9A486846
int sceKernelSysrootInformUpdateStartedForDriver(int number1, int number2, const char *str, SceSize len);

sceKernelSysrootInformUpdateOngoingForDriver

Version NID
0.990-3.60 0x9EC02A41
int sceKernelSysrootInformUpdateOngoingForDriver(int number1, int number2);

sceKernelSysrootInformUpdateFinishedForDriver

Version NID
0.990-3.60 0x217B2871
int sceKernelSysrootInformUpdateFinishedForDriver(int number, const char *str, SceSize len);

sceKernelSysrootSetSwInfoIntForDriver

Version NID
0.990-3.60 0x631141E2
int sceKernelSysrootSetSwInfoIntForDriver(char *str, SceSize len, SceUInt32 number);

sceKernelSysrootSetSwInfoStrForDriver

Version NID
0.990-3.60 0x17DD213C
int sceKernelSysrootSetSwInfoStrForDriver(char *str1, SceSize len1, char *str2, SceSize len2);

sceKernelSysrootSetSwInfoBinForDriver

Version NID
0.990-3.60 0x9E96D990
int sceKernelSysrootSetSwInfoBinForDriver(char *str1, SceSize size1, char *str2, SceSize size2);

sceKernelSysrootSetGetSystemSwVersionFuncForDriver

Version NID
3.60 0x3276086B

Temp name was sceKernelSysrootSetSystemSwVersionForDriver.

Used by SceSblUpdateMgr.

void sceKernelSysrootSetGetSystemSwVersionFuncForDriver(void *func);

sceKernelSysrootGetSystemSwVersionForDriver

Version NID
3.60-3.65 0x67AAB627

Returns System Software version as int from SceSysmem memory. For exemple: 0x0365000 on 3.65.

int sceKernelSysrootGetSystemSwVersionForDriver(void);

sceKernelSysrootIsSafeModeForDriver

Version NID
0.990-3.60 0x834439A7
int sceKernelSysrootIsSafeModeForDriver(void);

sceKernelSysrootIsUpdateModeForDriver

Version NID
3.60 0xB0E1FC67
int sceKernelSysrootIsUpdateModeForDriver(void);

sceKernelSysrootGetModelInfoForDriver

Version NID
0.931 not present
3.60 0x4D98B15B

This is a guessed name, based on "sysroot->model_info".

Returns sysroot->model_info.

Used only in SceProcessmgr initializeBudget() on module start. According to model_info, ScePhyMemPartShell is allocated with different parameters.

SceUInt32 sceKernelSysrootGetModelInfoForDriver(void);

sceKernelSysrootCheckModelCapabilityForDriver

Version NID
3.60 0x8AA268D6

1: Support multi-controllers

0xB: Unknown. Related to sdio debug.

sceKernelSysrootGetSyscallFrameForDriver

Version NID
3.60-3.65 0x44EA3197
SceSyscallFrame *sceKernelSysrootGetSyscallFrameForDriver(void);

sceKernelRegisterInitCallbackForDriver

Version NID
0.990-3.60 0x778D0966
// idx: 0-8
// idx 8: func = ScePower/SceMsif functions
int sceKernelRegisterInitCallbackForDriver(const void *func, SceUInt32 idx, SceUInt32 arg, SceUInt32 *ret);

sceKernelInvokeInitCallbackForDriver

Version NID
0.990-3.60 0x93CD44CD
// idx: 0-8, 5: disable NSKBL, more...?
int sceKernelInvokeInitCallbackForDriver(int idx);

sceKernelInvokeInitCallbackExForDriver

Version NID
0.931-0.990 not present
0.990-3.60 0x7C2C10E2

This is a guessed name.

// idx: 0-8, 5: disable NSKBL, more...?
// unk: argument passed to the init callback
int sceKernelInvokeInitCallbackExForDriver(int idx, int unk);

SceKernelUtilsForDriver

sceAesDecrypt1ForDriver

Version NID
0.990-3.60 0xD8678061

Perform normal AES decrypt.

int sceAesDecrypt1ForDriver(void *ctx, const void *src, void *dst);

sceAesDecrypt2ForDriver

Version NID
3.60 0xE39CD272

Perform AES decrypt using encryption round key.

int sceAesDecrypt2ForDriver(void *ctx, const void *src, void *dst);

sceAesEncrypt1ForDriver

Version NID
0.990-3.60 0xC2A61770

Perform AES encrypt. There are two functions that are the same on 1.69.

int sceAesEncrypt1ForDriver(void *ctx, const void *src, void *dst);

sceAesEncrypt2ForDriver

Version NID
1.69-3.60 0x302947B6

Perform AES encrypt. Similar to sceAesEncrypt1ForDriver.

int sceAesEncrypt2ForDriver(void *ctx, const void *src, void *dst);

sceAesInit1ForDriver

Version NID
1.69-3.60 0xF12B6451

This sets up the AES engine. ctx is a 0x3C0 byte buffer (on FW 1.69). blocksize and keysize values are in bits. 128/196/256 are supported values.

last arg to subroutine is 0

int sceAesInit1ForDriver(void *ctx, int blocksize, int keysize, const void *key);

sceAesInit2ForDriver

Version NID
3.60 0xEDA97D6D

last arg to subroutine is 1

int sceAesInit2ForDriver(void *ctx, int blocksize, int keysize, const void *key);

sceAesInit3ForDriver

Version NID
3.60 0x72408E29

last arg to subroutine is 2

int sceAesInit3ForDriver(void *ctx, int blocksize, int keysize, const void *key);

SceKernelUtilsForDriver_C76A7685

Version NID
3.60 0xC76A7685

Looks like it relates to AES InvMixColumns.

SceKernelUtilsForDriver_60ED6EA9

Version NID
3.60 0x60ED6EA9

Equivalent to AES getSBox32Value

sceDeflateDecompressForDriver

Version NID
3.60 0x8AF1FAD4

sceDeflateDecompressPartialForDriver

Version NID
3.60 0x3D74CCDF

sceGzipDecompressForDriver

Version NID
3.60 0x367EE3DF

sceGzipGetCommentForDriver

Version NID
3.60 0xCD3AE08F

sceGzipGetCompressedDataForDriver

Version NID
3.60 0x63619124

sceGzipGetInfoForDriver

Version NID
3.60 0xFFC6A10F

sceGzipGetNameForDriver

Version NID
3.60 0xF901FD3E

sceGzipIsValidForDriver

Version NID
3.60 0xD8FAEFD4

sceHmacSha1DigestForDriver

Version NID
3.60 0x29A28957
int sceHmacSha1DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);

sceHmacSha224DigestForDriver

Version NID
3.60 0x7F2A7B99
int sceHmacSha224DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);

sceHmacSha256DigestForDriver

Version NID
3.60 0x83EFA1CC
int sceHmacSha256DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);

sceMt19937GlobalInitForDriver

Version NID
3.60 0xD428CC2A

cp_timestamp_2 is gotten from SceKblParam.

int sceMt19937GlobalInitForDriver(uint32_t cp_timestamp_2);

sceMt19937GlobalUIntInRangeForDriver

Version NID
0.990-3.60 0x875B2A1C

Temp name was sceMt19937GlobalUninitForDriver.

// Both the address and size must be aligned on four bytes.
int sceMt19937GlobalUIntInRangeForDriver(void *pBase, SceSize length);

sceMt19937InitForDriver

Version NID
3.60 0x4C9A5730

sceMt19937UIntForDriver

Version NID
3.60 0x92AEDFBC

sceSfmt19937FillArray32ForDriver

Version NID
3.60 0x2B30548B

sceSfmt19937FillArray64ForDriver

Version NID
3.60 0x49B41540

sceSfmt19937GenRand32ForDriver

Version NID
3.60 0xBBE4701A

sceSfmt19937GenRand64ForDriver

Version NID
3.60 0x45DEAAD6

sceSfmt19937InitByArrayForDriver

Version NID
3.60 0x33AE1203

sceSfmt19937InitGenRandForDriver

Version NID
3.60 0xAB48C3CA

sceSha1BlockInitForDriver

Version NID
3.60 0xE4390FFA
int sceSha1BlockInitForDriver(void* ctx);

sceSha1BlockResultForDriver

Version NID
3.60 0x48F24106
int sceSha1BlockResultForDriver(void* ctx, void *digest);

sceSha1BlockUpdateForDriver

Version NID
3.60 0x478A6F3C
int sceSha1BlockUpdateForDriver(void* ctx, const void *data, int size);

sceSha1DigestForDriver

Version NID
3.60 0x87DC7F2F
int sceSha1DigestForDriver(const void *data, int size, void *digest);

sceSha224BlockInitForDriver

Version NID
3.60 0xC762EA6D
int sceSha224BlockInitForDriver(void* ctx);

sceSha224BlockResultForDriver

Version NID
3.60 0xFBF2A442
int sceSha224BlockResultForDriver(void* ctx, void *digest);

sceSha224BlockUpdateForDriver

Version NID
3.60 0x7556E611
int sceSha224BlockUpdateForDriver(void* ctx, const void *data, int size);

sceSha224DigestForDriver

Version NID
3.60 0x9EA9D4DC
int sceSha224DigestForDriver(const void *data, int size, void *digest);

sceSha256BlockInitForDriver

Version NID
3.60 0xD909FA2C
int sceSha256BlockInitForDriver(void* ctx);

sceSha256BlockResultForDriver

Version NID
3.60 0x4899CD4B
int sceSha256BlockResultForDriver(void* ctx, void *digest);

sceSha256BlockUpdateForDriver

Version NID
3.60 0x236A9097
int sceSha256BlockUpdateForDriver(void* ctx, const void *data, int size);

sceSha256DigestForDriver

Version NID
0.931-3.60 0xA773A6A8
int sceSha256DigestForDriver(const void *data, SceSize size, void *digest);

sceZlibDecompressForDriver

Version NID
3.60 0x900148DB

sceZlibGetCompressedDataForDriver

Version NID
3.60 0x01EB6C45

sceZlibGetInfoForDriver

Version NID
3.60 0x5B9BCD75

sceXorshift128ForDriver

Version NID
0.990 not present
3.60 0x335AF34D

Similar implementation as xorshift128.

int sceXorshift128ForDriver(SceUInt32 *state);

SceKernelUtilsForDriver_B55C69B7

Version NID
3.60 0xB55C69B7

If buffer is full of zeroes, then each of the four dwords of buffer are set to 1. Always success and always return 0.

Used in SceProcessmgr.

int SceKernelUtilsForDriver_B55C69B7(SceUInt32 *buffer);

SceZlibForDriver

zlib compression library.

Firmware zlib version
1.60-3.60 1.2.5

inflate

Version NID
1.60-3.60 0xE4F34A68

deflate

Version NID
1.60-3.60 0xE859D60F

deflateReset

Version NID
1.60-3.60 0x68CFEA45

crc32

Version NID
1.60-3.60 0xE0CE06C0

adler32

Version NID
1.60-3.60 0x98619620

inflateSetDictionary

Version NID
1.60-3.60 0x7B16DBD6

SceZlibForDriver_20A122F8

Version NID
3.60 0x20A122F8

used by SceCoredump

maybe init function

int SceZlibForDriver_20A122F8(void *ctx, int a2, int a3, int a4, int a5, int a6, const char *verstr, int a8);

SceZlibForDriver_5492B3F2

Version NID
3.60 0x5492B3F2

used by SceCoredump


int SceZlibForDriver_5492B3F2(int arg1);

SceZlibForDriver_5B718E55

Version NID
3.60 0x5B718E55

used by SceCoredump


int SceZlibForDriver_5B718E55(int arg1, int arg2);

SceKernelSuspendForDriver

Used to register handlers for handling suspend/resume related events.

sceKernelPowerLockForDriver

Version NID
0.931-3.60 0x254525F8

This is a guessed name.

Used in SceProcessmgr#sceKernelPowerLock.

int sceKernelPowerLockForDriver(SceKernelPowerTickType type);

sceKernelPowerUnlockForDriver

Version NID
0.931-3.60 0x230495ED

This is a guessed name.

Used in SceProcessmgr#sceKernelPowerUnlock.

int sceKernelPowerUnlockForDriver(SceKernelPowerTickType type);

SceKernelSuspendForDriver_4DF40893

Version NID
0.990-3.60 0x4DF40893

Locks something.

Called in SceProcessmgr#sceKernelStartProcessForKernel and SceProcessmgr#sceKernelStartProcessExtForKernel just before starting a process.

Called just before NVS write.

// maybe pid: usually 0
int SceKernelSuspendForDriver_4DF40893(int maybe_pid);

SceKernelSuspendForDriver_2BB92967

Version NID
0.990-3.60 0x2BB92967

Unlocks something.

Called in SceProcessmgr#sceKernelStartProcessForKernel and SceProcessmgr#sceKernelStartProcessExtForKernel just after starting a process.

Called just after NVS write.

// maybe pid: usually 0
int SceKernelSuspendForDriver_2BB92967(int maybe_pid);

sceKernelRegisterSysEventHandlerForDriver

Version NID
0.990-3.60 0x04C05D10

Temp name was sceKernelSuspendRegisterCallbackForDriver.

Registers a function for handling suspend/resume. resume is 0 if we are currently suspending and 1 if we are currently resuming. opt is passed from the registration. Registration adds an entry to a linked list and returns the block id for the new entry.

Returns the suspend_handler_id.

typedef struct suspend_args1_t {
    SceSize size; // 0x18
    uint32_t unk1;
    uint32_t unk2;
    uint32_t unk3;
    uint32_t unk4;
    uint32_t unk5;
} suspend_args1_t;

typedef int (* SceSysEventHandler)(int resume, int eventid, void *args, void *opt);

SceUID sceKernelRegisterSysEventHandlerForDriver(const char *name, SceSysEventHandler *handler, void *pOpt);

SceKernelSuspendForDriver_CE7A2207

Version NID
3.60 0xCE7A2207

Registers a handler.

SceUID SceKernelSuspendForDriver_CE7A2207(SceUInt idx, void *handler, void *args);

SceKernelSuspendForDriver_105C5752

Version NID
3.60 0x105C5752

Registers a handler.

SceUID SceKernelSuspendForDriver_105C5752(SceUInt idx, void *handler, void *args);

SceKernelSuspendForDriver_D4958E6F

Version NID
3.60 0xD4958E6F

Dispatch handlers registered by #SceKernelSuspendForDriver_CE7A2207.

SceUID SceKernelSuspendForDriver_D4958E6F(void *args);

sceKernelUnregisterSysEventHandlerForDriver

Version NID
0.990-3.60 0xDD61D621
int sceKernelUnregisterSysEventHandlerForDriver(SceUID id);

Call with the id returned from suspend_register_handler to remove the entry from the linked list and free the memory.

sceKernelSysEventDispatchForDriver

Version NID
0.990-3.60 0xD4622EA8
int sceKernelSysEventDispatchForDriver(int resume, int eventid, void *args, int stop_on_error);

This will go through the linked list and call each handler. If stop_on_error is set, then the first handler that returns a negative value will stop the call chain and return the block id of the handler that broke the chain. Otherwise, this function will invoke each handler and return zero.

sceKernelPowerTickForDriver

Version NID
0.990-3.60 0xE0489831
typedef enum SceKernelPowerTickType {
	/** Cancel all timers */
	SCE_KERNEL_POWER_TICK_DEFAULT			= 0,
	/** Cancel automatic suspension timer */
	SCE_KERNEL_POWER_TICK_DISABLE_AUTO_SUSPEND	= 1,
	/** Cancel OLED-off timer */
	SCE_KERNEL_POWER_TICK_DISABLE_OLED_OFF		= 4,
	/** Cancel OLED dimming timer */
	SCE_KERNEL_POWER_TICK_DISABLE_OLED_DIMMING	= 6
} SceKernelPowerTickType;

int sceKernelPowerTickForDriver(int type);

Cancel specified idle timers to prevent entering in power save processing.

Returns 0 on success.

SceQafMgrForDriver

Provides many device permission checks including running app privilege checks, debugging enabled checks, and so on.

SceQafMgrForDriver_41E04800

Version NID
0.931 0x4F20A014
3.60 not present

SceQafMgrForDriver_082A4FC2

Version NID
0.931-3.60 0x082A4FC2

Temp name was sceSblQafMgrIsAllowHost0AccessForDriver.

Used by sceSblFwLoaderLockForDriver, SceKernelModulemgr, SceSysStateMgr and SceSblPostSsMgr.

Used by sceSblSpsfoMgrOpenForDriver.

When this flag is set, it allows for example to load spsfo from host0:, and host0:psp2config.skprx.

// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_082A4FC2(void);

SceQafMgrForDriver_694D1096

Version NID
0.931-3.60 0x694D1096

Only used by SceSblACMgr.

Might be something like sceSblQafMgrIsAllowUserAppDebug.

// (*(uint8_t *)(qaf + 0xB) & 4)
int SceQafMgrForDriver_694D1096(void);

SceQafMgrForDriver_0E588747

Version NID
0.931-3.60 0x0E588747

Only used by SceRegistryMgr.

Returns true if the PSVita is an "Internal system".

// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_0E588747(void);

sceSblQafMgrIsAllowGameDebugForDriver

Version NID
0.931-3.60 0x4BC1883F
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowGameDebugForDriver(void);

sceSblQafMgrIsAllowSystemAppDebugForDriver

Version NID
0.931-3.60 0xCAD47130

Used by SceDeci4pDtracep and SceSblACMgr.

If it returns false, syscalls debug trace printf is disabled.

// (*(uint8_t *)(qaf + 0xD) & 2)
int sceSblQafMgrIsAllowSystemAppDebugForDriver(void);

sceSblQafMgrIsAllowKernelDebugForDriver

Version NID
0.931-3.60 0x382C71E8

Used by SceKernelModulemgr, SceExcpmgr, SceCrashDump, SceHdmi

// (*(uint8_t *)(qaf + 0xD) & 1)
int sceSblQafMgrIsAllowKernelDebugForDriver(void);

sceQafMgrIsAllowQAUpdateForDriver

Version NID
0.931-3.60 0x3CB55F98

Only used by SceSblUpdateMgr.

// (*(uint8_t *)(qaf + 0xF) & 1)
int sceQafMgrIsAllowQAUpdateForDriver(void);

sceSblQafMgrIsAllowForceUpdateForDriver

Version NID
0.931-3.60 0x8C423C18

Only used by SceSblUpdateMgr.

// (*(uint8_t *)(qaf + 0xF) & 2)
int sceSblQafMgrIsAllowForceUpdateForDriver(void);

SceQafMgrForDriver_52B4E164

Version NID
0.931-3.60 0x52B4E164

Only used by SceWlanBt and SceEnumWakeUp.

// (*(uint8_t *)(qaf + 0xD) & 1)
int SceQafMgrForDriver_52B4E164(void);

SceQafMgrForDriver_883E9465

Version NID
0.931-3.60 0x883E9465

Temp name was sceSblQafMgrIsAllowDecryptedBootConfigLoadForDriver.

Used by SceSysStateMgr.

Allows loading raw (unencrypted) psp2config.txt.

// (*(uint8_t *)(qaf + 0xE) & 1)
int SceQafMgrForDriver_883E9465(void);

SceQafMgrForDriver_B9770A13

Version NID
0.931-3.60 0xB9770A13

Needed to be enabled to work with DIPSW 251 (Enable "dummytty0:").

Used by SceKernelModulemgr and SceSysmodule.

// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_B9770A13(void);

sceSblQafMgrIsAllowRemotePlayDebugForDriver

Version NID
0.931-3.60 0xBFD5E463
// (*(uint8_t *)(qaf + 0xC) & 2)
int sceSblQafMgrIsAllowRemotePlayDebugForDriver(void);

SceQafMgrForDriver_E573F124

Version NID
0.931-3.60 0xE573F124
// (*(uint8_t *)(qaf + 0x0) & 0x10)
int SceQafMgrForDriver_E573F124(void);

sceSblQafMgrIsAllowMarlinTestForDriver

Version NID
1.03-3.60 0x10283EB8
// (*(uint8_t *)(qaf + 0xD) & 2)
int sceSblQafMgrIsAllowMarlinTestForDriver(void);

sceSblQafMgrIsAllowNearTestForDriver

Version NID
1.03-3.60 0x9644171D
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowNearTestForDriver(void);

SceQafMgrForDriver_AE033133

Version NID
3.60 0xAE033133

Only used by SceNpDrm.

// (*(uint8_t *)(qaf + 0x0) & 0x10)
int SceQafMgrForDriver_AE033133(void);

SceQafMgrForDriver_DEC6DF4E

Version NID
3.60 0xDEC6DF4E

Only used by SceNpDrm.

// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_DEC6DF4E(void);

sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver

Version NID
3.60 0xB7B195B2
// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver(void);

sceSblQafMgrIsAllowLoadMagicGateForDriver

Version NID
3.60 0x36E5312E
// (*(uint8_t *)(qaf + 0xB) & 0x10)
int sceSblQafMgrIsAllowLoadMagicGateForDriver(void);

sceSblQafMgrIsAllowDtcpIpResetForDriver

Version NID
3.60 0xE8B8F31F
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowDtcpIpResetForDriver(void);

sceSblQafMgrIsAllowControlIduAutoUpdateForDriver

Version NID
3.60 0xF8BFEE48
// (*(uint8_t *)(qaf + 0x6) & 2)
int sceSblQafMgrIsAllowControlIduAutoUpdateForDriver(void);

sceSblQafMgrIsAllowKeepCoreFileForDriver

Version NID
3.60 0xC1EA75C8
// (*(uint8_t *)(qaf + 0xF) & 1)
int sceSblQafMgrIsAllowKeepCoreFileForDriver(void);

SceQafMgrForDriver_70A67A4B

Version NID
3.60 0x70A67A4B
// (*(uint8_t *)(qaf + 0xF) & 1)
int SceQafMgrForDriver_70A67A4B(void);

SceQafMgrForDriver_41E04800

Version NID
3.60 0x41E04800

Only used by SceAppMgr.

// (*(uint8_t *)(qaf + 0xB) & 4)
int SceQafMgrForDriver_41E04800(void);

SceQafMgrForDriver_7B14DC45

Version NID
3.60 0x7B14DC45

Only used by SceAppMgr.

// (*(uint8_t *)(qaf + 0xD) & 2)
int SceQafMgrForDriver_7B14DC45(void);

ScePmMgrForDriver

scePmMgrGetProductModeForDriver

Version NID
0.931-3.60 0x2AC815A2

Returns 0 on success, 0x800f0a29 on failure.

Gets kbl_param using sceKernelSysrootGetKblParamForKernel.

result = ((int *)(kbl_param->boot_type_indicator_1) >> 2) & 1; // manufacturing mode flag

int scePmMgrGetProductModeForDriver(char* result);

scePmMgrIsExternalBootModeForDriver

Version NID
3.60 0xBD1F193B

Gets kbl_param using sceKernelSysrootGetKblParamForKernel.

return (int *)(kbl_param->boot_type_indicator_1) & 1; // external boot mode flag

int scePmMgrIsExternalBootModeForDriver(void);

SceSblAIMgrForDriver

sceSblAIMgrGetSMIForDriver

Version NID
3.60 0x47D9CF13

SMI means Service / Manufacturing Information.

SMI is read from SceKblParam->min_fw_version.

int sceSblAIMgrGetSMIForDriver(SceUInt32 *pSMI);

sceSblAIMgrGetProductCodeForDriver

Version NID
3.60 0x14345161

Temp name was sceSblAIMgrGetTargetIdForDriver.

Product Code = Target Id

int sceSblAIMgrGetProductCodeForDriver(void);

sceSblAIMgrGetProductSubCodeForDriver

Version NID
3.60 0xB33CEC8F

Product Sub Code = model revision

int sceSblAIMgrGetProductSubCodeForDriver(void);

sceSblAIMgrIsTestForDriver

Version NID
3.60 0x3B638885

TEST = Internal Test Unit

Returns true if PsCode Product Code == 0x100.

int sceSblAIMgrIsTestForDriver(void);

sceSblAIMgrIsToolForDriver

Version NID
3.60 0x274663A0

TOOL = DevKit

Returns true if PsCode Product Code == 0x101.

int sceSblAIMgrIsToolForDriver(void);

sceSblAIMgrIsDEXForDriver

Version NID
3.60 0xF4B98F66

Returns true if PsCode Product Code == 0x102.

int sceSblAIMgrIsDEXForDriver(void);

sceSblAIMgrIsCEXForDriver

Version NID
3.60 0xD78B04A2

Returns true if PsCode Product Code 0x103-0x111 AND sceSblAIMgrIsSpecialCEXForDriver returns false.

int sceSblAIMgrIsCEXForDriver(void);

sceSblAIMgrIsVITAForDriver

Version NID
3.60 0x4273B97B

Returns sceSblAIMgrIsGenuineVITAForDriver.

int sceSblAIMgrIsVITAForDriver(void);

sceSblAIMgrIsDolceForDriver

Version NID
3.60 0x71608CA3

Returns sceSblAIMgrIsGenuineDolceForDriver if returns true else returns sceKernelCheckDipswForDriver(0x98).

int sceSblAIMgrIsDolceForDriver(void);

sceSblAIMgrIsGenuineVITAForDriver

Version NID
3.60 0x963CA644

Returns true if:

  • PsCode Product Code <= 0x111 AND sceSblAIMgrIsGenuineDolceForDriver returns false
  • sceSblAIMgrIsSpecialCEXForDriver returns true AND HardwareInfo != 0x700000 != 0x720000 != 0x510000
int sceSblAIMgrIsGenuineVITAForDriver(void);

sceSblAIMgrIsGenuineDolceForDriver

Version NID
3.60 0xC6E83F34
int sceSblAIMgrIsGenuineDolceForDriver(void);

sceSblAIMgrIsDiagForDriver

Version NID
3.60 0x6D5A3FC9

Temp name was sceSblAIMgrIsSpecialCEXForDriver, sceSblAIMgrIsCEXJpFatForDriver.

Returns true if PsCode Product Code == 0x103 (Japan), PsCode Product Sub Code == 0x10 (FAT chassis) and PsCode Factory Code == 0x24 (SCE labs).

int sceSblAIMgrIsDiagForDriver(void);

sceSblAIMgrIsToolDVT1ForDriver

Version NID
3.60 0xBB9D146B

Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 3.

int sceSblAIMgrIsToolDVT1ForDriver(void);

sceSblAIMgrIsToolRev4ForDriver

Version NID
3.60 0x37A79140

Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 4.

int sceSblAIMgrIsToolRev4ForDriver(void);

sceSblAIMgrIsToolDVT2ForDriver

Version NID
3.60 0xE5E47FF7

Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 5.

int sceSblAIMgrIsToolDVT2ForDriver(void);

sceSblAIMgrIsCEXPrototypeRev2ForDriver

Version NID
3.60 0xFF5784B9

Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 2.

int sceSblAIMgrIsCEXPrototypeRev2ForDriver(void);

sceSblAIMgrIsCEXPrototypeRev7ForDriver

Version NID
3.60 0x05F79D4A

Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 7.

int sceSblAIMgrIsCEXPrototypeRev7ForDriver(void);

SceProcEventForDriver

sceKernelUnregisterProcEventHandlerForDriver

Version NID
3.60 0x3DED57CC

Previous name was sceProcEventDeleteUidForDriver.

Wrapper to sceGUIDCloseForDriver.

int sceKernelUnregisterProcEventHandlerForDriver(int uid);

sceKernelRegisterProcEventHandlerForDriver

Version NID
0.990-3.60 0x2A43912D

Previous name was sceProcEventCreateEventForDriver

Uses sceKernelCreateEventForDriver.

Returns uid.

typedef struct SceProcEventInvokeParam1 {
	SceSize size;                                     // SceProcEventInvokeParam1 struct size : 0x10
	int unk_0x04;
	int unk_0x08;
	int unk_0x0C;
} SceProcEventInvokeParam1;

typedef struct SceProcEventInvokeParam2 {
	SceSize size;                                     // SceProcEventInvokeParam2 struct size : 0x14
	SceUID pid;
	int unk_0x08;
	int unk_0x0C;
	int unk_0x10;
} SceProcEventInvokeParam2;

typedef struct SceProcEventHandler {
	SceSize size;                                                                               // SceProcEventHandler struct size : 0x1C
	int (* create)(SceUID pid, SceProcEventInvokeParam2 *a2, int a3);
	int (* exit)(SceUID pid, SceProcEventInvokeParam1 *a2, int a3);                             // current process exit
	int (* kill)(SceUID pid, SceProcEventInvokeParam1 *a2, int a3);                             // by SceShell
	int (* stop)(SceUID pid, int event_type, SceProcEventInvokeParam1 *a3, int a4);
	int (* start)(SceUID pid, int event_type, SceProcEventInvokeParam1 *a3, int a4);
	int (* switch_process)(int event_id, int event_type, SceProcEventInvokeParam2 *a3, int a4); // switch display frame?
} SceProcEventHandler;

a3 - set zero

SceUID sceKernelRegisterProcEventHandlerForDriver(const char *name, SceProcEventHandler *pHandler, int a3);

sceKernelInvokeProcEventHandlerForDriver

Version NID
3.60 0x414CC813

Uses suspend/resume LR.

int sceKernelInvokeProcEventHandlerForDriver(int a1, int a2, int a3, int a4, int *a5, int a6);

SceDebugLed

sceKernelGetGPI

Version NID
3.60 0x14F582CF
int sceKernelGetGPI(void);

sceKernelSetGPO

Version NID
3.60 0x78E702D3
/**
 * @brief Output to LED
 *
 * This sets the content displayed on the DevKit LED.
 * @param[in]	uiBitd	Bit pattern. only low-order 8 bits are valid.
 */
int sceKernelSetGPO(SceUInt32 uiBits);

call_cb74

Version NID
3.60 0x2B6EABAD
void call_cb74(int a1, int a2, int a3, int a4);

call_cb78

Version NID
3.60 0x0E6B9890
void call_cb78(int a1, int a2, int a3, int a4);

SceDebugLedForDriver

GPI stands for General Purpose Input, and GPO stands for General Purpose Output.

sceKernelGetGPIForDriver

Version NID
3.60 0x14F582CF

Only SceDebugLedForDriver function used by SceCoredump.

int sceKernelGetGPIForDriver(void);

sceKernelSetGPIForDriver

Version NID
3.60 0x51C5325A
int sceKernelSetGPIForDriver(int value);

sceKernelGetGPOForDriver

Version NID
3.60 0x3BB289F7
int sceKernelGetGPOForDriver(void);

sceKernelSetGPOForDriver

Version NID
3.60 0x78E702D3
int sceKernelSetGPOForDriver(SceUInt32 uiBits);

sceKernelSetGPOMaskForDriver

Version NID
3.60 0x098473B0
sceKernelSetGPOMaskForDriver(int a1, int a2);

call_cb74

Version NID
3.60 0x2B6EABAD
void call_cb74(int a1, int a2, int a3, int a4);

set_cb74

Version NID
3.60 0x24173819
int set_cb74(void *cb);

call_cb78

Version NID
3.60 0x0E6B9890
void call_cb78(int a1, int a2, int a3, int a4);

set_cb78

Version NID
3.60 0xF62154E7
int set_cb78(void *cb);

SceDebugForKernel

sceKernelDebugModuleStart2ForKernel

Version NID
0.931-3.60 0xF624CE22
int sceKernelDebugModuleStart2ForKernel(void);

sceKernelRegisterKprintfHandlerForKernel

Version NID
0.931-3.60 0x10067B7B

Temp name was sceDebugSetHandlersForKernel.

int sceKernelRegisterKprintfHandlerForKernel(int (*kprintf)(const char *fmt, ...), const void *args);

sceKernelGetDebugPutcharForKernel

Version NID
3.60 0xE783518C

Temp name was sceDebugGetPutcharHandlerForKernel.

Returns pointer to current debug putchar handler.

void *sceKernelGetDebugPutcharForKernel(void);

sceKernelRegisterDebugPutcharForKernel

Version NID
3.60 0xE6115A72

Temp name was sceDebugRegisterPutcharHandlerForKernel.

Set debug print char handler.

int sceKernelRegisterDebugPutcharForKernel(int (*debug_putchar)(const void *args, char c), const void *args);

sceKernelDebugPutcharForKernel

Version NID
0.931-3.60 0x82D2EDCE

Temp name was sceDebugPutcharForKernel.

Print character.

Return 1.

int sceKernelDebugPutcharForKernel(char c);

sceKernelTtyPutcharForKernel

Version NID
0.931-0.990 not present
3.60 0x254A4997

This is a guessed name.

Prints a character to the 0x1000-byte buffer returned by SceSysmem#sceKernelGetTtyInfoForDriver.

On success, returns printed size (always 1).

int sceKernelTtyPutcharForKernel(char c);

sceKernelStoppedForKernel

Version NID
0.931-0.990 0xF1F0C365
3.60 not present
int sceKernelStoppedForKernel(const char *pFile, const char *pFunc, int line);

panic_on_kernel_exception

Version NID
0.931 not present
3.60 0x082B8D6A
3.65 0xCCABDD98

Prints information about a Kernel Exception, ?and certainly calls SceCoredump?, then calls SceSysrootForKernel_0DF574A9 in an infinite loop.

This function doesn't return.

See SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel for the meaning of excpcode.

// excp_name can be:
// UNDEF - Undefined instruction
// PABT - Prefetch Abort
// DABT - Data Abort
// NEST - Nested? Same excpcode as UNDEF
void panic_on_kernel_exception(kernel_message_ctx *msg_ctx, SceExcpmgrExceptionContext *excp_ctx, int excpcode, const char *excp_name);

register_unk_handler

Version NID
0.931 not present
3.60 0x66D82EC8

handler definition:

handler(int some_level, void *unk, const void *buf);
int register_unk_handler(void *handler);

set_info_dump_flag

Version NID
0.931 not present
3.60 0xF857CDD6

Temp name was sceDebugDisableInfoDumpForKernel.

Returns previous info dump flag.

// ex: set_info_dump_flag(0); as used in henkaku/payload.c
// flag: 0: disable, 1: enable
int set_info_dump_flag(int flag);

register_log_buffer

Version NID
0.931 0x4703ECC4
3.60 not present
int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);

start_logging

Version NID
0.931 0x4C377B11
3.60 not present

Returns 1 if logging has been started successfully, -1 else.

int start_logging(int state);

stop_logging

Version NID
0.931 0x604F56AE
3.60 not present

If state is not zero, stops logging and return 1, else does nothing and return 0.

Returns 1 if logging has been stopped, 0 else.

int stop_logging(void);

refresh_logs

Version NID
0.931 0x04A3046D
3.60 not present
int refresh_logs(void);

_sceKernelPrintDebugLogForKernel

Version NID
0.931 0xEFDE973B
3.60 not present

If a2 is not zero, the current log buffer address is updated, else it is unchanged.

maxNum is guessed to be either the number of entries or the index of the chosen entry. Entry size is 0x40 bytes.

Uses sceKernelPrintfLevelForDriver to print.

int _sceKernelPrintDebugLogForKernel(int a1, int a2, int maxNum);

sceKernelPrintDebugLogForKernel

Version NID
0.931 0xBD5D0BB0
3.60 not present

Calls _sceKernelPrintDebugLogForKernel with maxNum = (log_buf_end - log_buf_start) / 0x40.

int sceKernelPrintDebugLogForKernel(int a1, int a2);

print_with_log_buffer

Version NID
0.931 0x904FF72D
3.60 not present
int print_with_log_buffer(const char *string, SceSize maxlen);

sceKernelPrintfCore0ForKernel

Version NID
0.931 0x2D7380FE
3.60 not present

Same as sceKernelPrintfForDriver but only prints if CPU ID is 0.

int sceKernelPrintfCore0ForKernel(const char *fmt, ...);

sceKernelPrintfLevelCore0ForKernel

Version NID
0.931 0x14241F51
3.60 not present

Same as sceKernelPrintfLevelForDriver but only prints if CPU ID is 0.

int sceKernelPrintfLevelCore0ForKernel(int level, const char *fmt, ...);

sceKernelSetMinimumLogLevelForKernel

Version NID
0.931-3.60 0xBE2C05A2
/**
 * @brief Specifies the minimum severity level for the output of logging information.
 *
 * Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.
 *
 * @param	minimumLogLevel	The minimum severity at which debugging messages should be output.
 * @retval	SCE_OK          The operation was completed successfully.
 * @retval	Negative value	Error code
 */
int sceKernelSetMinimumLogLevelForKernel(SceInt32 minimumLogLevel);

sceKernelGetMinimumLogLevelForKernel

Version NID
0.931 0xDA6B6770
3.60 not present

Returns the minimumLogLevel set by sceKernelSetMinimumLogLevelForKernel.

SceInt32 sceKernelGetMinimumLogLevelForKernel(void);

sceKernelSetAssertLevelForKernel

Version NID
0.931-3.60 0xCE9060F1

Temp name was sceKernelSetMinimumAssertionLevelForKernel.

Overrides in memory g_assertLevel set by DIP switches 201 and 202.

Returns the previous assert level.

SceInt32 sceKernelSetAssertLevelForKernel(SceUInt32 assertLevel);

sceKernelGetAssertLevelForKernel

Version NID
0.931 0x374B7868
0.990-3.60 moved to ForDriver

Temp name was sceKernelGetMinimumAssertionLevelForKernel.

Returns g_assertLevel from memory.

SceInt32 sceKernelGetAssertLevelForKernel(void);

SceDebugForKernel_BEF921A2

Version NID
0.931 not present
3.60 0xBEF921A2
/*
buf     : 0x87C000
cpuId     : 0x2
a3     : 0x6123CD7
a4     : 0x0
msg_ctx     : 0x1A3E858
buf_400     : 0x8D6CA0
a7     : 0x1
ret     : 0x710
*/

// buf size is 0x1000 bytes
// buf_400 size is 0x400 bytes
int SceDebugForKernel_BEF921A2(void *buf, int cpuId, int a3, int a4, kernel_message_ctx *msg_ctx, void *buf_400, int a7);

add_entry

Version NID
0.931-0.990 0x1208240D
3.60 not present
// ex: add_entry(0xA1, in_lr, 3, name); in SceSysmem
// ex: add_entry(0xAB, in_lr, 1, uid); in SceSysmem
// ex: add_entry(0xBB, in_lr, 0, param_4); in SceProcessmgr
int add_entry(SceSize maxlen, int a2, int a3, void *log_buffer_start);

add_entry2

Version NID
0.931 0x061A4657
3.60 not present
int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);

register_unk_cb

Version NID
0.931-3.60 0xEFF9962B

The callback has this definition:

// unk: 2 or 3
int unk_cb(SceUID pid, void *buf, SceSize size, int *pOut, int unk);

If unk_cb runs successfully (return >= 0), pOut is used as third argument of unk_cb2, else unk_cb2 is not called at all.

int register_unk_cb(void *unk_cb);

register_unk_cb2

Version NID
0.931-3.60 0xB5943011

The callback has this definition:

int unk_cb2(SceUID pid, void *buf, int unk);
int register_unk_cb2(void *unk_cb2);

sceKernelPrintSyscallFrameForKernel

Version NID
3.60 0x25E31E18
3.65 0xBCC8D0B2
// if pSyscallFrame is NULL, it will use the current syscall frame
// pResult is a pointer to a 0x10 bytes buffer and may be NULL
void sceKernelPrintSyscallFrameForKernel(SceUID pid, SceSyscallFrame *pSyscallFrame, SceUInt32 *pResult);

SceDebugForDriver

The externally kernel debugging utility.

SceSysmemForTZS

sceKernelProcModeVAtoPAForTZS

Version NID
0.931 0x119B9547
0.990-3.73 not present
int sceKernelProcModeVAtoPAForTZS(SceUID pid, uint32_t mode, void *pVA, void **pPA);

sceKernelAllocPartitionStackMemBlockForTZS

Version NID
0.931 0x69022B7F
0.990-3.73 not present

sceKernelGetPhyPageResetForTZS

Version NID
0.940-1.80 0x3FEF6B39
3.60-3.73 not present

sceKernelDeleteHeapForTZS

Version NID
0.931-3.60 0x624454BC

sceKernelCreateHeapForTZS

Version NID
0.931-3.60 0x56A16D84

sceKernelAllocHeapMemoryWithOptionForTZS

Version NID
0.931-3.60 0xEA712806

sceKernelAllocHeapMemoryForTZS

Version NID
0.931-3.60 0x473871D8

sceKernelAllocHeapMemoryFromGlobalHeapForTZS

Version NID
0.940-3.60 0x29DE887D

sceKernelFreeHeapMemoryForTZS

Version NID
0.931-3.60 0x42FB5B12

sceKernelAllocUncacheHeapMemoryWithOptionForTZS

Version NID
0.931-3.60 0x6A3FBAF0

sceKernelFreeUncacheHeapMemoryForTZS

Version NID
0.931-3.60 0x2F18E288

sceKernelNameHeapDeleteForTZS

Version NID
0.990-3.60 0xF459D09D

sceKernelNameHeapInsertForTZS

Version NID
0.990-3.60 0x42AD34AB

sceKernelSetSuspendIntrFuncForTZS

Version NID
0.940-1.80 0xB4306D21
3.60-3.73 not present

sceKernelSetResumeIntrFuncForTZS

Version NID
0.940-1.80 0x418111B0
3.60-3.73 not present

sceKernelAddressSpaceUnmapForTZS

Version NID
0.940-3.60 0x31273DC7

sceKernelGetMemBlockBaseForTZS

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

sceKernelFreeMemBlockForTZS

Version NID
0.940-3.60 0x658EACE3

sceKernelAllocMemBlockForTZS

Version NID
0.940-3.60 0x402EB970
SceUID sceKernelAllocMemBlockForTZS(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);

sceKernelAllocPartitionMemBlockForTZS

Version NID
0.940-3.60 0x0028E26C

Temp name was sceKernelAllocMemBlockForPidForTZS.

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

sceKernelVAtoPAForTZS

Version NID
0.931-3.60 0x1DEADF6C

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

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

int sceKernelVAtoPAForTZS(void *pVA, void **ppPA);

sceKernelVARangeToPAVectorForTZS

Version NID
0.931-3.60 0x9D43E416

sceKernelCreateAddressSpaceForTZS

Version NID
0.931 0x21906368
0.990-3.73 not present

SceSysmemForTZS_038EAEEE

Version NID
0.931-0.990 not present
3.60 0x038EAEEE

SceDipswForTZS

sceKernelCheckDipswForTZS

Version NID
0.940-3.60 0xA98FC2FD

SceUartForTZS

sceUartWriteForTZS

Version NID
0.990-3.60 0x3AFD5E71

SceDebugForTZS

sceKernelDebugModuleStart2ForTZS

Version NID
0.931 0x32E3D4B9
int sceKernelDebugModuleStart2ForTZS(void);

sceKernelRegisterKprintfHandlerForTZS

Version NID
0.931 0x0AD558D5
int sceKernelRegisterKprintfHandlerForTZS(int (*kprintf)(const char *fmt, ...), const void *args);

sceKernelDebugPutcharForTZS

Version NID
0.931 0xD36F27BA

Print character.

int sceKernelDebugPutcharForTZS(char c);

sceKernelStoppedForTZS

Version NID
0.931-0.990 0xCB502FD1
1.80 not present
int sceKernelStoppedForTZS(const char *maybe_pFile, const char *maybe_pFunc, int maybe_line);

sceKernelAssertForTZS

Version NID
0.931-3.60 0x2F9B8AA8
// 0.931-0.990:
int sceKernelAssertForTZS(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);

// 3.60:
int sceKernelAssertForTZS(SceBool condition, kernel_message_ctx *msg_ctx, const void *addr);

sceKernelAssertLevelForTZS

Version NID
3.60 0x618F89E6
// 3.60:
int sceKernelAssertLevelForTZS(int level, SceBool condition, kernel_message_ctx *msg_ctx, const void *addr);

sceKernelGetAssertLevelForTZS

Version NID
3.60 0xF851BA4F

Returns g_assertLevel from memory.

SceInt32 sceKernelGetAssertLevelForTZS(void);

_sceKernelPrintDebugLogForTZS

Version NID
0.931 0x4FF6536C
int _sceKernelPrintDebugLogForTZS(int a1, int a2, int maxNum);

sceKernelPrintDebugLogForTZS

Version NID
0.931 0x85BF33E1
int sceKernelPrintDebugLogForTZS(int a1, int a2);

print_with_log_buffer

Version NID
0.931 0x1FD92289
int print_with_log_buffer(const char *msg, SceSize maxlen);

sceKernelPrintfForTZS

Version NID
0.931-1.80 0x1655E0E3
int sceKernelPrintfForTZS(const char *fmt, ...);

sceKernelPrintfLevelForTZS

Version NID
0.931-1.80 0xC70CBB58
int sceKernelPrintfLevelForTZS(int level, const char *fmt, ...);

sceKernelPrintfCore0ForTZS

Version NID
0.931 0x08F8AD70

Same as sceKernelPrintfForTZS but only prints if CPU ID is 0.

int sceKernelPrintfCore0ForTZS(const char *fmt, ...);

sceKernelPrintfLevelCore0ForTZS

Version NID
0.931-1.80 0xD4E6A0C0

Same as sceKernelPrintfLevelForTZS but only prints if CPU ID is 0.

int sceKernelPrintfLevelCore0ForTZS(int level, const char *fmt, ...);

sceKernelSetMinimumLogLevelForTZS

Version NID
0.931 0x898E417E
/**
 * @brief Specifies the minimum severity level for the output of logging information.
 *
 * Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.
 *
 * @param	minimumLogLevel	The minimum severity at which debugging messages should be output.
 * @retval	SCE_OK          The operation was completed successfully.
 * @retval	Negative value	Error code
 */
int sceKernelSetMinimumLogLevelForTZS(SceInt32 minimumLogLevel);

register_log_buffer

Version NID
0.931 0xF2A87E96
int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);

start_logging

Version NID
0.931 0x1FF65E15
int start_logging(int state);

stop_logging

Version NID
0.931 0x5A35E3E0

If state is not zero, stops logging and return 1, else does nothing and return 0.

Returns 1 if logging has been stopped, 0 else.

int stop_logging(void);

refresh_logs

Version NID
0.931 0x91B41C34
int refresh_logs(void);

add_entry

Version NID
0.931 0x95E1A80B
int add_entry(int a1, int a2, int a3, void *log_buffer_start);

add_entry2

Version NID
0.931 0x538319EB
int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);

register_unk_cb

Version NID
0.931 0x3598118B

The callback has this definition:

// unk: 2 or 3
int unk_cb(SceUID pid, void *buf, SceSize size, int *pOut, int unk);

If unk_cb runs successfully (return >= 0), pOut is used as third argument of unk_cb2, else unk_cb2 is not called at all.

int register_unk_cb(void *some_cb);

register_unk_cb2

Version NID
0.931 0xE844FC5A
0.990-3.60 not present

The callback has this definition:

int unk_cb2(SceUID pid, void *buf, int unk);
int register_unk_cb2(void *some_cb);

SceDebugForTZS_563B623D

Version NID
0.931 not present
1.80-3.60 0x563B623D

SceDebugForTZS_0D799DAE

Version NID
0.931-0.990 not present
3.60 0x0D799DAE
int SceDebugForTZS_0D799DAE(SceUInt32 msg_type, void *msg_ctx, const char *fmt, va_list arg);

SceDebugForTZS_D26EB4BB

Version NID
0.931-0.990 not present
3.60 0xD26EB4BB
int SceDebugForTZS_D26EB4BB(SceBool condition, SceUInt32 msg_type, void *msg_ctx, const char *fmt, ...);

SceCpuForTZS

  • 0.931: 0xACA39932: unknown, save context that will be restored with 0xCA74C9A2
  • 0.931: 0xCA74C9A2: unknown, restore context saved with 0xACA39932
  • 0.931: 0xE0B34336: unknown, same as SceCpuForKernel_9D72DD1B
  • 0.931-0.990: 0x40DEC1B6: sceKernelWaitForEvent
  • 0.931-0.990: 0xF42F079B: sceKernelSendEvent
  • 0.940: 0x1266F962: sceKernelAbort
  • 0.931-0.940: 0x98BF47D3: sceKernelGetVmaccessRange
  • 0.931: 0x49AD8B60: sceKernelSetFIQModeStack
  • 0.931: 0xC2A428F3: sceKernelSetMonModeStack
  • 0.931: 0xD9013440: sceKernelSetIRQModeStack
  • 0.931: 0xDF17E4A3: sceKernelSetUndModeStack
  • 0.931: 0xF832C341: sceKernelSetAbtModeStack
  • 0.931: 0xFB1D3114: sceKernelSetSvcModeStack
  • 0.931: 0xF6CE21EA: sceKernelPrintCpuMode
  • 3.60: 0x31E78A4B: unknown
  • 3.60: 0x4FED4BCE: unknown
  • 3.60: 0x7548CBCF: unknown
  • 3.60: 0xD4E7413D: unknown

1.80:

     NID 0: 0x0A15B41C: sceKernelL1DcacheCleanInvalidateAll
     NID 1: 0x17A88E69: sceKernelL1DcacheCleanRange
     NID 2: 0x190D96D5: sceKernelDcacheCleanRange
     NID 3: 0x2A0A3DC6
     NID 4: 0x2B6403F8: on FW 3.60, does nothing and returns -1
     NID 5: 0x2FE24445: sceKernelCpuAtomicSet32
     NID 6: 0x308D7ABE: sceKernelCpuDcacheInvalidateMVACRange
     NID 7: 0x324727D1: sceKernelGetCpsr
     NID 8: 0x39FCFCC2: sceKernelDomainTextMemcpy
     NID 9: 0x44C423D3: sceKernelCpuId
     NID 10: 0x49B11FF8
     NID 11: 0x71FD9AB5: sceKernelSpinlockLowLock
     NID 12: 0x72CA4F7A: sceKernelGetSpsr
     NID 13: 0x75D87321: sceKernelCpuAtomicOrAndGet32
     NID 14: 0x7A5373EB: sceKernelDcacheCleanInvalidateRange
     NID 15: 0x7CCE9480: sceKernelDcacheCleanInvalidateAll
     NID 16: 0x864E3DED
     NID 17: 0x9E4C0D0D: on FW 3.60, does nothing and returns -1
     NID 18: 0xA5965CBF: sceKernelL1IcacheInvalidateEntireAllCore
     NID 19: 0xACF209F3: sceKernelSpinlockLowTrylockCpuSuspendIntr
     NID 20: 0xB421FAFD: sceKernelL1IcacheInvalidateRange
     NID 21: 0xB8F00FBE: sceKernelSpinlockLowUnlockCpuResumeIntr
     NID 22: 0xC4137AED: sceKernelPleFlushRequest
     NID 23: 0xCD98416C: sceKernelSpinlockLowUnlock
     NID 24: 0xCDD46655: sceKernelDcacheInvalidateRange
     NID 25: 0xD67A4356: sceKernelSpinlockLowLockCpuSuspendIntr
     NID 26: 0xEFD6F289: sceKernelCpuAtomicCompareAndSet8

SceSysclibForTZS

__stack_chk_fail

Version NID
1.80-3.60 0xE5457B97

__stack_chk_guard

Version NID
3.60 0xBA505B15

This is a variable.

strncpy

Version NID
0.940-3.60 0x361850BB

memcpy

Version NID
0.931-3.60 0xBE3AF2EE

memset

Version NID
0.931-3.60 0x956DB750

SceSysrootForTZS

sceKernelSysrootBacktraceForTZS

Version NID
0.931 0xF26A5E68

sceKernelSysrootPrintBacktraceForTZS

Version NID
0.931 0x463EA380

sceKernelSysrootShowCallerInfoForTZS

Version NID
0.931 0x2F3D9414

sceKernelSysrootGetModulePrivateForTZS

Version NID
0.931-1.80 0xC9DD8EB3

sceKernelSysrootSetModulePrivateForTZS

Version NID
0.931-1.80 0xEA572BD9

sceKernelSysrootSetSharedMemoryForTZS

Version NID
0.940-1.80 0x45EEB2E0

sceKernelSysrootGetKermitRevisionForTZS

Version NID
0.940-1.80 0xDB3DAB76

sceKernelSysrootGetSharedMemoryForTZS

Version NID
0.931-3.60 0x1C96096F

sceKernelSysrootCorelockLockForTZS

Version NID
0.931-1.80 0xD653194A

sceKernelSysrootGetVbaseMonitorVectorForTZS

Version NID
0.931-1.80 0xD4E6D8E8

sceKernelSysrootGetKernelMMUContextForTZS

Version NID
0.931-1.80 0xA8B7DAF9

sceKernelSysrootCorelockUnlockForTZS

Version NID
0.931-1.80 0x2F5FD9A8

sceKernelSysrootGetVbaseResetVectorForTZS

Version NID
0.931-1.80 0x2460ADFA

sceKernelIsColdBootForTZS

Version NID
0.940-1.80 0x0567B4B9

sceKernelIsSecureStateForTZS

Version NID
0.940 0xEFA54B46
3.60 not present

sceKernelSysrootGetErnieWakeupFactorForTZS

Version NID
0.940-1.80 0x8E871C6D

sceKernelSysrootGetKblParamForTZS

Version NID
0.931-1.80 0x29C1049E

Returns pointer to KBL Param buffer.

void *sceKernelSysrootGetKblParamForTZS(void);

sceKernelSysrootAllocForTZS

Version NID
0.940-1.80 0x1A9E1D28
void *sceKernelSysrootAllocForTZS(uint32_t size);

SceQafMgrForTZS

sceSblQafManagerIsAllowKernelDebugForTZS

Version NID
0.990-1.80 0x54D22D74

return *(char *)(sceKernelSysrootGetKblParamForTZS() + 0x2D) & 1;

ScePmMgrForTZS

sceSblPmMgrGetProductModeForTZS

Version NID
0.990-3.60 0xCF554E69

SceSblAIMgrForTZS

sceSblAIMgrIsCEXForTZS

Version NID
0.990-3.60 0x536B38F4