Difference between revisions of "SceSblUpdateMgr"
(Redirected page to Updater#SceSblUpdateMgr) |
(Removed redirect to Updater#SceSblUpdateMgr) Tag: Removed redirect |
||
Line 1: | Line 1: | ||
− | # | + | also see [[Updater]]. |
+ | |||
+ | == Module == | ||
+ | This module exists only in the non-secure kernel. The SELF can be found in <code>bootfs:update_mgr.skprx</code>. | ||
+ | |||
+ | === Known NIDs === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! Name !! World !! Privilege !! NID | ||
+ | |- | ||
+ | | 1.69 || SceSblUpdateMgr || Non-secure || Kernel || 0xBA91FE90 | ||
+ | |- | ||
+ | | 3.60 || SceSblUpdateMgr || Non-secure || Kernel || 0x528F6BF5 | ||
+ | |} | ||
+ | |||
+ | == Libraries == | ||
+ | This module exports libraries to both kernel and user. | ||
+ | |||
+ | === Known NIDs === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version | ||
+ | ! Name | ||
+ | ! World | ||
+ | ! Visibility | ||
+ | ! NID | ||
+ | |- | ||
+ | | 0.931-1.69 || SceSblUpdateMgrForKernel || Non-secure || Kernel || 0xC4466E48 | ||
+ | |- | ||
+ | | 0.931-1.69 || SceSblUpdateMgrForDriver || Non-secure || Kernel || 0x0E04CD3D | ||
+ | |- | ||
+ | | 0.931-3.60 || SceSblSsUpdateMgr || Non-secure || User || 0x31406C49 | ||
+ | |- | ||
+ | | 0.990 || SceSblSsUpdateMgrAdditional || Non-secure || User || 0xBDD7A86F | ||
+ | |} | ||
+ | |||
+ | == Types == | ||
+ | |||
+ | <source lang="C"> | ||
+ | typedef char SceUpdateMode; | ||
+ | |||
+ | typedef struct SceSblUsSpkgInfo { // Size is 0x10 on FW 0.931-0.990 | ||
+ | SceSize size; // size of this structure | ||
+ | int version; | ||
+ | int reserved1; | ||
+ | int reserved2; | ||
+ | } SceSblUsSpkgInfo; | ||
+ | |||
+ | typedef struct SceKernelSpackageArgs { // Size is 0x2C on FW 0.931 | ||
+ | SceSize arg_size; // Size of this structure | ||
+ | SceUInt32 package_type; | ||
+ | void *addr; | ||
+ | SceSize size; | ||
+ | SceUInt32 flags; | ||
+ | char unk[0x8]; | ||
+ | SceUInt32 seq_no; | ||
+ | SceUInt32 result; | ||
+ | SceUInt32 progress; | ||
+ | SceUInt32 written_rates; | ||
+ | } SceKernelSpackageArgs; | ||
+ | </source> | ||
+ | |||
+ | == SceSblUpdateMgrForKernel == | ||
+ | |||
+ | SceSblUpdateMgrForKernel functions and NIDs are exactly identical to SceSblUpdateMgrForDriver. | ||
+ | |||
+ | == SceSblUpdateMgrForDriver == | ||
+ | |||
+ | === sceSblUsVerifyPupForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.940 || 0xD593D613 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupForDriver(const char *path);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupHeaderForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.940 || 0xBAFCA304 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupHeaderForDriver(const char *path);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupSegmentForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.940 || 0xF43372C4 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupSegmentForDriver(const char *path);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupSegmentByIdForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.940 || 0xB4AC7684 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupSegmentByIdForDriver(const char *path, void *arg2, int seg_id, int arg4);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupWatermarkForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.940 || 0xDD90C4B9 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupWatermarkForDriver(const char *path);</source> | ||
+ | |||
+ | === sceSblUsUpdateSpackageForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0xF41138F1 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsUpdateSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);</source> | ||
+ | |||
+ | === sceSblUsInspectSpackageForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0xE7F5A4C0 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInspectSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);</source> | ||
+ | |||
+ | === sceSblUsExtractSpackageForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x87AC6E73 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsExtractSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);</source> | ||
+ | |||
+ | === sceSblUsAllocateBufferForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x2D69BFDC | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsAllocateBufferForDriver(SceSize size, void **kaddr);</source> | ||
+ | |||
+ | === sceSblUsReleaseBufferForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x45B91736 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsReleaseBufferForDriver(void *kaddr);</source> | ||
+ | |||
+ | === sceSblUsGetStatusForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x99D57D18 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsGetStatusForDriver(int node_type, int requestId, uint32_t *seq_no, uint32_t *result, uint32_t *progress, uint32_t *written_rates);</source> | ||
+ | |||
+ | === sceSblUsGetSpkgInfoForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0xAE7D3BF5 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsGetSpkgInfoForDriver(int package_type, SceSblUsSpkgInfo *pInfo);</source> | ||
+ | |||
+ | === sceSblUsGetUpdateModeForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0xEEC71CCC | ||
+ | |} | ||
+ | |||
+ | Get UpdateMode from Ernie NVS. See [[SceSblSsMgr#NVS_Areas]]. | ||
+ | |||
+ | <source lang="C">int sceSblUsGetUpdateModeForDriver(SceUpdateMode *mode);</source> | ||
+ | |||
+ | === sceSblUsSetUpdateModeForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x266820E9 | ||
+ | |} | ||
+ | |||
+ | Set UpdateMode to Ernie NVS. See [[SceSblSsMgr#NVS_Areas]]. | ||
+ | |||
+ | <source lang="C">int sceSblUsSetUpdateModeForDriver(SceUpdateMode mode);</source> | ||
+ | |||
+ | === SceSblUpdateMgrForDriver_6ACEF44D === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x6ACEF44D | ||
+ | |} | ||
+ | |||
+ | Only return 0. | ||
+ | |||
+ | <source lang="C">int SceSblUpdateMgrForDriver_6ACEF44D(void);</source> | ||
+ | |||
+ | === sceSblUsPowerControlForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x64ECC81A | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsPowerControlForDriver(int mode, int flag);</source> | ||
+ | |||
+ | === sceSblUsGetApplicableVersionForDriver === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-0.990 || 0x7CC73839 | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | // type must be 1 or 9 else "builtin revoke list cannot be found" | ||
+ | int sceSblUsGetApplicableVersionForDriver(int type, void *versionBuf); | ||
+ | </source> | ||
+ | |||
+ | == SceSblSsUpdateMgrAdditional == | ||
+ | |||
+ | This library was not present on FW 0.931, and was removed before FW 3.60. Its functions were moved to SceSblSsUpdateMgr library. | ||
+ | |||
+ | === sceSblUsInformUpdateStartedForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || 0x1E40A14E | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInformUpdateStartedForUser(int number1, int number2, const char *str, SceSize len);</source> | ||
+ | |||
+ | === sceSblUsInformUpdateOngoingForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || 0x3A917CCE | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInformUpdateOngoingForUser(int number1, int number2);</source> | ||
+ | |||
+ | === sceSblUsInformUpdateFinishedForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || 0x4734B987 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInformUpdateFinishedForUser(int number, const char *str, SceSize len);</source> | ||
+ | |||
+ | === sceSblUsSetSwInfoIntForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || 0xA870D285 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsSetSwInfoIntForUser(char *str, SceSize len, SceUInt32 number);</source> | ||
+ | |||
+ | === sceSblUsSetSwInfoStrForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || 0x8C7255C8 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsSetSwInfoStrForUser(char *str1, SceSize len1, char *str2, SceSize len2);</source> | ||
+ | |||
+ | === sceSblUsSetSwInfoBinForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || 0xF157E34A | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsSetSwInfoBinForUser(char *str1, SceSize len1, char *str2, SceSize len2);</source> | ||
+ | |||
+ | == SceSblSsUpdateMgr == | ||
+ | |||
+ | === sceSblUsGetUpdateModeForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x8E834565 | ||
+ | |} | ||
+ | |||
+ | Temp name was sceSblSsUpdateMgrGetBootMode. | ||
+ | |||
+ | Get UpdateMode from Ernie NVS. See [[SceSblSsMgr#NVS_Areas]]. | ||
+ | |||
+ | <source lang="C">int sceSblUsGetUpdateModeForUser(SceUpdateMode *mode);</source> | ||
+ | |||
+ | === sceSblUsSetUpdateModeForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0xC725E3F0 | ||
+ | |} | ||
+ | |||
+ | Temp name was sceSblSsUpdateMgrSetBootMode. | ||
+ | |||
+ | Set UpdateMode to Ernie NVS. See [[SceSblSsMgr#NVS_Areas]]. | ||
+ | |||
+ | <source lang="C">int sceSblUsSetUpdateModeForUser(SceUpdateMode mode);</source> | ||
+ | |||
+ | === sceSblUsPowerControlForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x1825D954 | ||
+ | |} | ||
+ | |||
+ | Temp name was sceSblSsUpdateMgrSendCommand. | ||
+ | |||
+ | <source lang="C"> | ||
+ | // Modes: | ||
+ | // 0: reboot target and/or CP with or without CP update. flag = 2 -> reboot CP, flag = 5 -> reboot Ernie | ||
+ | // 1: shutdown target. flag 5 = shutdown Ernie | ||
+ | // 2: sceKernelPowerLock(0) | ||
+ | // 3: sceKernelPowerUnlock(0) | ||
+ | // 4: LED ON | ||
+ | // 5: LED OFF | ||
+ | // 6: LED INIT | ||
+ | // 7: ? | ||
+ | // 8: ? | ||
+ | |||
+ | int sceSblUsPowerControlForUser(int mode, int flag); | ||
+ | </source> | ||
+ | |||
+ | === sceSblUsGetSpkgInfoForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x8E3EC2E1 | ||
+ | |} | ||
+ | |||
+ | Temp name was sceSblSsUpdateMgrGetSpkgInfo. | ||
+ | |||
+ | <source lang="C">int sceSblUsGetSpkgInfoForUser(int package_type, SceSblUsSpkgInfo *pInfo);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x6F5EDBF4 | ||
+ | |} | ||
+ | |||
+ | path max len : 0x3FF bytes | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupForUser(const char *path);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupAdditionalSignForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || NOT PRESENT | ||
+ | |- | ||
+ | | 3.60 || 0xB19366CB | ||
+ | |} | ||
+ | |||
+ | path max len : 0x3FF, path len >= 0x400 : error | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupAdditionalSignForUser(const char *path);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupHeaderForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.940-3.60 || 0x9BE17A06 | ||
+ | |} | ||
+ | |||
+ | path max len : 0x3FF | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupHeaderForUser(const char *path);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupSegmentForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0xD47FD33E | ||
+ | |} | ||
+ | |||
+ | path max len: 0x3FF bytes | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupSegmentForUser(const char *path);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupSegmentByIdForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x95FC1A0A | ||
+ | |} | ||
+ | |||
+ | path max len: 0x3FF bytes | ||
+ | |||
+ | Maybe that seg_id is uint64_t and so it might be part of arg2 or arg4 | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupSegmentByIdForUser(const char *path, void *arg2, int seg_id, int arg4);</source> | ||
+ | |||
+ | === sceSblUsVerifyPupWatermarkForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0xC6CDEB8D | ||
+ | |} | ||
+ | |||
+ | path max len : 0x3FF bytes | ||
+ | |||
+ | <source lang="C">int sceSblUsVerifyPupWatermarkForUser(const char *path);</source> | ||
+ | |||
+ | === sceSblUsUpdateSpackageForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x6E8DDAC4 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsUpdateSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);</source> | ||
+ | |||
+ | === sceSblUsInspectSpackageForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x1A39F6EE | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInspectSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);</source> | ||
+ | |||
+ | === sceSblUsExtractSpackageForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0xC1792A1C | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsExtractSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);</source> | ||
+ | |||
+ | === sceSblUsGetExtractSpackageForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x4897AD56 | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | // node_type must be 0, 1 or 2 | ||
+ | |||
+ | int sceSblUsGetExtractSpackageForUser(int node_type, int requestId, SceKernelSpackageArgs *args); | ||
+ | </source> | ||
+ | |||
+ | === sceSblUsAllocateBufferForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x4C06F41C | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsAllocateBufferForUser(SceSize size, void **uaddr);</source> | ||
+ | |||
+ | === sceSblUsReleaseBufferForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0xBD677F5A | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsReleaseBufferForUser(void *uaddr);</source> | ||
+ | |||
+ | === sceSblUsGetStatusForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0xF403143E | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsGetStatusForUser(int node_type, int requestId, SceKernelSpackageArgs *args);</source> | ||
+ | |||
+ | === sceSblUsCheckSystemIntegrityForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0xBED8DFC7 | ||
+ | |} | ||
+ | |||
+ | Not implemented: does nothing. | ||
+ | |||
+ | <source lang="C"> | ||
+ | int sceSblUsCheckSystemIntegrityForUser(void) { | ||
+ | int state; | ||
+ | |||
+ | if (sceSblACIsSystemProgramForKernel(0) == 0) | ||
+ | return 0x800F022C; | ||
+ | |||
+ | ENTER_SYSCALL(state); | ||
+ | EXIT_SYSCALL(state); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <source lang="C">int sceSblUsCheckSystemIntegrityForUser(void);</source> | ||
+ | |||
+ | === sceSblUsGetApplicableVersionForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.931-3.60 || 0x3ADD4B7A | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | // type must be 1 or 9 else "builtin revoke list cannot be found" | ||
+ | int sceSblUsGetApplicableVersionForUser(int type, void *versionBuf); | ||
+ | </source> | ||
+ | |||
+ | === sceSblUsInformUpdateStartedForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || NOT PRESENT | ||
+ | |- | ||
+ | | 3.60 || 0x9FC8E905 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInformUpdateStartedForUser(int number1, int number2, const char *str, SceSize len);</source> | ||
+ | |||
+ | === sceSblUsInformUpdateOngoingForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || NOT PRESENT | ||
+ | |- | ||
+ | | 3.60 || 0xD0CB50AC | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInformUpdateOngoingForUser(int number1, int number2);</source> | ||
+ | |||
+ | === sceSblUsInformUpdateFinishedForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || NOT PRESENT | ||
+ | |- | ||
+ | | 3.60 || 0x2A02DCFB | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsInformUpdateFinishedForUser(int number, const char *str, SceSize len);</source> | ||
+ | |||
+ | === sceSblUsSetSwInfoIntForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || NOT PRESENT | ||
+ | |- | ||
+ | | 3.60 || 0x157AD4AD | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsSetSwInfoIntForUser(char *str, SceSize len, SceUInt32 number);</source> | ||
+ | |||
+ | === sceSblUsSetSwInfoStrForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || NOT PRESENT | ||
+ | |- | ||
+ | | 3.60 || 0xFE930747 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsSetSwInfoStrForUser(char *str1, SceSize len1, char *str2, SceSize len2);</source> | ||
+ | |||
+ | === sceSblUsSetSwInfoBinForUser === | ||
+ | {| class="wikitable" | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 0.990 || NOT PRESENT | ||
+ | |- | ||
+ | | 3.60 || 0x92A8002B | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int sceSblUsSetSwInfoBinForUser(char *str1, SceSize len1, char *str2, SceSize len2);</source> |
Revision as of 03:07, 30 September 2020
also see Updater.
Module
This module exists only in the non-secure kernel. The SELF can be found in bootfs:update_mgr.skprx
.
Known NIDs
Version | Name | World | Privilege | NID |
---|---|---|---|---|
1.69 | SceSblUpdateMgr | Non-secure | Kernel | 0xBA91FE90 |
3.60 | SceSblUpdateMgr | Non-secure | Kernel | 0x528F6BF5 |
Libraries
This module exports libraries to both kernel and user.
Known NIDs
Version | Name | World | Visibility | NID |
---|---|---|---|---|
0.931-1.69 | SceSblUpdateMgrForKernel | Non-secure | Kernel | 0xC4466E48 |
0.931-1.69 | SceSblUpdateMgrForDriver | Non-secure | Kernel | 0x0E04CD3D |
0.931-3.60 | SceSblSsUpdateMgr | Non-secure | User | 0x31406C49 |
0.990 | SceSblSsUpdateMgrAdditional | Non-secure | User | 0xBDD7A86F |
Types
typedef char SceUpdateMode;
typedef struct SceSblUsSpkgInfo { // Size is 0x10 on FW 0.931-0.990
SceSize size; // size of this structure
int version;
int reserved1;
int reserved2;
} SceSblUsSpkgInfo;
typedef struct SceKernelSpackageArgs { // Size is 0x2C on FW 0.931
SceSize arg_size; // Size of this structure
SceUInt32 package_type;
void *addr;
SceSize size;
SceUInt32 flags;
char unk[0x8];
SceUInt32 seq_no;
SceUInt32 result;
SceUInt32 progress;
SceUInt32 written_rates;
} SceKernelSpackageArgs;
SceSblUpdateMgrForKernel
SceSblUpdateMgrForKernel functions and NIDs are exactly identical to SceSblUpdateMgrForDriver.
SceSblUpdateMgrForDriver
sceSblUsVerifyPupForDriver
Version | NID |
---|---|
0.931-0.940 | 0xD593D613 |
int sceSblUsVerifyPupForDriver(const char *path);
sceSblUsVerifyPupHeaderForDriver
Version | NID |
---|---|
0.931-0.940 | 0xBAFCA304 |
int sceSblUsVerifyPupHeaderForDriver(const char *path);
sceSblUsVerifyPupSegmentForDriver
Version | NID |
---|---|
0.931-0.940 | 0xF43372C4 |
int sceSblUsVerifyPupSegmentForDriver(const char *path);
sceSblUsVerifyPupSegmentByIdForDriver
Version | NID |
---|---|
0.931-0.940 | 0xB4AC7684 |
int sceSblUsVerifyPupSegmentByIdForDriver(const char *path, void *arg2, int seg_id, int arg4);
sceSblUsVerifyPupWatermarkForDriver
Version | NID |
---|---|
0.931-0.940 | 0xDD90C4B9 |
int sceSblUsVerifyPupWatermarkForDriver(const char *path);
sceSblUsUpdateSpackageForDriver
Version | NID |
---|---|
0.931-0.990 | 0xF41138F1 |
int sceSblUsUpdateSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);
sceSblUsInspectSpackageForDriver
Version | NID |
---|---|
0.931-0.990 | 0xE7F5A4C0 |
int sceSblUsInspectSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);
sceSblUsExtractSpackageForDriver
Version | NID |
---|---|
0.931-0.990 | 0x87AC6E73 |
int sceSblUsExtractSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);
sceSblUsAllocateBufferForDriver
Version | NID |
---|---|
0.931-0.990 | 0x2D69BFDC |
int sceSblUsAllocateBufferForDriver(SceSize size, void **kaddr);
sceSblUsReleaseBufferForDriver
Version | NID |
---|---|
0.931-0.990 | 0x45B91736 |
int sceSblUsReleaseBufferForDriver(void *kaddr);
sceSblUsGetStatusForDriver
Version | NID |
---|---|
0.931-0.990 | 0x99D57D18 |
int sceSblUsGetStatusForDriver(int node_type, int requestId, uint32_t *seq_no, uint32_t *result, uint32_t *progress, uint32_t *written_rates);
sceSblUsGetSpkgInfoForDriver
Version | NID |
---|---|
0.931-0.990 | 0xAE7D3BF5 |
int sceSblUsGetSpkgInfoForDriver(int package_type, SceSblUsSpkgInfo *pInfo);
sceSblUsGetUpdateModeForDriver
Version | NID |
---|---|
0.931-0.990 | 0xEEC71CCC |
Get UpdateMode from Ernie NVS. See SceSblSsMgr#NVS_Areas.
int sceSblUsGetUpdateModeForDriver(SceUpdateMode *mode);
sceSblUsSetUpdateModeForDriver
Version | NID |
---|---|
0.931-0.990 | 0x266820E9 |
Set UpdateMode to Ernie NVS. See SceSblSsMgr#NVS_Areas.
int sceSblUsSetUpdateModeForDriver(SceUpdateMode mode);
SceSblUpdateMgrForDriver_6ACEF44D
Version | NID |
---|---|
0.931-0.990 | 0x6ACEF44D |
Only return 0.
int SceSblUpdateMgrForDriver_6ACEF44D(void);
sceSblUsPowerControlForDriver
Version | NID |
---|---|
0.931-0.990 | 0x64ECC81A |
int sceSblUsPowerControlForDriver(int mode, int flag);
sceSblUsGetApplicableVersionForDriver
Version | NID |
---|---|
0.931-0.990 | 0x7CC73839 |
// type must be 1 or 9 else "builtin revoke list cannot be found"
int sceSblUsGetApplicableVersionForDriver(int type, void *versionBuf);
SceSblSsUpdateMgrAdditional
This library was not present on FW 0.931, and was removed before FW 3.60. Its functions were moved to SceSblSsUpdateMgr library.
sceSblUsInformUpdateStartedForUser
Version | NID |
---|---|
0.990 | 0x1E40A14E |
int sceSblUsInformUpdateStartedForUser(int number1, int number2, const char *str, SceSize len);
sceSblUsInformUpdateOngoingForUser
Version | NID |
---|---|
0.990 | 0x3A917CCE |
int sceSblUsInformUpdateOngoingForUser(int number1, int number2);
sceSblUsInformUpdateFinishedForUser
Version | NID |
---|---|
0.990 | 0x4734B987 |
int sceSblUsInformUpdateFinishedForUser(int number, const char *str, SceSize len);
sceSblUsSetSwInfoIntForUser
Version | NID |
---|---|
0.990 | 0xA870D285 |
int sceSblUsSetSwInfoIntForUser(char *str, SceSize len, SceUInt32 number);
sceSblUsSetSwInfoStrForUser
Version | NID |
---|---|
0.990 | 0x8C7255C8 |
int sceSblUsSetSwInfoStrForUser(char *str1, SceSize len1, char *str2, SceSize len2);
sceSblUsSetSwInfoBinForUser
Version | NID |
---|---|
0.990 | 0xF157E34A |
int sceSblUsSetSwInfoBinForUser(char *str1, SceSize len1, char *str2, SceSize len2);
SceSblSsUpdateMgr
sceSblUsGetUpdateModeForUser
Version | NID |
---|---|
0.931-3.60 | 0x8E834565 |
Temp name was sceSblSsUpdateMgrGetBootMode.
Get UpdateMode from Ernie NVS. See SceSblSsMgr#NVS_Areas.
int sceSblUsGetUpdateModeForUser(SceUpdateMode *mode);
sceSblUsSetUpdateModeForUser
Version | NID |
---|---|
0.931-3.60 | 0xC725E3F0 |
Temp name was sceSblSsUpdateMgrSetBootMode.
Set UpdateMode to Ernie NVS. See SceSblSsMgr#NVS_Areas.
int sceSblUsSetUpdateModeForUser(SceUpdateMode mode);
sceSblUsPowerControlForUser
Version | NID |
---|---|
0.931-3.60 | 0x1825D954 |
Temp name was sceSblSsUpdateMgrSendCommand.
// Modes:
// 0: reboot target and/or CP with or without CP update. flag = 2 -> reboot CP, flag = 5 -> reboot Ernie
// 1: shutdown target. flag 5 = shutdown Ernie
// 2: sceKernelPowerLock(0)
// 3: sceKernelPowerUnlock(0)
// 4: LED ON
// 5: LED OFF
// 6: LED INIT
// 7: ?
// 8: ?
int sceSblUsPowerControlForUser(int mode, int flag);
sceSblUsGetSpkgInfoForUser
Version | NID |
---|---|
0.931-3.60 | 0x8E3EC2E1 |
Temp name was sceSblSsUpdateMgrGetSpkgInfo.
int sceSblUsGetSpkgInfoForUser(int package_type, SceSblUsSpkgInfo *pInfo);
sceSblUsVerifyPupForUser
Version | NID |
---|---|
0.931-3.60 | 0x6F5EDBF4 |
path max len : 0x3FF bytes
int sceSblUsVerifyPupForUser(const char *path);
sceSblUsVerifyPupAdditionalSignForUser
Version | NID |
---|---|
0.990 | NOT PRESENT |
3.60 | 0xB19366CB |
path max len : 0x3FF, path len >= 0x400 : error
int sceSblUsVerifyPupAdditionalSignForUser(const char *path);
sceSblUsVerifyPupHeaderForUser
Version | NID |
---|---|
0.940-3.60 | 0x9BE17A06 |
path max len : 0x3FF
int sceSblUsVerifyPupHeaderForUser(const char *path);
sceSblUsVerifyPupSegmentForUser
Version | NID |
---|---|
0.931-3.60 | 0xD47FD33E |
path max len: 0x3FF bytes
int sceSblUsVerifyPupSegmentForUser(const char *path);
sceSblUsVerifyPupSegmentByIdForUser
Version | NID |
---|---|
0.931-3.60 | 0x95FC1A0A |
path max len: 0x3FF bytes
Maybe that seg_id is uint64_t and so it might be part of arg2 or arg4
int sceSblUsVerifyPupSegmentByIdForUser(const char *path, void *arg2, int seg_id, int arg4);
sceSblUsVerifyPupWatermarkForUser
Version | NID |
---|---|
0.931-3.60 | 0xC6CDEB8D |
path max len : 0x3FF bytes
int sceSblUsVerifyPupWatermarkForUser(const char *path);
sceSblUsUpdateSpackageForUser
Version | NID |
---|---|
0.931-3.60 | 0x6E8DDAC4 |
int sceSblUsUpdateSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);
sceSblUsInspectSpackageForUser
Version | NID |
---|---|
0.931-3.60 | 0x1A39F6EE |
int sceSblUsInspectSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);
sceSblUsExtractSpackageForUser
Version | NID |
---|---|
0.931-3.60 | 0xC1792A1C |
int sceSblUsExtractSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);
sceSblUsGetExtractSpackageForUser
Version | NID |
---|---|
0.931-3.60 | 0x4897AD56 |
// node_type must be 0, 1 or 2
int sceSblUsGetExtractSpackageForUser(int node_type, int requestId, SceKernelSpackageArgs *args);
sceSblUsAllocateBufferForUser
Version | NID |
---|---|
0.931-3.60 | 0x4C06F41C |
int sceSblUsAllocateBufferForUser(SceSize size, void **uaddr);
sceSblUsReleaseBufferForUser
Version | NID |
---|---|
0.931-3.60 | 0xBD677F5A |
int sceSblUsReleaseBufferForUser(void *uaddr);
sceSblUsGetStatusForUser
Version | NID |
---|---|
0.931-3.60 | 0xF403143E |
int sceSblUsGetStatusForUser(int node_type, int requestId, SceKernelSpackageArgs *args);
sceSblUsCheckSystemIntegrityForUser
Version | NID |
---|---|
0.931-3.60 | 0xBED8DFC7 |
Not implemented: does nothing.
int sceSblUsCheckSystemIntegrityForUser(void) {
int state;
if (sceSblACIsSystemProgramForKernel(0) == 0)
return 0x800F022C;
ENTER_SYSCALL(state);
EXIT_SYSCALL(state);
return 0;
}
int sceSblUsCheckSystemIntegrityForUser(void);
sceSblUsGetApplicableVersionForUser
Version | NID |
---|---|
0.931-3.60 | 0x3ADD4B7A |
// type must be 1 or 9 else "builtin revoke list cannot be found"
int sceSblUsGetApplicableVersionForUser(int type, void *versionBuf);
sceSblUsInformUpdateStartedForUser
Version | NID |
---|---|
0.990 | NOT PRESENT |
3.60 | 0x9FC8E905 |
int sceSblUsInformUpdateStartedForUser(int number1, int number2, const char *str, SceSize len);
sceSblUsInformUpdateOngoingForUser
Version | NID |
---|---|
0.990 | NOT PRESENT |
3.60 | 0xD0CB50AC |
int sceSblUsInformUpdateOngoingForUser(int number1, int number2);
sceSblUsInformUpdateFinishedForUser
Version | NID |
---|---|
0.990 | NOT PRESENT |
3.60 | 0x2A02DCFB |
int sceSblUsInformUpdateFinishedForUser(int number, const char *str, SceSize len);
sceSblUsSetSwInfoIntForUser
Version | NID |
---|---|
0.990 | NOT PRESENT |
3.60 | 0x157AD4AD |
int sceSblUsSetSwInfoIntForUser(char *str, SceSize len, SceUInt32 number);
sceSblUsSetSwInfoStrForUser
Version | NID |
---|---|
0.990 | NOT PRESENT |
3.60 | 0xFE930747 |
int sceSblUsSetSwInfoStrForUser(char *str1, SceSize len1, char *str2, SceSize len2);
sceSblUsSetSwInfoBinForUser
Version | NID |
---|---|
0.990 | NOT PRESENT |
3.60 | 0x92A8002B |
int sceSblUsSetSwInfoBinForUser(char *str1, SceSize len1, char *str2, SceSize len2);