SceSysmem Types
Revision as of 13:30, 26 July 2023 by CelesteBlue (talk | contribs) (Created page with "<source lang="C"> typedef struct SceKernelVARange SceKernelVARange; typedef struct SceKernelBootArgs SceKernelBootArgs; typedef struct SceSysrootProcessHandler SceSysrootProce...")
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 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_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?
/**
* 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 SceKernelAddressSpace { // 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;
} SceKernelAddressSpace;
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;
Debug Types
typedef struct kernel_message_ctx { // 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.
int line; //Line in file - ignored if pFile is NULL.
const char *pFunc; // Pointer to function name - ignored if pFile is NULL.
} kernel_message_ctx;
/**
* 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;
}