Difference between revisions of "SceSblUpdateMgr"

From Vita Development Wiki
Jump to navigation Jump to search
(Redirected page to Updater#SceSblUpdateMgr)
 
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
#REDIRECT [[Updater#SceSblUpdateMgr]]
+
 
 +
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 <code>bootfs:update_mgr.skprx</code>.
 +
 
 +
{| class="wikitable"
 +
! Version !! World !! Privilege
 +
|-
 +
| 1.69-3.60 || Non-secure || Kernel
 +
|}
 +
 
 +
== 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, SceUInt64 segment_index);</source>
 +
 
 +
=== sceSblUsVerifyPupSegmentByIdForUser ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.60 || 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.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>

Latest revision as of 06:50, 30 May 2021

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);

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, 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);

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);