diff --git a/src/kernel/InitForKernel.S b/src/kernel/InitForKernel.S index 8eee6bdbc2..def1aa34b2 100644 --- a/src/kernel/InitForKernel.S +++ b/src/kernel/InitForKernel.S @@ -6,35 +6,38 @@ IMPORT_START "InitForKernel",0x00090000 #endif #ifdef F_InitForKernel_0001 - IMPORT_FUNC "InitForKernel",0x1D3256BA,sceKernelRegisterChunk + IMPORT_FUNC "InitForKernel",0x1D3256BA,sceKernelRegisterChunk #endif #ifdef F_InitForKernel_0002 - IMPORT_FUNC "InitForKernel",0x27932388,sceKernelBootFrom + IMPORT_FUNC "InitForKernel",0x27932388,sceKernelBootFrom #endif #ifdef F_InitForKernel_0003 - IMPORT_FUNC "InitForKernel",0x2C6E9FE9,sceKernelGetChunk + IMPORT_FUNC "InitForKernel",0x2C6E9FE9,sceKernelGetChunk #endif #ifdef F_InitForKernel_0004 - IMPORT_FUNC "InitForKernel",0x33D30F49,InitForKernel_33D30F49 + IMPORT_FUNC "InitForKernel",0x33D30F49,sceKernelShowIntrHandlerInfo #endif #ifdef F_InitForKernel_0005 - IMPORT_FUNC "InitForKernel",0x7233B5BC,InitForKernel_7233B5BC + IMPORT_FUNC "InitForKernel",0x7233B5BC,sceKernelApplicationType #endif #ifdef F_InitForKernel_0006 - IMPORT_FUNC "InitForKernel",0x7A2333AD,sceKernelInitApitype + IMPORT_FUNC "InitForKernel",0x7A2333AD,sceKernelInitApitype #endif #ifdef F_InitForKernel_0007 - IMPORT_FUNC "InitForKernel",0x9F9AE99C,InitForKernel_9F9AE99C + IMPORT_FUNC "InitForKernel",0x9F9AE99C,sceKernelSetInitCallback #endif #ifdef F_InitForKernel_0008 - IMPORT_FUNC "InitForKernel",0xA6E71B93,sceKernelInitFileName + IMPORT_FUNC "InitForKernel",0xA6E71B93,sceKernelInitFileName #endif #ifdef F_InitForKernel_0009 - IMPORT_FUNC "InitForKernel",0xC4F1BA33,InitForKernel_C4F1BA33 + IMPORT_FUNC "InitForKernel",0xC4F1BA33,sceKernelStartIntrLogging #endif #ifdef F_InitForKernel_0010 - IMPORT_FUNC "InitForKernel",0xCE88E870,sceKernelReleaseChunk + IMPORT_FUNC "InitForKernel",0xCE88E870,sceKernelReleaseChunk #endif #ifdef F_InitForKernel_0011 - IMPORT_FUNC "InitForKernel",0xFD0F25AD,InitForKernel_FD0F25AD -#endif + IMPORT_FUNC "InitForKernel",0xFD0F25AD,sceKernelShowIntrMaskTime +#endif +#ifdef F_InitForKernel_0012 + IMPORT_FUNC "InitForKernel",0x040C934B,sceKernelQueryInitCB +#endif diff --git a/src/kernel/Makefile.am b/src/kernel/Makefile.am index 481595b590..dbd8846faa 100644 --- a/src/kernel/Makefile.am +++ b/src/kernel/Makefile.am @@ -34,7 +34,7 @@ SYSCLIB_OBJS = SysclibForKernel_0000.o SysclibForKernel_0001.o SysclibForKernel_ LOADEXEC_OBJS = LoadExecForKernel_0000.o LoadExecForKernel_0001.o LoadExecForKernel_0002.o LoadExecForKernel_0003.o LoadExecForKernel_0004.o LoadExecForKernel_0005.o LoadExecForKernel_0006.o LoadExecForKernel_0007.o LoadExecForKernel_0008.o LoadExecForKernel_0009.o LoadExecForKernel_0010.o LoadExecForKernel_0011.o LoadExecForKernel_0012.o LoadExecForKernel_0013.o LoadExecForKernel_0014.o LoadExecForKernel_0015.o LoadExecForKernel_0016.o LoadExecForKernel_0017.o LoadExecForKernel_0018.o LoadExecForKernel_0019.o LoadExecForKernel_0020.o LoadExecForKernel_0021.o LoadExecForKernel_0022.o LoadExecForKernel_0023.o LoadExecForKernel_0024.o LoadExecForKernel_0025.o LoadExecForKernel_0026.o -SYSMEM_OBJS = SysMemForKernel_0000.o SysMemForKernel_0001.o SysMemForKernel_0002.o SysMemForKernel_0003.o SysMemForKernel_0004.o SysMemForKernel_0005.o SysMemForKernel_0006.o SysMemForKernel_0007.o SysMemForKernel_0008.o SysMemForKernel_0009.o SysMemForKernel_0010.o SysMemForKernel_0011.o SysMemForKernel_0012.o SysMemForKernel_0013.o SysMemForKernel_0014.o SysMemForKernel_0015.o SysMemForKernel_0016.o SysMemForKernel_0017.o SysMemForKernel_0018.o SysMemForKernel_0019.o SysMemForKernel_0020.o SysMemForKernel_0021.o SysMemForKernel_0022.o SysMemForKernel_0023.o SysMemForKernel_0024.o SysMemForKernel_0025.o SysMemForKernel_0026.o SysMemForKernel_0027.o SysMemForKernel_0028.o SysMemForKernel_0029.o SysMemForKernel_0030.o SysMemForKernel_0031.o SysMemForKernel_0032.o SysMemForKernel_0033.o SysMemForKernel_0034.o SysMemForKernel_0035.o SysMemForKernel_0036.o SysMemForKernel_0037.o SysMemForKernel_0038.o SysMemForKernel_0039.o SysMemForKernel_0040.o SysMemForKernel_0041.o SysMemForKernel_0042.o SysMemForKernel_0043.o SysMemForKernel_0044.o SysMemForKernel_0045.o SysMemForKernel_0046.o SysMemForKernel_0047.o SysMemForKernel_0048.o SysMemForKernel_0049.o SysMemForKernel_0050.o SysMemForKernel_0051.o SysMemForKernel_0052.o SysMemForKernel_0053.o SysMemForKernel_0054.o SysMemForKernel_0055.o SysMemForKernel_0056.o SysMemForKernel_0057.o SysMemForKernel_0058.o SysMemForKernel_0059.o SysMemForKernel_0060.o SysMemForKernel_0061.o SysMemForKernel_0062.o SysMemForKernel_0063.o SysMemForKernel_0064.o SysMemForKernel_0065.o SysMemForKernel_0066.o SysMemForKernel_0067.o SysMemForKernel_0068.o SysMemForKernel_0069.o SysMemForKernel_0070.o SysMemForKernel_0071.o +SYSMEM_OBJS = SysMemForKernel_0000.o SysMemForKernel_0001.o SysMemForKernel_0002.o SysMemForKernel_0003.o SysMemForKernel_0004.o SysMemForKernel_0005.o SysMemForKernel_0006.o SysMemForKernel_0007.o SysMemForKernel_0008.o SysMemForKernel_0009.o SysMemForKernel_0010.o SysMemForKernel_0011.o SysMemForKernel_0012.o SysMemForKernel_0013.o SysMemForKernel_0014.o SysMemForKernel_0015.o SysMemForKernel_0016.o SysMemForKernel_0017.o SysMemForKernel_0018.o SysMemForKernel_0019.o SysMemForKernel_0020.o SysMemForKernel_0021.o SysMemForKernel_0022.o SysMemForKernel_0023.o SysMemForKernel_0024.o SysMemForKernel_0025.o SysMemForKernel_0026.o SysMemForKernel_0027.o SysMemForKernel_0028.o SysMemForKernel_0029.o SysMemForKernel_0030.o SysMemForKernel_0031.o SysMemForKernel_0032.o SysMemForKernel_0033.o SysMemForKernel_0034.o SysMemForKernel_0035.o SysMemForKernel_0036.o SysMemForKernel_0037.o SysMemForKernel_0038.o SysMemForKernel_0039.o SysMemForKernel_0040.o SysMemForKernel_0041.o SysMemForKernel_0042.o SysMemForKernel_0043.o SysMemForKernel_0044.o SysMemForKernel_0045.o SysMemForKernel_0046.o SysMemForKernel_0047.o SysMemForKernel_0048.o SysMemForKernel_0049.o SysMemForKernel_0050.o SysMemForKernel_0051.o SysMemForKernel_0052.o SysMemForKernel_0053.o SysMemForKernel_0054.o SysMemForKernel_0055.o SysMemForKernel_0056.o SysMemForKernel_0057.o SysMemForKernel_0058.o SysMemForKernel_0059.o SysMemForKernel_0060.o SysMemForKernel_0061.o SysMemForKernel_0062.o SysMemForKernel_0063.o SysMemForKernel_0064.o SysMemForKernel_0065.o SysMemForKernel_0066.o SysMemForKernel_0067.o SysMemForKernel_0068.o SysMemForKernel_0069.o SysMemForKernel_0070.o SysMemForKernel_0071.o MODULE_OBJS = ModuleMgrForKernel_0000.o ModuleMgrForKernel_0001.o ModuleMgrForKernel_0002.o ModuleMgrForKernel_0003.o ModuleMgrForKernel_0004.o ModuleMgrForKernel_0005.o ModuleMgrForKernel_0006.o ModuleMgrForKernel_0007.o ModuleMgrForKernel_0008.o ModuleMgrForKernel_0009.o ModuleMgrForKernel_0010.o ModuleMgrForKernel_0011.o ModuleMgrForKernel_0012.o ModuleMgrForKernel_0013.o ModuleMgrForKernel_0014.o ModuleMgrForKernel_0015.o ModuleMgrForKernel_0016.o ModuleMgrForKernel_0017.o ModuleMgrForKernel_0018.o ModuleMgrForKernel_0019.o ModuleMgrForKernel_0020.o ModuleMgrForKernel_0021.o ModuleMgrForKernel_0022.o @@ -46,7 +46,7 @@ SYSEVENT_OBJS = sceSysEventForKernel_0000.o sceSysEventForKernel_0001.o sceSysEv IMPOSE_OBJS = sceImpose_driver_0000.o sceImpose_driver_0001.o sceImpose_driver_0002.o sceImpose_driver_0003.o sceImpose_driver_0004.o sceImpose_driver_0005.o sceImpose_driver_0006.o sceImpose_driver_0007.o sceImpose_driver_0008.o sceImpose_driver_0009.o sceImpose_driver_0010.o sceImpose_driver_0011.o sceImpose_driver_0012.o sceImpose_driver_0013.o sceImpose_driver_0014.o sceImpose_driver_0015.o sceImpose_driver_0016.o sceImpose_driver_0017.o sceImpose_driver_0018.o sceImpose_driver_0019.o sceImpose_driver_0020.o sceImpose_driver_0021.o sceImpose_driver_0022.o sceImpose_driver_0023.o -INIT_OBJS = InitForKernel_0000.o InitForKernel_0001.o InitForKernel_0002.o InitForKernel_0003.o InitForKernel_0004.o InitForKernel_0005.o InitForKernel_0006.o InitForKernel_0007.o InitForKernel_0008.o InitForKernel_0009.o InitForKernel_0010.o InitForKernel_0011.o +INIT_OBJS = InitForKernel_0000.o InitForKernel_0001.o InitForKernel_0002.o InitForKernel_0003.o InitForKernel_0004.o InitForKernel_0005.o InitForKernel_0006.o InitForKernel_0007.o InitForKernel_0008.o InitForKernel_0009.o InitForKernel_0010.o InitForKernel_0011.o InitForKernel_0012.o AUDIOROUTING_OBJS = sceAudioRouting_driver_0000.o sceAudioRouting_driver_0001.o sceAudioRouting_driver_0002.o sceAudioRouting_driver_0003.o sceAudioRouting_driver_0004.o diff --git a/src/kernel/pspinit.h b/src/kernel/pspinit.h index d0715c6ebd..08cfb324b4 100644 --- a/src/kernel/pspinit.h +++ b/src/kernel/pspinit.h @@ -11,6 +11,10 @@ #ifndef __PSPINIT_H__ #define __PSPINIT_H__ +#include +#include +#include + enum PSPBootFrom { PSP_BOOT_FLASH = 0, /* ? */ @@ -39,7 +43,56 @@ enum PSPKeyConfig }; /** - * Gets the api type + * This structure represents an Init control block. It holds information about the + * currently booted module by Init. + */ +typedef struct SceInit { + /** The API type of the currently loaded module. One of ::SceInitApiType. */ + s32 apitype; //0 + /** The address of a memory protection block of type ::SCE_PROTECT_INFO_TYPE_FILE_NAME. */ + void *file_mod_addr; //4 + /** The address of a memory protection block of type ::SCE_PROTECT_INFO_TYPE_DISC_IMAGE. */ + void *disc_mod_addr; //8 + /** VSH parameters. Used to reboot the kernel. */ + SceKernelLoadExecVSHParam vsh_param; //12 + /** Unknown. */ + s32 unk60; + /** Unknown. */ + s32 unk64; + /** Unknown. */ + s32 unk68; + /** Unknown. */ + s32 unk72; + /** Unknown. */ + s32 unk76; + /** Unknown. */ + s32 unk80; + /** Unknown. */ + s32 unk84; + /** Unknown. */ + s32 unk88; + /** The application type of the currently loaded module. One of ::SceApplicationType. */ + u32 application_type; //92 + /** The number of power locks used by Init. */ + s32 num_power_locks; //96 + /** The address of a memory protection block of type ::SCE_PROTECT_INFO_TYPE_PARAM_SFO. */ + void *param_sfo_base; //100 + /** The size of of the memory block pointed to by ::paramSfoBase. */ + SceSize param_sfo_size; //104 + /** Unknown. */ + s32 lpt_summary; //108 + /** Pointer to boot callbacks of modules. */ + SceBootCallback *boot_callbacks1; //112 + /** The current boot callback 1 slot used to hold the registered boot callback. */ + SceBootCallback *cur_boot_callback1; //116 + /** Pointer to boot callbacks of modules. */ + SceBootCallback *boot_callbacks2; //120 + /** The current boot callback 2 slot used to hold the registered boot callback. */ + SceBootCallback *cur_boot_callback2; //124 +} SceInit; + +/** + * Gets the api type. * * @return the api type in which the system has booted */ @@ -63,11 +116,20 @@ int sceKernelBootFrom(); /** * Get the key configuration in which the system has booted. * - * @return the key configuration code, one of PSPKeyConfig values + * @return the key configuration code, one of `PSPKeyConfig` values */ -int InitForKernel_7233B5BC(); +int sceKernelApplicationType(); + +#define sceKernelInitKeyConfig sceKernelApplicationType + +/** + * Retrieve Init's internal control block. This control block manages execution details of an + * executable, like its API type, its boot medium and its application type. + * + * @return A pointer to Init's internal control block. + */ +SceInit *sceKernelQueryInitCB(void); -#define sceKernelInitKeyConfig InitForKernel_7233B5BC -#endif +#endif /* __PSPINIT_H__ */ diff --git a/src/user/pspkerneltypes.h b/src/user/pspkerneltypes.h index 16516ba04d..b86a74f7e0 100644 --- a/src/user/pspkerneltypes.h +++ b/src/user/pspkerneltypes.h @@ -35,4 +35,14 @@ typedef int SceMode; typedef SceInt64 SceOff; typedef SceInt64 SceIores; +/** + * This structure represents a boot callback belonging to a module. + */ +typedef struct SceBootCallback { + /** The boot callback function. */ + void *boot_callback_func; + /** Global pointer value of the module. */ + u32 gp; +} SceBootCallback; + #endif /* PSPKERNELTYPES_H */