Many platform checks are performed on the kernel side.
Also see Updater.
Module
This module exists only in the non-secure kernel. The SELF can be found in bootfs:update_mgr.skprx
.
Version |
World |
Privilege
|
1.69-3.60 |
Non-secure |
Kernel
|
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);
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);
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.
int sceSblUsGetUpdateModeForDriver(SceUpdateMode *mode);
sceSblUsSetUpdateModeForDriver
Version |
NID
|
0.931-0.990 |
0x266820E9
|
Set UpdateMode to Ernie NVS.
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
|
Example value 300 for unk_number.
int sceSblUsInformUpdateStartedForUser(SceUInt32 nTask, int unk_number, const char *message, SceSize messageLength);
sceSblUsInformUpdateOngoingForUser
Version |
NID
|
0.990 |
0x3A917CCE
|
int sceSblUsInformUpdateOngoingForUser(SceUInt32 nTask, SceUInt32 percentage);
sceSblUsInformUpdateFinishedForUser
Version |
NID
|
0.990 |
0x4734B987
|
int sceSblUsInformUpdateFinishedForUser(SceUInt32 nTask, const char *message, SceSize messageLength);
sceSblUsSetSwInfoIntForUser
Version |
NID
|
0.990 |
0xA870D285
|
Example value is SdkVersion: 0x3600011/ScVersion: int_value for name
int sceSblUsSetSwInfoIntForUser(const char *name, SceSize nameLength, SceUInt32 value);
sceSblUsSetSwInfoStrForUser
Version |
NID
|
0.990 |
0x8C7255C8
|
SysRevision: "sys-revision"
SysBuildNumber: "sys-build-number"
VshRepository: "vsh-repository-path"
VshRevision: "vsh-revision"
VshBuildNumber: "vsh-build-number"
int sceSblUsSetSwInfoStrForUser(const char *name, SceSize nameLength, const char *value, SceSize valueLength);
sceSblUsSetSwInfoBinForUser
Version |
NID
|
0.990 |
0xF157E34A
|
int sceSblUsSetSwInfoBinForUser(const char *name, SceSize nameLength, const void *value, SceSize valueLength);
SceSblSsUpdateMgr
sceSblUsGetUpdateModeForUser
Version |
NID
|
0.931-3.60 |
0x8E834565
|
Temp name was sceSblSsUpdateMgrGetBootMode.
Get UpdateMode from Ernie NVS.
int sceSblUsGetUpdateModeForUser(SceUpdateMode *mode);
sceSblUsSetUpdateModeForUser
Version |
NID
|
0.931-3.60 |
0xC725E3F0
|
Temp name was sceSblSsUpdateMgrSetBootMode.
Set UpdateMode to Ernie NVS.
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);
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, SceUInt64 segment_index);
sceSblUsVerifyPupSegmentByIdForUser
Version |
NID
|
0.931-3.60 |
0x95FC1A0A
|
path max len: 0x3FF bytes
int sceSblUsVerifyPupSegmentByIdForUser(const char *path, uint64_t seg_id);
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);
Version |
NID
|
0.931-3.60 |
0xC1792A1C
|
int sceSblUsExtractSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);
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);