uOFW
Reverse engineered PSP kernel 6.60.
Loading...
Searching...
No Matches
sysmem_kernel.h
1/* Copyright (C) 2011, 2012, 2013 The uOFW team
2 See the file COPYING for copying permission.
3*/
4
5#ifndef SYSMEM_KERNEL_H
6#define SYSMEM_KERNEL_H
7
8#include <stdarg.h>
9
10#include "common_header.h"
11
12#include "sysmem_user.h"
13#include "loadcore.h"
14
15typedef struct {
16 s32 unk0; //0
17 u32 numExportLibs; //4 -- number of sysmem's export libraries - set in SysMemInit (from utopia)
18 SceResidentLibraryEntryTable *kernelLibs[8]; //8 --array of sysmem's export tables set in SysMemInit (from utopia)
19 u32 loadCoreAddr; // 40 -- allocated in SysMemInit (from utopia)
20 u32 numKernelLibs; // 44 -- offset in export_lib at which user libraries begin - set in SysMemInit (from utopia)
21 s32 unk48; //48
22 SceUID (*AllocPartitionMemory)(s32 mpid, char *name, u32 type, u32 size, u32 addr); // 52
23 void * (*GetBlockHeadAddr)(SceUID id); // 56
24 s32 (*ResizeMemoryBlock)(SceUID id, s32 leftShift, s32 rightShift); // 60
25 SceStubLibraryEntryTable *loadCoreImportTables; //64 -- loadcore stubs - set in kactivate before booting loadcore (from utopia)
26 u32 loadCoreImportTablesSize; //68 -- total size of stubs - set in kactivate before booting loadcore (from utopia)
27 void *initThreadStack; //72 -- allocated in SysMemInit (from utopia)
28 SceLoadCoreExecFileInfo *sysMemExecInfo; //76 -- set in kactivate before booting loadcore (from utopia)
29 SceLoadCoreExecFileInfo *loadCoreExecInfo; //80 -- set in kactivate before booting loadcore (from utopia)
30 s32 (*CompareSubType)(u32 tag); //84
31 u32 (*CompareLatestSubType)(u32 tag); //88
32 s32 (*SetMaskFunction)(u32 unk1, vs32 *addr); //92
33 void (*Kprintf)(const char *fmt, ...); //96 -- set by sysmem (from utopia)
34 s32 (*GetLengthFunction)(u8 *file, u32 size, u32 *newSize); //100 -- set in kactivate before booting loadcore (from utopia)
35 s32 (*PrepareGetLengthFunction)(u8 *buf, u32 size); //104
36 SceResidentLibraryEntryTable *userLibs[3]; //108
37} SysMemThreadConfig;
38
40enum ScePspHwModels {
42 PSP_1000 = 0,
44 PSP_2000 = 1,
46 PSP_3000 = 2,
48 PSP_4000 = 3,
50 PSP_GO = 4,
52 PSP_7000 = 6,
54 PSP_9000 = 8,
56 PSP_11000 = 10,
57};
58
59/*
60 * Misc
61 */
62
63typedef struct SceGameInfo SceGameInfo, *PSceGameInfo;
64
65struct SceGameInfo {
66 u32 size; // 0
67 u32 flags; // 4
68 u8 umd_data_string[16]; // 8
69 u8 expect_umd_data[16]; // 24
70 char QTGP2[8]; // 40
71 char QTGP3[16]; // 48
72 u32 allow_replace_umd; // 64
73 u8 param_product_string[16]; // 68
74 u32 param_parental; // 84
75 char vsh_version[8]; // 88
76 u32 umd_cache_on; // 96
77 u32 compiled_sdk_version; // 100
78 u32 compiler_version; // 104
79 u32 DNAS; // 108
80 u32 utility_location; // 112
81 char vsh_bootfilename[64]; // 116
82 char param_gamedata_id[16]; // 180
83 char param_app_ver[8]; // 196
84 u8 subscription_validity[8]; // 204
85 u32 param_bootable; // 212
86 u32 param_opnssmp_ver; // 216
87};
88
89s32 SysMemForKernel_807179E7(char *gameId, int arg1, char *arg2, char *arg3, int arg4, int arg5, char *arg6);
90s32 sceKernelCopyGameInfo(SceGameInfo *info);
91s32 SysMemForKernel_F3BDB718(char *arg0);
92s32 sceKernelGetQTGP2(char *qtgp2);
93s32 sceKernelSetQTGP2(char *qtgp2);
94s32 sceKernelGetQTGP3(char *qtgp3);
95s32 sceKernelSetQTGP3(char *qtgp3);
96s32 sceKernelGetAllowReplaceUmd(u32 *allow);
97s32 sceKernelSetAllowReplaceUmd(u32 allow);
98s32 sceKernelSetUmdCacheOn(u32 umdCacheOn);
99s32 SysMemForKernel_40B744A4(u32 unk112);
100s32 SysMemForKernel_BFE08689(char *str116);
101s32 SysMemForKernel_2A8B8B2D(char *unk204);
102SceGameInfo *sceKernelGetGameInfo(void);
103u32 sceKernelGetCompiledSdkVersion(void);
104s32 sceKernelSetCompiledSdkVersion100(u32 ver);
105s32 sceKernelSetCompiledSdkVersion370(u32 ver);
106s32 sceKernelSetCompiledSdkVersion380_390(u32 ver);
107s32 sceKernelSetCompiledSdkVersion395(u32 ver);
108s32 sceKernelSetCompiledSdkVersion410_420(u32 ver);
109s32 sceKernelSetCompiledSdkVersion500_550(u32 ver);
110s32 sceKernelSetCompiledSdkVersion570(u32 ver);
111s32 sceKernelSetCompiledSdkVersion600_620(u32 ver);
112s32 sceKernelSetCompiledSdkVersion630_650(u32 ver);
113s32 sceKernelSetCompiledSdkVersion660(u32 ver);
114s32 sceKernelGetCompilerVersion(void);
115s32 sceKernelSetCompilerVersion(s32 version);
116s32 sceKernelGetDNAS(void);
117s32 sceKernelSetDNAS(s32 dnas);
118s32 sceKernelGetInitialRandomValue(void);
119s32 SysMemForKernel_A0A9185A(void);
120u32 SysMemForKernel_13EE28DA(u32 flag);
121u32 sceKernelGetModel(void);
122s32 sceKernelSetRebootKernel(s32 (*rebootKernel)());
123s32 sceKernelRebootKernel(void *arg);
124s32 sceKernelRegisterGetIdFunc(void *func);
125s32 sceKernelGetId(const char *path, char *id);
126
127/*
128 * Debugging (disabled in release)
129 */
130s32 sceKernelApiEvaluationInit();
131s32 sceKernelRegisterApiEvaluation();
132s32 sceKernelApiEvaliationAddData();
133s32 sceKernelApiEvaluationReport();
134s32 sceKernelSetGcovFunction();
135s32 sceKernelCallGcovFunction();
136s32 sceKernelSetGprofFunction();
137s32 sceKernelCallGprofFunction();
138int sceKernelCheckDebugHandler();
139s32 SysMemForKernel_7FF2F35A(char *arg);
140s32 SysMemForKernel_A03CB480(char *arg);
141
142/*
143 * Heap
144 */
145
146typedef struct SceSysmemLowheapBlock {
147 struct SceSysmemLowheapBlock *next;
148 u32 count;
149} SceSysmemLowheapBlock;
150
151typedef struct SceSysmemHeapBlock {
152 struct SceSysmemHeapBlock *next, *prev; // 0, 4
153 // followed by lowheap
154} SceSysmemHeapBlock;
155
156SceUID sceKernelCreateHeap(SceUID mpid, SceSize size, int flag, const char *name);
157
158typedef struct {
159 u32 size; // 0
160 char name[32]; // 4
161 int perm; // 36
162 int attr; // 40
163 int heapSize; // 44
164 int totalsize; // 48
165 int totalfreesize; // 52
166 int maxfreesize; // 56
167 int numheaps; // 60
168 SceSysmemHeapBlock *heaps[];
169} SceSysmemHeapInfo;
170
171int sceKernelQueryHeapInfo(SceUID id, SceSysmemHeapInfo *info);
172
173typedef struct SceSysmemLowheapInfoBlock {
174 SceSysmemLowheapBlock *block;
175 u32 offset;
176} SceSysmemLowheapInfoBlock;
177
178typedef struct {
179 u32 size; // 0
180 u32 heapSize; // 4
181 u32 usedSize; // 8
182 u32 freeSize; // 12
183 u32 maxFreeSize; // 16
184 u32 blockCount; // 20
185 SceSysmemLowheapInfoBlock infoBlocks[];
186} SceSysmemLowheapInfo; // size: 24
187
188s32 sceKernelQueryLowheapInfo(SceSysmemHeapBlock *block, SceSysmemLowheapInfo *info);
189int sceKernelDeleteHeap(SceUID id);
190
191typedef struct {
192 u32 size; // structure size (probably)
193 u32 align;
194} SceSysmemHeapAllocOption;
195
196void *sceKernelAllocHeapMemoryWithOption(SceUID id, int size, SceSysmemHeapAllocOption *opt);
197void *sceKernelAllocHeapMemory(SceUID id, int size);
198s32 sceKernelFreeHeapMemory(SceUID id, void *addr);
199s32 sceKernelHeapTotalFreeSize(SceUID id);
200
201/*
202 * Main
203 */
204
205typedef struct {
206 unsigned used : 1; // 0
207 unsigned next : 6; /* next index */ // 1
208 unsigned offset : 25; /* offset (from the partition start, divided by 0x100) */ // 7
209 unsigned isProtected : 1; // 0
210 unsigned sizeLocked : 1; // 1
211 unsigned prev : 6; // 2
212 unsigned checkOverflow : 1; // 8
213 unsigned size : 23; /* size (divided by 0x100) */ // 9
214} SceSysmemSeg; // size: 8
215
216typedef struct {
217 union {
218 u32 segCount;
219 u32 segAddr;
220 } info;
221 u32 size; // 4
222 u32 unused8; // 8
223 SceSysmemSeg *curSeg; // 12
224} SceSysMemoryInfo;
225
226void sceKernelGetSysMemoryInfo(s32 mpid, u32 needsInit, SceSysMemoryInfo *info);
227s32 sceKernelGetSysmemIdList(s32 id, s32 *uids, s32 maxCount, s32 *totalCount);
228s32 sceKernelSysMemRealMemorySize(void);
229s32 sceKernelSysMemMemSize(void);
230s32 sceKernelSysMemMaxFreeMemSize(void);
231s32 sceKernelGetMEeDramSaveAddr(void);
232s32 sceKernelGetAWeDramSaveAddr(void);
233s32 sceKernelGetMEeDramSaveSize(void);
234s32 sceKernelGetAWeDramSaveSize(void);
235s32 sceKernelDevkitVersion(void);
236s32 sceKernelGetSystemStatus(void);
237s32 sceKernelSetSystemStatus(s32 newStatus);
238
239typedef struct {
240 // Last display list for which a UpdateStallAddr() was run
241 s32 dlId;
242 // The stall address which was supposed to be set in the last call
243 void *stall;
244 // Number of times an update has been called on the current dlId
245 u32 count;
246 // Number of calls to updateStallAddr() required until we really set the address
247 u32 max;
248} SceGeLazy;
249
250typedef struct {
251 u32 size;
252 s32 *cmdList;
253 s32 (*sceGeListUpdateStallAddr_lazy)(s32 dlId, void *stall);
254 SceGeLazy *lazySyncData;
255} SceKernelUsersystemLibWork;
256
257s32 sceKernelSetUsersystemLibWork(s32 *cmdList, s32 (*sceGeListUpdateStallAddr_lazy)(s32, void*), SceGeLazy *lazy);
258SceKernelUsersystemLibWork *sceKernelGetUsersystemLibWork(void);
259
260/*
261 * Memory Block
262 */
263
264typedef struct {
265 s32 size; // Structure size
266} SceSysmemMemoryBlockAllocOption;
267
268SceUID sceKernelAllocMemoryBlock(char *name, u32 type, u32 size, SceSysmemMemoryBlockAllocOption *opt);
269s32 sceKernelFreeMemoryBlock(SceUID id);
270s32 sceKernelGetMemoryBlockAddr(SceUID id, void **addrPtr);
271
272/*
273 * Memory Main
274 */
275
276typedef struct {
277 u32 size; // 0
278 char name[32]; // 4
279 u32 attr; // 36
280 u32 addr; // 40
281 u32 memSize; // 44
282 u32 sizeLocked; // 48
283 u32 used; // 52
284} SceSysmemMemoryBlockInfo;
285
286s32 sceKernelResizeMemoryBlock(SceUID id, s32 leftShift, s32 rightShift);
287s32 sceKernelJointMemoryBlock(SceUID id1, SceUID id2);
288s32 sceKernelSeparateMemoryBlock(SceUID id, u32 cutBefore, u32 size);
289s32 sceKernelQueryMemoryBlockInfo(SceUID id, SceSysmemMemoryBlockInfo *infoPtr);
290s32 sceKernelSizeLockMemoryBlock(SceUID id);
291s32 sceKernelFreePartitionMemory(SceUID id);
292s32 sceKernelQueryMemoryInfo(u32 address, SceUID *partitionId, SceUID *memoryBlockId);
293void *sceKernelGetBlockHeadAddr(SceUID id);
294u32 SysMemForKernel_CC31DEAD(SceUID id);
295void *sceKernelMemset(void *src, s8 c, u32 size);
296void *sceKernelMemset32(void *src, s32 c, u32 size);
297void *sceKernelMemmove(void *dst, void *src, u32 size);
298void *sceKernelMemmoveWithFill(void *dst, void *src, u32 size, s32 fill);
299void *sceKernelMemcpy(void *dst, const void *src, u32 n);
300
301/*
302 * Memory Operations
303 */
304void sceKernelMemoryExtendSize(void);
305void sceKernelMemoryShrinkSize(void);
306u32 sceKernelMemoryOpenSize(void);
307void sceKernelMemoryCloseSize(u32 state);
308s32 sceKernelSetDdrMemoryProtection(u32 addr, u32 size, u32 set);
309
310/*
311 * Partitions
312 */
313
314typedef struct {
315 SceSize size; // 0
316 u32 startAddr; // 4
317 u32 memSize; // 8
318 u32 attr; // 12
319} SceSysmemPartitionInfo;
320
321s32 sceKernelQueryMemoryPartitionInfo(s32 mpid, SceSysmemPartitionInfo *info);
322u32 sceKernelPartitionMaxFreeMemSize(s32 mpid);
323u32 sceKernelPartitionTotalMemSize(s32 mpid);
324u32 sceKernelTotalMemSize(void);
325u32 sceKernelPartitionTotalFreeMemSize(s32 mpid);
326s32 sceKernelFillFreeBlock(s32 mpid, u32 c);
327SceUID sceKernelAllocPartitionMemory(s32 mpid, char *name, u32 type, u32 size, u32 addr);
328
329/*
330 * UIDs
331 */
332
333#define UID_CB_TO_DATA(uid, typeStruct, type) ((type*)((void*)uid + typeStruct->size * 4))
334#define UID_DATA_TO_CB(data, typeStruct) ((SceSysmemUidCB*)((void*)data - typeStruct->size * 4))
335
336struct SceSysmemUidLookupFunc;
337
338typedef struct SceSysmemUidCB {
339 struct SceSysmemUidCB *PARENT0; // 0
340 struct SceSysmemUidCB *nextChild; // 4
341 struct SceSysmemUidCB *meta; // 8: the type UID
342 SceUID uid; // 12
343 char *name; // 16
344 u8 childSize; // 20
345 u8 size; // 21
346 u16 attr; // 22
347 union {
348 struct SceSysmemUidCB *next; // 24
349 s32 numChild; // 24
350 } next;
351 struct SceSysmemUidCB *PARENT1; // 28
352 struct SceSysmemUidLookupFunc *funcTable; // 32
353} __attribute__((packed)) SceSysmemUidCB; // size: 36
354
355typedef s32 (*SceSysmemUidFunc)(SceSysmemUidCB *uid, SceSysmemUidCB *uidWithFunc, s32 funcId, va_list ap);
356
357typedef struct SceSysmemUidLookupFunc {
358 s32 id;
359 SceSysmemUidFunc func;
360} SceSysmemUidLookupFunc;
361
362s32 sceKernelCallUIDFunction(SceUID id, s32 funcId, ...);
363s32 sceKernelCallUIDObjFunction(SceSysmemUidCB *uid, s32 funcId, ...);
364int sceKernelLookupUIDFunction(SceSysmemUidCB *uid, int id, SceSysmemUidFunc *func, SceSysmemUidCB **parentUidWithFunc);
365s32 sceKernelCallUIDObjCommonFunction(SceSysmemUidCB *uid, SceSysmemUidCB *uidWithFunc, s32 funcId, va_list ap);
366int sceKernelCreateUIDtypeInherit(const char *parentName, const char *name, int size,
367 SceSysmemUidLookupFunc *funcTable, SceSysmemUidLookupFunc *metaFuncTable,
368 SceSysmemUidCB **uidTypeOut);
369int sceKernelCreateUID(SceSysmemUidCB *type, const char *name, char k1, SceSysmemUidCB **outUid);
370SceUID sceKernelSearchUIDbyName(const char *name, SceUID typeId);
371int sceKernelCreateUIDtype(const char *name, int size, SceSysmemUidLookupFunc *funcTable,
372 SceSysmemUidLookupFunc *metaFuncTable, SceSysmemUidCB **uidTypeOut);
373s32 sceKernelDeleteUIDtype(SceSysmemUidCB *uid);
374s32 sceKernelGetUIDname(SceUID id, s32 len, char *out);
375s32 sceKernelRenameUID(SceUID id, const char *name);
376s32 sceKernelGetUIDtype(SceUID id);
377s32 sceKernelDeleteUID(SceUID id);
378s32 sceKernelGetUIDcontrolBlock(SceUID id, SceSysmemUidCB **uidOut);
379s32 sceKernelGetUIDcontrolBlockWithType(SceUID id, SceSysmemUidCB *type, SceSysmemUidCB **outUid);
380s32 sceKernelIsKindOf(SceSysmemUidCB *uid, SceSysmemUidCB *type);
381s32 sceKernelPrintUidListAll(void);
382
383typedef struct {
384 SceSysmemUidCB *root; // 0
385 SceSysmemUidCB *metaRoot; // 4
386 SceSysmemUidCB *basic; // 8
387 s32 count; // 12
388} SceSysmemUidList;
389
390SceSysmemUidList *sceKernelGetUidmanCB(void);
391s32 sceKernelIsHold(SceSysmemUidCB *uid0, SceSysmemUidCB *uid1);
392s32 sceKernelHoldUID(SceUID id0, SceUID id1);
393s32 sceKernelReleaseUID(SceUID id0, SceUID id1);
394
395#endif
396
Definition loadcore.h:572
Definition loadcore.h:221
Definition loadcore.h:259