SceSysmem Types: Difference between revisions
Jump to navigation
Jump to search
(→Types) |
|||
Line 1,014: | Line 1,014: | ||
#define SCE_UID_ENTRY_MAX_LCOUNT (0xF0) | #define SCE_UID_ENTRY_MAX_LCOUNT (0xF0) | ||
typedef struct SceKernelSuspendPowerCallback { // size is 0x38 | |||
SceSize size; | |||
int (* cb_0x04)(int a1); | |||
int (* cb_0x08)(int a1); | |||
int (* sceKernelSuspendPowerLock)(int a1); | |||
int (* sceKernelSuspendPowerUnlock)(int a1); | |||
int (* cb_0x14)(void); // SceKernelSuspendForDriver_0A6CA124 | |||
int (* cb_0x18)(void); // SceKernelSuspendForDriver_0106C0F0 | |||
int (* cb_0x1C)(void); // SceKernelSuspendForDriver_AEA9440D | |||
int (* cb_0x20)(int a1); // SceKernelSuspendForDriver_6A503956 | |||
int (* sceKernelSuspendPowerTick)(int type); | |||
int (* cb_0x28)(int a1, int a2); // SceKernelSuspendForDriver_1FA2F8F1 | |||
int (* scePowerSetIdleCallback)(int a1, int inhibit_reset, SceUInt64 time, ScePowerIdleCallback cb, int a6); | |||
int (* ScePowerForDriver_660D5AB4)(int idx); // trigger?, SceKernelSuspendForDriver_81D9E41C | |||
int (* ScePowerForDriver_991BDEAF)(int a1, int a2, int a3, int a4); // SceKernelSuspendForDriver_B4B13615 | |||
} SceKernelSuspendPowerCallback; | |||
</source> | </source> | ||
Latest revision as of 19:22, 13 February 2024
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 struct SceKernelMMUContext { // size is 0xC on FWs 0.931-3.60
SceUInt32 TTBR1;
SceUInt32 DACR;
SceUInt32 CONTEXTIDR;
} SceKernelMMUContext;
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;
typedef struct SceSysrootDbgpHandler { // size is 0x5C on FW 3.600.011
SceSize size; // Size of this structure
void (* unk_0x04)(int a1, int a2, int a3, int a4);
void (* unk_0x08)(int a1, int a2, int a3, int a4);
void (* unk_0x0C)(int a1);
void (* unk_0x10)(int a1, int a2, int a3, int a4);
void (* unk_0x14)(int a1, int a2, int a3, int a4);
void (* unk_0x18)(SceUID pid, SceUID modid, int flags, uint64_t time);
void (* unk_0x1C)(int a1, int a2, int a3);
void (* unk_0x20)(int a1, int a2, int a3);
void (* unk_0x24)(int a1, int a2, int a3);
void (* unk_0x28)(SceUID pid, SceUID modid, uint64_t time);
void (* unk_0x2C)(SceUID pid, SceUID modid, uint64_t time);
int (* unk_0x30)(SceUID pid);
int (* unk_0x34)(int a1, int a2, int a3);
int (* unk_0x38)(int a1, int a2, void *a3);
int (* unk_0x3C)(int a1, int a2, int a3);
int (* sceKernelGetPrxDebugFlag)(SceUID pid, int *pFlag); // This is a guessed name.
int (* unk_0x44)(SceUID pid, SceUID modid, int flags, uint64_t time);
int (* unk_0x48)(int a1, int a2, int a3);
void (* unk_0x4C)(void);
void (* unk_0x50)(void);
int (* unk_0x54)(int a1, int a2, int a3, int a4, int a5);
int (* unk_0x58)(int a1, int a2, int a3);
} SceSysrootDbgpHandler;
#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-3.65
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 pervasive_unk_dword; // read from physical address 0xE3100004 (ScePervasiveMisc + 0x4). ex: 0
SceUInt32 kermit_revision;
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
#if SCE_SDK_VERSION >= 0x3630000
int (* sceKernelSysrootAppMgrFunction1)(int a1, int a2, int a3, int a4, int a5, int a6); // SceAppMgr + 0x2795, SceAppMgrForDriver_324DD34E
SceUID (* sceKernelSysrootGetShellPid)(void);
// offset: 0x330
#endif
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
#if SCE_SDK_VERSION >= 0x3630000
// offset: 0x344
SceSysrootModulemgrHandlers *modulemgr_handlers;
#endif
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
#if SCE_SDK_VERSION < 0x3630000
// offset: 0x350
SceSysrootModulemgrHandlers *modulemgr_handlers;
#endif
int unk_0x354; // ex:0xFFFFFFFF
SceSysrootForKernel_D29BCA77_struct *processmgr_callbacks_1;
SceSysrootForDriver_733C243E_struct *processmgr_callbacks_2;
#if SCE_SDK_VERSION < 0x3630000
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);
#endif
#if SCE_SDK_VERSION >= 0x3630000
// offset: 0x368
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_0x360; // SceDeci4pSDfMgr
int (* sceKernelSysrootGetBusError)(void *dst, SceSize len);
// offset: 0x37C
#endif
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
#if SCE_SDK_VERSION < 0x3630000
// offset: 0x380
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
#endif
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 { // size is 0x48 on FWs 0.940-0.945
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 { // size is 0x44 on FWs 0.990-0.995
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 of SceSysrootForKernel_D29BCA77_struct for FWs 0.996.070-0.996.090 is 0x58
// Size of SceSysrootForKernel_D29BCA77_struct for FWs 1.000.071-1.500.151 (maybe higher) is 0x5C
typedef struct SceSysrootForKernel_D29BCA77_struct_3600 { // size is 0x44 on FWs 3.60-3.65,
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* pOpt);
SceInt32 (*sceKernelFreeCurrentProcessHeap)(void* addr);
//Allocations are made from specified process' "Unique" heap
//KERNEL_PID (0x10005), DummyProcessGame (0x10013) and DummyProcessSystem (0x10015) are accepted as PIDs
void *(*sceKernelAllocRemoteProcessHeap)(ScePID pid, SceSize size, SceKernelHeapMemoryOpt* pOpt);
SceInt32 (*sceKernelFreeRemoteProcessHeap)(ScePID pid, void* ptr);
SceInt32 (*ProcessmgrModuleStart2)();
//Equivalent to sceKernelWaitSema(processObject->EventLock_sema, 1, NULL);
SceInt32 (*sceKernelInhibitProcEvent)(ScePID pid);
//Equivalent to sceKernelSignalSema(processObject->EventLock_sema, 1);
SceInt32 *(sceKernelPermitProcEvent)(ScePID pid);
//info_type = 0 -> returns processObject->unk0x424
//info_type = 1 -> returns processObject->MaxFHCount
//other values -> return 0
SceInt32 (*query_some_process_info)(ScePID pid, SceUInt32 info_type);
SceInt32 (*sceKernelRegisterKPLS)(char* name, SceSize size);
//Fails if TPIDRPRW is NULL
void *(*sceKernelGetCurrentKPLS)(SceUInt32 key);
SceInt32 (*sceKernelGetRemoteKPLS)(ScePID pid, SceUInt32 key, ScePVoid* pKPLS, SceBool create);
SceInt32 (*sceKernelProcessDebugSuspend)(ScePID pid, int status);
//Retreived from process object's SceLoadProcessParam
SceInt32 (*sceKernelGetCompiledSdkVersionByPid)(ScePID pid, 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 FWs 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, SceUInt64 time); //!< process start shared modules
void (* exit)(SceUID pid, int flags, SceUInt64 time);
void (* kill)(SceUID pid); //!< by SceShell
void (* unk_10)(SceUID pid, SceUID modid, SceUInt64 time);
void (* unk_14)(SceUID pid, SceUID modid, SceUInt64 time);
void (* unk_18)(SceUID pid, SceUID modid, int a3, void* maybe_process_info, SceUInt64 time);
int (* on_process_created)(int maybe_pid, int maybe_modid, int a3); //!< called when process is created
void (* unk_20)(SceUID pid, SceUID modid, SceUInt64 time);
void (* unk_24)(SceUID pid, SceUID modid, int flags, SceUInt64 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;
//Constructor/destructor of a class item
//For classes inheriting another class, the constructors are called from the parent to the child
//while the destructors are called in reverse order (same as C++ cstr/dstr)
typedef int (*SceClassCallback)(void *item);
//What is this?
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;
// How is this structure wrong? So where is the valid SceClass for FW 3.60? See below
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;
typedef struct SceClass { //size is 0x28 on FW 0.990, 0x2C on FW 3.60
struct SceClass *next; //0x00 - pUserdata of SceKernelObject, pointer to next class in DLink list
struct SceClass *pClass; //0x04 - pClass of SceKernelObject, always points to SceUIDClass class
struct SceClass *prev; //0x08 - Pointer to previous class in DLink list
const char* name; //0x0C - Pointer to class' name
struct SceClass *parent; //0x10 - Pointer to parent class
SceUInt32 attr; //0x14 - Usage unknown (bottom 8 bits = some counter?)
SceUInt16 itemSize; //0x18 - Size of items of this class
SceUInt16 itemAllocationSize; //0x1A - Size of allocations used for items of this class (rounded up itemSize)
#if (/* firmware 3.60 */)
SceUInt32 unk0x1C; //0x1C
#endif
SceClassCallback constructor; //0x1C / 0x20 - called after item is allocated
SceClassCallback destructor; //0x20 / 0x24 - called before item is freed
SceUInt32 magic; //0x24 / 0x28 - magic value 0xABCD9DA5
//NOTE: additional data can be stored here for use by the class
} SceClass;
// Aka SceObjectBase in vitasdk
typedef struct SceKernelObject {
void *pObject;
SceClass *pClass;
uintptr_t data[];
} SceKernelObject;
// Here is a wrong structure for SceKernelObject, but this could be a SceUIDXxxClass structure
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 SceKernelMemBlockInfoCore {
SceKernelMemBlockType type;
SceUID guid;
const char *name;
void *mappedBase;
SceSize mappedSize;
SceSize allocMapSize;
int extraLow;
int extraHigh;
int unk20; // Some sort of internal memblock paging type. 0x4 - MemBlockVirPageList, 0x8 - MemBlockPartial
SceUID partitionGuid;
SceUIDPhyMemPartObject *pPhyMemPart;
} SceKernelMemBlockInfoCore;
typedef struct SceKernelMemBlockInfoEx { // size is 0xAC on FW 0.990, 0xB8 on FW 3.60
SceSize size; // Size of this structure
SceKernelMemBlockInfoCore coreInfo;
SceSize nPhyAddrs;
SceSize nPhySizes;
void *phyAddrs[0x10];
SceSize phySizes[0x10];
} SceKernelMemBlockInfoEx;
typedef struct SceKernelMemBlockInfoSimple { // size is 0x24 on FW 0.990
SceSize size; // Size of this structure
SceKernelMemBlockInfoCore coreInfo;
} 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_0x4000 0x00004000 // Some options when registering SceKernelBlock with guid
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_DOMAIN 0x00010000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_NOPHYPAGE 0x00020000
#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_DONT_MAP 0x00040000 // Do not map the memory block in the virtual address space (unofficial name)
#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?
/**
* Partial Operations
*/
#define SCE_KERNEL_MEMBLOCK_PARTIAL_OP_ALLOC (0x0100)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_OP_FREE (0x0200)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_OP_MAP (0x0400)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_OP_UNMAP (0x0800)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_OP_REMAP_RO (0x1000)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_OP_REMAP_RW (0x2000)
/**
* Partial Operation Checks. Checks are mutually exclusive, so only one may be set for a partial op.
*/
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_NONE (0x00)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_ALLOCATED (0x01)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_FREE (0x02)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_MAPPED (0x04)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_ALLOCNOMAP (0x08)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_MAPPED_RW (0x10)
#define SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_MAPPED_RO (0x20)
/**
* 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_0990 { // 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_0990;
typedef struct SceKernelFixedHeapInfo {
SceSize size; //size of this structure (0x90 on FW 3.65)
SceSize objectSize;
SceSize totalHeapSize;
SceSize totalItemCount;
SceSize totalFreeCount;
SceUInt32 nUsedMax;
SceUInt32 unk_18;
//These two fields may be a single Highwater counter
SceUInt16 nItemInPage;
SceUInt16 nMaxItemInPage;
SceUInt32 nListCount;
struct {
SceUInt16 unk_00;
SceUInt16 nCount;
SceUInt32 unk_04;
SceUInt32 unk_08;
SceUInt32 unk_0C;
} cpuCache[4];
SceUInt32 unk_64;
SceUInt32 unk_68;
SceUInt32 unk_6C;
SceUInt32 unk_70;
SceUInt32 nItem;
SceUInt32 unk_78;
SceUInt32 nPage;
SceUInt32 unk_80;
SceUInt32 unk_84;
SceUInt32 unk_88;
SceUInt32 unk_8C;
} SceKernelFixedHeapInfo;
typedef struct SceKernelHeapMemoryOpt { // size is 0x14 on FW 0.990-3.60
SceSize size; // Size of this structure
uint32_t unk_4; // ex: 0
SceSize alignment; // ex: 0x10, 0x40
uint32_t unk_C; // ex: 0, 0x20
uint32_t unk_10; // ex: 0
} 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 SceKernelMMUL1Info { // size is 0xC in 0.990 - holds information about a single L1PT entry
SceUIntVAddr vbase; // Start of the virtual address range mapped by L1PT entry
SceUIntPAddr pbase; // Start of the physical address held in L1PT - paddr mapped for Section, paddr of L2PT for Page Table entry
SceUInt32 entryType; // 0 = Invalid (fault on access), 1 = Section/Supersection, 2 = Page Table
} SceKernelMMUL1Info;
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 SceKernelAddressSpaceCallback {
SceUInt32 index;
void *(* funcMalloc)(SceUInt32 index, SceSize length);
void (* funcFree)(SceUInt32 index, void *ptr);
// maybe more
} SceKernelAddressSpaceCallback;
typedef struct SceKernelCreateAddressSpaceOpt { // size is 0x10 bytes on FW 0.940-3.60
SceSize size; // Size of this structure
int flag;
SceKernelAddressSpaceCallback *data_0x08; // info dst buff ptr, need AddrSpace.flag = 2;
void *TTBR1; // info dst buff ptr, need AddrSpace.flag |= 4;
} SceKernelCreateAddressSpaceOpt;
typedef struct SceKernelAddressSpaceInfo { // size is 0x654-bytes
SceSize size;
SceUID asid;
SceUInt8 CONTEXTID;
SceUInt8 paddinf[3];
SceUInt32 nList;
struct {
SceSize size;
SceUIDPartitionObject *pPart;
SceUIntPtr vbase;
SceSize vsize;
SceUInt32 unk_0x10; // nBlock?
SceSize vsizeRemain;
const char *name;
SceUInt32 unk_0x1C;
SceUInt32 unk_0x20;
SceUInt32 unk_0x24;
SceUInt32 unk_0x28;
SceUInt32 unk_0x2C;
} list[0x20];
SceUInt32 nPhyMemPart;
SceUIDPhyMemPartObject *pPhyMemPart[0x10];
} SceKernelAddressSpaceInfo;
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;
SceUIntPAddr pbase;
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
SceUIntPAddr pbase; // same as SceKernelPhyMemPart field 0x1C
SceSize totalSize;
SceSize freeSize;
SceUInt32 unk_C; // maybe some counter
} ScePhyMemPartInfoCore;
typedef struct SceKernelPhyMemLow { // size is 0x1C on 0.990
SceUInt32 mutex; // For use with sceKernelCpuLockSuspendIntrStoreLR
SceUIntPAddr pbase; // Base address of range managed by this instance
SceSize psize; // Size of range managed by this instance
SceSize granularity; // Minimum size that can be allocated from this instance (i.e. every allocation must be aligned to this)
SceUInt32 unk10; // Maybe backing memory type? Seen values: 0x20 (CDRAM)
SceSize bitmapSize; // Size of the bitmap array (in elements)
SceUInt32* bitmap; // Bitmap used to store which elements managed by this instance are in use - each bit represents a granularity-sized element. Status of element n can be found by looking at (bitmap[n / 32] >> (n % 32)): 0 means free, 1 means occupied
} SceKernelPhyMemLow;
typedef struct ScePhyMemLowInfo { // size is 0x1C on 0.990
SceSize size; // Size of this structure
SceUIntPAddr pbase;
SceSize psize;
SceSize granularity;
SceUInt32 unk10; // unk14 from PhyMemLow
SceSize bmArraySize; // Size of the array pointed to by bitmap, IN ELEMENTS. Nothing is written here. Pass 0 if bitmap is NULL.
SceUInt32* bitmap; // Optional - array that receives a copy of the PhyMemLow bitmap
} ScePhyMemLowInfo;
//for 0.990
#define SCE_KERNEL_PHYMEMLOW_TYPE_LPDDR2MAIN 0x10001
#define SCE_KERNEL_PHYMEMLOW_TYPE_UNK 0x10002
#define SCE_KERNEL_PHYMEMLOW_TYPE_CDRAM 0x20001
typedef struct SceKernelVSlot { // size is at least 0x40 on FW 3.65
char unk_0x0[0x18];
void* base_addr_or_offset;
char unk_0x1C[8];
void* some_struct;
char unk_0x28[0xC];
SceSize alloc_phy_size;
SceSize alloc_size;
int unk;
} SceKernelVSlot;
typedef SceVoid(*SceKernelSysrootVeneziaRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);
typedef SceVoid(*SceKernelSysrootVipRpcDebugFunc)(SceUInt32 debugCode, SceUInt32 argNum, ...);
// This is a guessed type name
typedef SceUInt32 SceKernelLockMode;
#define SCE_KERNEL_LOCK_MODE_0x10 0x10
#define SCE_KERNEL_LOCK_MODE_0x20 0x20
typedef struct SceKernelModulePrivate9 { // size is 0xAC-bytes on FW 3.60
SceClass SceUIDModuleClass;
SceClass SceUIDLibraryClass;
SceClass SceUIDLibStubClass;
SceKernelProcessLibdb libdb;
SceUID ScePsp2BootConfig_modid;
} SceKernelModulePrivate9;
#define SCE_UID_ENTRY_MAX_LCOUNT (0xF0)
typedef struct SceKernelSuspendPowerCallback { // size is 0x38
SceSize size;
int (* cb_0x04)(int a1);
int (* cb_0x08)(int a1);
int (* sceKernelSuspendPowerLock)(int a1);
int (* sceKernelSuspendPowerUnlock)(int a1);
int (* cb_0x14)(void); // SceKernelSuspendForDriver_0A6CA124
int (* cb_0x18)(void); // SceKernelSuspendForDriver_0106C0F0
int (* cb_0x1C)(void); // SceKernelSuspendForDriver_AEA9440D
int (* cb_0x20)(int a1); // SceKernelSuspendForDriver_6A503956
int (* sceKernelSuspendPowerTick)(int type);
int (* cb_0x28)(int a1, int a2); // SceKernelSuspendForDriver_1FA2F8F1
int (* scePowerSetIdleCallback)(int a1, int inhibit_reset, SceUInt64 time, ScePowerIdleCallback cb, int a6);
int (* ScePowerForDriver_660D5AB4)(int idx); // trigger?, SceKernelSuspendForDriver_81D9E41C
int (* ScePowerForDriver_991BDEAF)(int a1, int a2, int a3, int a4); // SceKernelSuspendForDriver_B4B13615
} SceKernelSuspendPowerCallback;
Debug Types
typedef struct _SceKernelDebugInfo { // size is 0x18 on FW 3.60
SceUInt32 fileHash; // First 4 bytes of SHA1(__FILE__) - e.g. 0x123EC4E8 = "processmgr.c"
SceUInt32 lineHash; // First 4 bytes of SHA1("%s:%d" % (__FILE__, __LINE__)) - e.g. 0x7D3F4B00 = "boot.c:1868"
SceUInt32 funcHash; // First 4 bytes of SHA1(__FUNC__) - e.g. 0x197C5ED2 = "LedModuleStart"
const char *pFile; // Pointer to file name - can be NULL.
SceUInt32 line; //Line in file - ignored if pFile is NULL.
const char *pFunc; // Pointer to function name - ignored if pFile is NULL.
} SceKernelDebugInfo;
/**
* An enumeration to represent the various logging levels which can be output by sceDbgLoggingHandler().
*/
typedef enum SceDbgLogLevel {
SCE_DBG_LOG_LEVEL_ALWAYS = 0,
SCE_DBG_LOG_LEVEL_TRACE, /* 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;
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.
All memtype list for 3.60
// For usermode
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_L1WBWA_RW (0x09404060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_R (0x09408040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW (0x09408060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0C200860_RW (0x0C200860)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_R (0x0C20D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RW (0x0C20D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_NC_RW (0x0C208060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_GAME_RW (0x0C50D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW (0x0C80D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW (0x0D808060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_CDIALIG_RW (0x0CA0D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_CDIALIG_NC_RW (0x0CA08060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RW (0x0CF0D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_NC_RW (0x0CF08060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_R (0x0E20D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW (0x0E20D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_R (0x0E208040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_RW (0x0E208060)
// For kernel
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_R (0x0320D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RX (0x0320D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_MAIN_RW (0x0320D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_R (0x0390D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RX (0x0390D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_SHARED_RW (0x0390D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_R (0x03A0D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RX (0x03A0D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_CDIALOG_RW (0x03A0D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_R (0x03F0D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RX (0x03F0D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_SHARED_TOOL_RW (0x03F0D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_R (0x08F0D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_RX (0x08F0D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_RW (0x08F0D060)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_UNK_RW (0x08F0D006)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RX (0x0C20D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_R (0x0C80D040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_R (0x0D808040)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RX (0x0CF0D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RX (0x0E20D050)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0720D006_RW (0x0720D006) /* SCE_KERNEL_ERROR_ILLEGAL_PARTITION_INDEX */
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100240_R (0x0B100240)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100260_RW (0x0B100260)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100840_R (0x0B100840)
#define SCE_KERNEL_MEMBLOCK_TYPE_USER_UNK_0B100860_RW (0x0B100860)
#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_L1WBWA_RW (0x10204006)
#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_ROOT_PHYCONT_R (0x1080D004)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_PHYCONT_RW (0x1080D006)
#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_GAME_RW (0x1050D006)
#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_ROOT_UMAIN_NC_RW (0x10C08006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_ROOT_UMAIN_RW (0x10C0D006)
#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_TOOL_NC_R (0x10F08004)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_NC_RW (0x10F08006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_R (0x1220D004)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_RW (0x1220D006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_NC_R (0x13208004)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_FS_GAME_NC_RW (0x13208006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_R (0x20100204)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW (0x20100206)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_R (0x20100804)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW (0x20100806)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_R (0x20108004)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_NC_RW (0x20108006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_L1WBWA_RW (0x40404006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW (0x40408006)
#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 (0x6020D004)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW (0x6020D006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_GAME_RW (0x6050D006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_GAME_RW (0xC050D006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_KMP_TOOL_RW (0xC0F0D006)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_UNK_11208006_NC_RW (0x11208006) // from ScePhyMemPartKD to SceKernelRootUncacheGpuGame
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_UNK_60208014_NC_R (0x60208014)
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_UNK_60208016_NC_RW (0x60208016)
Note
The only commonly available memtypes are those that are publicly available.
sceKernelAllocMemblockInternal uses a list to translate it into an internal memtype.
So we can't create memtype with any bits and use that's.
memtype bit value
Mask | Value | Description |
---|---|---|
0xF000000 | N/A | Partition index. |
0xF00000 | N/A | Src ScePhyMemPart. |
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.
|
This is based internal memtypes.
Mask | Value | Name |
---|---|---|
0x0F000000 | 0x00000000 | root |
0x0F000000 | 0x01000000 | SceKernelRootUncacheGpuGame |
0x0F000000 | 0x02000000 | SceKernelTmpFsGame |
0x0F000000 | 0x03000000 | SceKernelTmpFsGame |
0x0F000000 | 0x04000000 | SceKernelTool |
0x0F000000 | 0x05000000 | SceKernelRootUncache? |
0x0F000000 | 0x06000000 | Unknown |
0x0F000000 | 0x07000000 | SCE_KERNEL_ERROR_ILLEGAL_PARTITION_INDEX |
0x0F000000 | 0x08000000 | SceKernelUserTool |
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
Mask value Description
0x000000FF | memory access.
0x0000000F for kernel
0x000000F0 for user
0 1 1 0
- R W X
0x00000F00 | unknown
0x00000100 for unknown
0x00000200 for SO
0x00000400 for unknown
0x00000800 for DEVICE
0x0000F000 | cache
0x00002000 for No internal cache only
0x00004000 for No external cache only
0x00008000 for NORMAL_NC (uncache)
0x0000D000 for NORMAL (cache)
0x00F00000 | memory partition select
0x00100000 for IO
0x00200000 for NORMAL (kernel:KD, user:GAME)
0x00300000 for maybe unused
0x00400000 for CDRAM
0x00500000 for GAME
0x00800000 for PHYCONT
0x00900000 for SHARED (usermode only)
0x00A00000 for CDIALOG
0x00C00000 for ???
0x00F00000 for TOOL
0xFF000000 | memory VA select
0x05000000 for user CDRAM2
0x06000000 for user KTMP
0x09000000 for user CDRAM
0x0C000000 for user normal?
0x0D000000 for user MAIN PHYCONT
0x0E000000 for user CDIALOG
0x10000000 for kernel ROOT
0x20000000 for kernel IO
0x30000000 for kernel PHYCONT
0x40000000 for kernel CDRAM
0x50000000 for kernel CDRAM2
0x60000000 for kernel TMP
0xA0000000 for kernel 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
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_PHYCONT_RW_UNCACHE 0x30808006
#define SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_CDRAM_RW_UNK 0x40404006
#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
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