Difference between revisions of "SceSblUpdateMgr"

From Vita Development Wiki
Jump to navigation Jump to search
(Redirected page to Updater#SceSblUpdateMgr)
 
m (→‎Types: Fix fields of SceSblUsSpkgInfo)
 
(23 intermediate revisions by 2 users not shown)
Line 1: Line 1:
#REDIRECT [[Updater#SceSblUpdateMgr]]
+
See also [[Updater]]. This module performs many platform checks.
 +
 
 +
== Module ==
 +
 
 +
This module exists only in the non-secure kernel. The SELF can be found in <code>bootfs:update_mgr.skprx</code>.
 +
 
 +
{| class="wikitable"
 +
! Version !! World !! Privilege
 +
|-
 +
| 0.931-3.740.011 || Non-secure || Kernel
 +
|}
 +
 
 +
== Libraries ==
 +
 
 +
=== Known NIDs ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! Name !! World !! Visibility !! NID
 +
|-
 +
| 0.931-1.692.000 || SceSblUpdateMgrForKernel || Non-secure || Kernel || 0xC4466E48
 +
|-
 +
| 0.931-1.692.000 || SceSblUpdateMgrForDriver || Non-secure || Kernel || 0x0E04CD3D
 +
|-
 +
| 0.931-3.740.011 || SceSblSsUpdateMgr || Non-secure || User || 0x31406C49
 +
|-
 +
| 0.990-1.692.000 || 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
 +
uint32_t version;
 +
uint8_t status[4];
 +
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-1.692.000 || 0xD593D613
 +
|}
 +
 
 +
<source lang="C">int sceSblUsVerifyPupForDriver(const char *path);</source>
 +
 
 +
=== sceSblUsVerifyPupHeaderForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0xBAFCA304
 +
|}
 +
 
 +
<source lang="C">int sceSblUsVerifyPupHeaderForDriver(const char *path);</source>
 +
 
 +
=== sceSblUsVerifyPupSegmentForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0xF43372C4
 +
|}
 +
 
 +
<source lang="C">int sceSblUsVerifyPupSegmentForDriver(const char *path);</source>
 +
 
 +
=== sceSblUsVerifyPupSegmentByIdForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0xB4AC7684
 +
|}
 +
 
 +
<source lang="C">int sceSblUsVerifyPupSegmentByIdForDriver(const char *path, void *arg2, int seg_id, int arg4);</source>
 +
 
 +
=== sceSblUsVerifyPupWatermarkForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0xDD90C4B9
 +
|}
 +
 
 +
<source lang="C">int sceSblUsVerifyPupWatermarkForDriver(const char *path);</source>
 +
 
 +
=== sceSblUsUpdateSpackageForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 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-1.692.000 || 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-1.692.000 || 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-1.692.000 || 0x2D69BFDC
 +
|}
 +
 
 +
<source lang="C">int sceSblUsAllocateBufferForDriver(SceSize size, void **kaddr);</source>
 +
 
 +
=== sceSblUsReleaseBufferForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0x45B91736
 +
|}
 +
 
 +
<source lang="C">int sceSblUsReleaseBufferForDriver(void *kaddr);</source>
 +
 
 +
=== sceSblUsGetStatusForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 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-1.692.000 || 0xAE7D3BF5
 +
|}
 +
 
 +
<source lang="C">int sceSblUsGetSpkgInfoForDriver(int package_type, SceSblUsSpkgInfo *pInfo);</source>
 +
 
 +
=== sceSblUsGetUpdateModeForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0xEEC71CCC
 +
|}
 +
 
 +
Get UpdateMode from [[Ernie#NVS|Ernie NVS]].
 +
 
 +
<source lang="C">int sceSblUsGetUpdateModeForDriver(SceUpdateMode *mode);</source>
 +
 
 +
=== sceSblUsSetUpdateModeForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0x266820E9
 +
|}
 +
 
 +
Set UpdateMode to [[Ernie#NVS|Ernie NVS]].
 +
 
 +
<source lang="C">int sceSblUsSetUpdateModeForDriver(SceUpdateMode mode);</source>
 +
 
 +
=== SceSblUpdateMgrForDriver_6ACEF44D ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0x6ACEF44D
 +
|}
 +
 
 +
Only returns 0.
 +
 
 +
<source lang="C">int SceSblUpdateMgrForDriver_6ACEF44D(void);</source>
 +
 
 +
=== sceSblUsPowerControlForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0x64ECC81A
 +
|}
 +
 
 +
<source lang="C">int sceSblUsPowerControlForDriver(int mode, int flag);</source>
 +
 
 +
=== sceSblUsGetApplicableVersionForDriver ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-1.692.000 || 0x7CC73839
 +
|}
 +
 
 +
<source lang="C">
 +
// type must be 1 or 9 else "builtin revoke list cannot be found"
 +
int sceSblUsGetApplicableVersionForDriver(int type, void *versionBuf);
 +
</source>
 +
 
 +
=== SceSblUpdateMgrForDriver_C8D235C4 ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.996.090-1.692.000 || 0xC8D235C4
 +
|}
 +
 
 +
== SceSblSsUpdateMgrAdditional ==
 +
 
 +
This library was not present on FW 0.931, and was removed since FW 1.80. Its functions were moved to SceSblSsUpdateMgr library.
 +
 
 +
=== sceSblUsInformUpdateStartedForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990-1.692.000 || 0x1E40A14E
 +
|}
 +
 
 +
Example of value for unk_number: 300.
 +
 
 +
<source lang="C">int sceSblUsInformUpdateStartedForUser(SceUInt32 nTask, int unk_number, const char *message, SceSize messageLength);</source>
 +
 
 +
=== sceSblUsInformUpdateOngoingForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990-1.692.000 || 0x3A917CCE
 +
|}
 +
 
 +
<source lang="C">int sceSblUsInformUpdateOngoingForUser(SceUInt32 nTask, SceUInt32 percentage);</source>
 +
 
 +
=== sceSblUsInformUpdateFinishedForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990-1.692.000 || 0x4734B987
 +
|}
 +
 
 +
<source lang="C">int sceSblUsInformUpdateFinishedForUser(SceUInt32 nTask, const char *message, SceSize messageLength);</source>
 +
 
 +
=== sceSblUsSetSwInfoIntForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990-1.692.000 || 0xA870D285
 +
|}
 +
 
 +
Example of (name, value) couples:
 +
<pre>
 +
("SdkVersion", 0x1692000)
 +
("ScVersion", ?).
 +
</pre>
 +
 
 +
<source lang="C">int sceSblUsSetSwInfoIntForUser(const char *name, SceSize nameLength, SceUInt32 value);</source>
 +
 
 +
=== sceSblUsSetSwInfoStrForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990-1.692.000 || 0x8C7255C8
 +
|}
 +
 
 +
Example of (name, value) couples:
 +
<pre>
 +
SysRevision: "sys-revision"
 +
SysBuildNumber: "sys-build-number"
 +
VshRepository: "vsh-repository-path"
 +
VshRevision: "vsh-revision"
 +
VshBuildNumber: "vsh-build-number"
 +
</pre>
 +
 
 +
<source lang="C">int sceSblUsSetSwInfoStrForUser(const char *name, SceSize nameLength, const char *value, SceSize valueLength);</source>
 +
 
 +
=== sceSblUsSetSwInfoBinForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990-1.692.000 || 0xF157E34A
 +
|}
 +
 
 +
<source lang="C">int sceSblUsSetSwInfoBinForUser(const char *name, SceSize nameLength, const void *value, SceSize valueLength);</source>
 +
 
 +
== SceSblSsUpdateMgr ==
 +
 
 +
=== sceSblUsGetUpdateModeForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0x8E834565
 +
|}
 +
 
 +
Temp name was sceSblSsUpdateMgrGetBootMode.
 +
 
 +
Get UpdateMode from [[Ernie#NVS|Ernie NVS]].
 +
 
 +
<source lang="C">int sceSblUsGetUpdateModeForUser(SceUpdateMode *mode);</source>
 +
 
 +
=== sceSblUsSetUpdateModeForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0xC725E3F0
 +
|}
 +
 
 +
Temp name was sceSblSsUpdateMgrSetBootMode.
 +
 
 +
Set UpdateMode to [[Ernie#NVS|Ernie NVS]].
 +
 
 +
<source lang="C">int sceSblUsSetUpdateModeForUser(SceUpdateMode mode);</source>
 +
 
 +
=== sceSblUsPowerControlForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 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: sceKernelPowerTick(flag)
 +
// 8: Checks if CP is enabled by DIP switch 194.
 +
 
 +
int sceSblUsPowerControlForUser(int mode, int flag);
 +
</source>
 +
 
 +
=== sceSblUsGetSpkgInfoForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0x8E3EC2E1
 +
|}
 +
 
 +
Temp name was sceSblSsUpdateMgrGetSpkgInfo.
 +
 
 +
<source lang="C">int sceSblUsGetSpkgInfoForUser(int package_type, SceSblUsSpkgInfo *pInfo);</source>
 +
 
 +
=== sceSblUsVerifyPupForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 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-3.740.011 || 0xB19366CB
 +
|}
 +
 
 +
path max len: 0x3FF bytes
 +
 
 +
<source lang="C">int sceSblUsVerifyPupAdditionalSignForUser(const char *path);</source>
 +
 
 +
=== sceSblUsVerifyPupHeaderForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.940-3.740.011 || 0x9BE17A06
 +
|}
 +
 
 +
path max len: 0x3FF bytes
 +
 
 +
<source lang="C">int sceSblUsVerifyPupHeaderForUser(const char *path);</source>
 +
 
 +
=== sceSblUsVerifyPupSegmentForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0xD47FD33E
 +
|}
 +
 
 +
path max len: 0x3FF bytes
 +
 
 +
<source lang="C">int sceSblUsVerifyPupSegmentForUser(const char *path, SceUInt64 segment_index);</source>
 +
 
 +
=== sceSblUsVerifyPupSegmentByIdForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0x95FC1A0A
 +
|}
 +
 
 +
path max len: 0x3FF bytes
 +
 
 +
<source lang="C">int sceSblUsVerifyPupSegmentByIdForUser(const char *path, uint64_t seg_id);</source>
 +
 
 +
=== sceSblUsVerifyPupWatermarkForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0xC6CDEB8D
 +
|}
 +
 
 +
path max len: 0x3FF bytes
 +
 
 +
<source lang="C">int sceSblUsVerifyPupWatermarkForUser(const char *path);</source>
 +
 
 +
=== sceSblUsUpdateSpackageForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0x6E8DDAC4
 +
|}
 +
 
 +
<source lang="C">int sceSblUsUpdateSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);</source>
 +
 
 +
=== sceSblUsInspectSpackageForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0x1A39F6EE
 +
|}
 +
 
 +
<source lang="C">int sceSblUsInspectSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);</source>
 +
 
 +
=== sceSblUsExtractSpackageForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0xC1792A1C
 +
|}
 +
 
 +
<source lang="C">int sceSblUsExtractSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);</source>
 +
 
 +
=== sceSblUsGetExtractSpackageForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 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.740.011 || 0x4C06F41C
 +
|}
 +
 
 +
<source lang="C">int sceSblUsAllocateBufferForUser(SceSize size, void **uaddr);</source>
 +
 
 +
=== sceSblUsReleaseBufferForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0xBD677F5A
 +
|}
 +
 
 +
<source lang="C">int sceSblUsReleaseBufferForUser(void *uaddr);</source>
 +
 
 +
=== sceSblUsGetStatusForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0xF403143E
 +
|}
 +
 
 +
<source lang="C">int sceSblUsGetStatusForUser(int node_type, int requestId, SceKernelSpackageArgs *args);</source>
 +
 
 +
=== sceSblUsCheckSystemIntegrityForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0xBED8DFC7
 +
|}
 +
 
 +
Check if the current process is system privileged.
 +
 
 +
<source lang="C">SceInt32 sceSblUsCheckSystemIntegrityForUser(void);</source>
 +
 
 +
=== sceSblUsGetApplicableVersionForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.740.011 || 0x3ADD4B7A
 +
|}
 +
 
 +
<source lang="C">
 +
// type must be 1 or 9 else returns error "builtin revoke list cannot be found"
 +
int sceSblUsGetApplicableVersionForUser(int type, void *versionBuf);
 +
</source>
 +
 
 +
=== sceSblUsInformUpdateStartedForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990 || not present
 +
|-
 +
| 1.000.071-3.740.011 || 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
 +
|-
 +
| 1.000.071-3.740.011 || 0xD0CB50AC
 +
|}
 +
 
 +
<source lang="C">int sceSblUsInformUpdateOngoingForUser(int number1, int number2);</source>
 +
 
 +
=== sceSblUsInformUpdateFinishedForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990 || not present
 +
|-
 +
| 1.000.071-3.740.011 || 0x2A02DCFB
 +
|}
 +
 
 +
<source lang="C">int sceSblUsInformUpdateFinishedForUser(int number, const char *str, SceSize len);</source>
 +
 
 +
=== sceSblUsSetSwInfoIntForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990 || not present
 +
|-
 +
| 1.000.071-3.740.011 || 0x157AD4AD
 +
|}
 +
 
 +
<source lang="C">int sceSblUsSetSwInfoIntForUser(char *str, SceSize len, SceUInt32 number);</source>
 +
 
 +
=== sceSblUsSetSwInfoStrForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990 || not present
 +
|-
 +
| 1.000.071-3.740.011 || 0xFE930747
 +
|}
 +
 
 +
<source lang="C">int sceSblUsSetSwInfoStrForUser(char *str1, SceSize len1, char *str2, SceSize len2);</source>
 +
 
 +
=== sceSblUsSetSwInfoBinForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.990 || not present
 +
|-
 +
| 1.000.071-3.740.011 || 0x92A8002B
 +
|}
 +
 
 +
<source lang="C">int sceSblUsSetSwInfoBinForUser(char *str1, SceSize len1, char *str2, SceSize len2);</source>
 +
 
 +
[[Category:ARM]]
 +
[[Category:Kernel]]
 +
[[Category:Modules]]
 +
[[Category:Library]]

Latest revision as of 20:50, 27 December 2023

See also Updater. This module performs many platform checks.

Module

This module exists only in the non-secure kernel. The SELF can be found in bootfs:update_mgr.skprx.

Version World Privilege
0.931-3.740.011 Non-secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
0.931-1.692.000 SceSblUpdateMgrForKernel Non-secure Kernel 0xC4466E48
0.931-1.692.000 SceSblUpdateMgrForDriver Non-secure Kernel 0x0E04CD3D
0.931-3.740.011 SceSblSsUpdateMgr Non-secure User 0x31406C49
0.990-1.692.000 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
	uint32_t version;
	uint8_t status[4];
	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-1.692.000 0xD593D613
int sceSblUsVerifyPupForDriver(const char *path);

sceSblUsVerifyPupHeaderForDriver

Version NID
0.931-1.692.000 0xBAFCA304
int sceSblUsVerifyPupHeaderForDriver(const char *path);

sceSblUsVerifyPupSegmentForDriver

Version NID
0.931-1.692.000 0xF43372C4
int sceSblUsVerifyPupSegmentForDriver(const char *path);

sceSblUsVerifyPupSegmentByIdForDriver

Version NID
0.931-1.692.000 0xB4AC7684
int sceSblUsVerifyPupSegmentByIdForDriver(const char *path, void *arg2, int seg_id, int arg4);

sceSblUsVerifyPupWatermarkForDriver

Version NID
0.931-1.692.000 0xDD90C4B9
int sceSblUsVerifyPupWatermarkForDriver(const char *path);

sceSblUsUpdateSpackageForDriver

Version NID
0.931-1.692.000 0xF41138F1
int sceSblUsUpdateSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);

sceSblUsInspectSpackageForDriver

Version NID
0.931-1.692.000 0xE7F5A4C0
int sceSblUsInspectSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);

sceSblUsExtractSpackageForDriver

Version NID
0.931-1.692.000 0x87AC6E73
int sceSblUsExtractSpackageForDriver(int package_type, void *kaddr, SceSize size, uint32_t flags, int *pRequestId);

sceSblUsAllocateBufferForDriver

Version NID
0.931-1.692.000 0x2D69BFDC
int sceSblUsAllocateBufferForDriver(SceSize size, void **kaddr);

sceSblUsReleaseBufferForDriver

Version NID
0.931-1.692.000 0x45B91736
int sceSblUsReleaseBufferForDriver(void *kaddr);

sceSblUsGetStatusForDriver

Version NID
0.931-1.692.000 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-1.692.000 0xAE7D3BF5
int sceSblUsGetSpkgInfoForDriver(int package_type, SceSblUsSpkgInfo *pInfo);

sceSblUsGetUpdateModeForDriver

Version NID
0.931-1.692.000 0xEEC71CCC

Get UpdateMode from Ernie NVS.

int sceSblUsGetUpdateModeForDriver(SceUpdateMode *mode);

sceSblUsSetUpdateModeForDriver

Version NID
0.931-1.692.000 0x266820E9

Set UpdateMode to Ernie NVS.

int sceSblUsSetUpdateModeForDriver(SceUpdateMode mode);

SceSblUpdateMgrForDriver_6ACEF44D

Version NID
0.931-1.692.000 0x6ACEF44D

Only returns 0.

int SceSblUpdateMgrForDriver_6ACEF44D(void);

sceSblUsPowerControlForDriver

Version NID
0.931-1.692.000 0x64ECC81A
int sceSblUsPowerControlForDriver(int mode, int flag);

sceSblUsGetApplicableVersionForDriver

Version NID
0.931-1.692.000 0x7CC73839
// type must be 1 or 9 else "builtin revoke list cannot be found"
int sceSblUsGetApplicableVersionForDriver(int type, void *versionBuf);

SceSblUpdateMgrForDriver_C8D235C4

Version NID
0.996.090-1.692.000 0xC8D235C4

SceSblSsUpdateMgrAdditional

This library was not present on FW 0.931, and was removed since FW 1.80. Its functions were moved to SceSblSsUpdateMgr library.

sceSblUsInformUpdateStartedForUser

Version NID
0.990-1.692.000 0x1E40A14E

Example of value for unk_number: 300.

int sceSblUsInformUpdateStartedForUser(SceUInt32 nTask, int unk_number, const char *message, SceSize messageLength);

sceSblUsInformUpdateOngoingForUser

Version NID
0.990-1.692.000 0x3A917CCE
int sceSblUsInformUpdateOngoingForUser(SceUInt32 nTask, SceUInt32 percentage);

sceSblUsInformUpdateFinishedForUser

Version NID
0.990-1.692.000 0x4734B987
int sceSblUsInformUpdateFinishedForUser(SceUInt32 nTask, const char *message, SceSize messageLength);

sceSblUsSetSwInfoIntForUser

Version NID
0.990-1.692.000 0xA870D285

Example of (name, value) couples:

("SdkVersion", 0x1692000)
("ScVersion", ?).
int sceSblUsSetSwInfoIntForUser(const char *name, SceSize nameLength, SceUInt32 value);

sceSblUsSetSwInfoStrForUser

Version NID
0.990-1.692.000 0x8C7255C8

Example of (name, value) couples:

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-1.692.000 0xF157E34A
int sceSblUsSetSwInfoBinForUser(const char *name, SceSize nameLength, const void *value, SceSize valueLength);

SceSblSsUpdateMgr

sceSblUsGetUpdateModeForUser

Version NID
0.931-3.740.011 0x8E834565

Temp name was sceSblSsUpdateMgrGetBootMode.

Get UpdateMode from Ernie NVS.

int sceSblUsGetUpdateModeForUser(SceUpdateMode *mode);

sceSblUsSetUpdateModeForUser

Version NID
0.931-3.740.011 0xC725E3F0

Temp name was sceSblSsUpdateMgrSetBootMode.

Set UpdateMode to Ernie NVS.

int sceSblUsSetUpdateModeForUser(SceUpdateMode mode);

sceSblUsPowerControlForUser

Version NID
0.931-3.740.011 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: sceKernelPowerTick(flag)
// 8: Checks if CP is enabled by DIP switch 194.

int sceSblUsPowerControlForUser(int mode, int flag);

sceSblUsGetSpkgInfoForUser

Version NID
0.931-3.740.011 0x8E3EC2E1

Temp name was sceSblSsUpdateMgrGetSpkgInfo.

int sceSblUsGetSpkgInfoForUser(int package_type, SceSblUsSpkgInfo *pInfo);

sceSblUsVerifyPupForUser

Version NID
0.931-3.740.011 0x6F5EDBF4

path max len: 0x3FF bytes

int sceSblUsVerifyPupForUser(const char *path);

sceSblUsVerifyPupAdditionalSignForUser

Version NID
0.990 not present
3.60-3.740.011 0xB19366CB

path max len: 0x3FF bytes

int sceSblUsVerifyPupAdditionalSignForUser(const char *path);

sceSblUsVerifyPupHeaderForUser

Version NID
0.940-3.740.011 0x9BE17A06

path max len: 0x3FF bytes

int sceSblUsVerifyPupHeaderForUser(const char *path);

sceSblUsVerifyPupSegmentForUser

Version NID
0.931-3.740.011 0xD47FD33E

path max len: 0x3FF bytes

int sceSblUsVerifyPupSegmentForUser(const char *path, SceUInt64 segment_index);

sceSblUsVerifyPupSegmentByIdForUser

Version NID
0.931-3.740.011 0x95FC1A0A

path max len: 0x3FF bytes

int sceSblUsVerifyPupSegmentByIdForUser(const char *path, uint64_t seg_id);

sceSblUsVerifyPupWatermarkForUser

Version NID
0.931-3.740.011 0xC6CDEB8D

path max len: 0x3FF bytes

int sceSblUsVerifyPupWatermarkForUser(const char *path);

sceSblUsUpdateSpackageForUser

Version NID
0.931-3.740.011 0x6E8DDAC4
int sceSblUsUpdateSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);

sceSblUsInspectSpackageForUser

Version NID
0.931-3.740.011 0x1A39F6EE
int sceSblUsInspectSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);

sceSblUsExtractSpackageForUser

Version NID
0.931-3.740.011 0xC1792A1C
int sceSblUsExtractSpackageForUser(int package_type, SceKernelSpackageArgs *args, int *pRequestId);

sceSblUsGetExtractSpackageForUser

Version NID
0.931-3.740.011 0x4897AD56
// node_type must be 0, 1 or 2

int sceSblUsGetExtractSpackageForUser(int node_type, int requestId, SceKernelSpackageArgs *args);

sceSblUsAllocateBufferForUser

Version NID
0.931-3.740.011 0x4C06F41C
int sceSblUsAllocateBufferForUser(SceSize size, void **uaddr);

sceSblUsReleaseBufferForUser

Version NID
0.931-3.740.011 0xBD677F5A
int sceSblUsReleaseBufferForUser(void *uaddr);

sceSblUsGetStatusForUser

Version NID
0.931-3.740.011 0xF403143E
int sceSblUsGetStatusForUser(int node_type, int requestId, SceKernelSpackageArgs *args);

sceSblUsCheckSystemIntegrityForUser

Version NID
0.931-3.740.011 0xBED8DFC7

Check if the current process is system privileged.

SceInt32 sceSblUsCheckSystemIntegrityForUser(void);

sceSblUsGetApplicableVersionForUser

Version NID
0.931-3.740.011 0x3ADD4B7A
// type must be 1 or 9 else returns error "builtin revoke list cannot be found"
int sceSblUsGetApplicableVersionForUser(int type, void *versionBuf);

sceSblUsInformUpdateStartedForUser

Version NID
0.990 not present
1.000.071-3.740.011 0x9FC8E905
int sceSblUsInformUpdateStartedForUser(int number1, int number2, const char *str, SceSize len);

sceSblUsInformUpdateOngoingForUser

Version NID
0.990 not present
1.000.071-3.740.011 0xD0CB50AC
int sceSblUsInformUpdateOngoingForUser(int number1, int number2);

sceSblUsInformUpdateFinishedForUser

Version NID
0.990 not present
1.000.071-3.740.011 0x2A02DCFB
int sceSblUsInformUpdateFinishedForUser(int number, const char *str, SceSize len);

sceSblUsSetSwInfoIntForUser

Version NID
0.990 not present
1.000.071-3.740.011 0x157AD4AD
int sceSblUsSetSwInfoIntForUser(char *str, SceSize len, SceUInt32 number);

sceSblUsSetSwInfoStrForUser

Version NID
0.990 not present
1.000.071-3.740.011 0xFE930747
int sceSblUsSetSwInfoStrForUser(char *str1, SceSize len1, char *str2, SceSize len2);

sceSblUsSetSwInfoBinForUser

Version NID
0.990 not present
1.000.071-3.740.011 0x92A8002B
int sceSblUsSetSwInfoBinForUser(char *str1, SceSize len1, char *str2, SceSize len2);