https://wiki.henkaku.xyz/vita/api.php?action=feedcontributions&user=CelesteBlue&feedformat=atom
Vita Development Wiki - User contributions [en]
2024-03-28T17:16:20Z
User contributions
MediaWiki 1.35.13
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21162
NID
2024-03-26T07:48:50Z
<p>CelesteBlue: /* Known plaintext suffixes */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
The function NID is a value that is statically assigned by a toolchain in relation to a function exported in a library so that it is unique within that library. The function name can be determined by searching for the symbol name with the same value as the function NID from the program file before the symbol information has been stripped.<br />
<br />
In PS Vita, each library has its own NID. In PSP, libraries did not have NIDs so they were parsed by name.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" prefix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
The following PS Vita libraries are reusing some NIDs from PSP (to investigate):<br />
<pre><br />
SceFace<br />
SceIdStorageForDriver<br />
SceLedForDriver<br />
ScePower<br />
SceSmart<br />
SceVoice<br />
SceVoiceQoS<br />
</pre><br />
<br />
The following PS Vita libraries have interesting NIDs (to investigate):<br />
<pre><br />
SceFios2KernelForDriver<br />
</pre><br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | "lib" + downcase("Sce"^-1 + libname)<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | uppercase(camel_case("Sce"^-1 + libname))<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> ([[ScePaf]] module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> ([[ScePafWebMapView]] module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + psvita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Basics ==<br />
<br />
Lemma: Library and function/variable NIDs depend on name.<br />
<br />
Proof: All known algorithms use the function/variable/library name as a parameter.<br />
<br />
Lemma: Library and function/variable NIDs can depend on other things than name.<br />
<br />
Proof: Some known algorithms append a salt suffix to the name.<br />
<br />
== Per-library NID suffix ==<br />
<br />
Theorem: Every PS Vita function/variable NID suffix is common to the whole library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
Theorem: NID suffix is the same for libraries and functions/variables.<br />
<br />
Proof:<br />
<br />
1. For old PS Vita libraries there was no NID suffix, nor for the functions. Ex: [[ScePower#ScePowerForDriver]].<br />
<br />
2. All known functions/variables NID suffixes also apply to their respective library.<br />
<br />
Theorem: At least before SDK 3.630.011, PS Vita function/variable NID is not generated from something library-related other than library name.<br />
<br />
Proof: Some ForDriver and ForKernel libraries have different library NIDs but same function NID and same function name prefix (without ForDriver, ForKernel, etc... suffix).<br />
<br />
Example 1: [[SceKernelThreadMgr#sceKernelGetMutexInfo_089]]<br />
<br />
Example 2: Some functions have been moved from one library to another but the function names have not changed. <br />
<br />
== Per-library function naming convention ==<br />
<br />
Theorem: When a PS Vita library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]] function inside [[SceAvcdecForPlayer#SceAvcdecForPlayer]] library.<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
== Function or variable NID change ==<br />
<br />
Lemma: When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Theorem: If a PS Vita function NID changes but its library NID does not change, then the function has been renamed.<br />
<br />
Proof: When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== SDK 3.63 library NIDs change ==<br />
<br />
Lemma: SCE changed many PS Vita library NIDs since SDK 3.630.011, after SDK 3.610.011.<br />
<br />
Proof: [[SceKernelModulemgr#SceModulemgrForKernel]] library NID changed since FW 3.63, but libname, libver and all its library information have not changed.<br />
<br />
A non-exhaustive list of affected libraries is:<br />
<pre><br />
SceExcpmgrForKernel<br />
SceSysmemForKernel<br />
SceCpuForKernel<br />
SceDebugForKernel<br />
SceUartForKernel<br />
SceThreadmgrForKernel<br />
SceProcessmgrForKernel<br />
SceModulemgrForKernel<br />
</pre><br />
<br />
Theorem: If a library NID changes without changing name, then all its functions/variables NIDs change. Moreover, it is likely that the algorithm is hash(name+lib_suffix) and that the only modification was the library suffix.<br />
<br />
Proof: every function/variable NIDs whose library NID changed since SDK 3.630.000 while keeping library name, was also changed.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=ScePower&diff=21161
ScePower
2024-03-25T19:42:47Z
<p>CelesteBlue: /* ScePowerForDriver_8C0D2051 */</p>
<hr />
<div>== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 1.69-3.60 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 1.000.071-3.740.011 || [[ScePower#ScePower|ScePower]] || Non-secure || User || 0x1082DA7F<br />
|-<br />
| 0.990.000-3.740.011 || [[ScePower#ScePowerForDriver|ScePowerForDriver]] || Non-secure || Kernel || 0x1590166F<br />
|-<br />
| 0.990.000-0.996.090 || [[ScePower#SceLedForDriver|SceLedForDriver]] || Non-secure || Kernel || not present. Present in [[SceLed]].<br />
|-<br />
| 1.000.071-3.740.011 || [[ScePower#SceLedForDriver|SceLedForDriver]] || Non-secure || Kernel || 0x282C1323<br />
|}<br />
<br />
== Clocks ==<br />
<br />
=== Default (in Shell) ===<br />
<br />
<source lang="C"><br />
Arm : 333<br />
Gpu(Proc) : 41<br />
GpuXbar : 111<br />
Bus : 222<br />
Compat : 0<br />
Venezia : 166<br />
Dmac5 : 166<br />
Vip : 0<br />
Sys : 190<br />
CameraBus : 0<br />
Gpu(Internal) : 41, 41<br />
</source><br />
<br />
== Power callbacks ==<br />
<br />
See also [[SceSyscon#Callbacks]].<br />
<br />
Power callback notifyArg allowed mask are listed in the table below.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Process !! Mask<br />
|-<br />
| Kernel || 0xFCF71F80<br />
|-<br />
| System || 0xFCF71F80<br />
|-<br />
| Non-System || 0x361180<br />
|}<br />
<br />
== ScePowerMain event flag ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Value !! Function<br />
|-<br />
| 1 || SceCtrl callback subroutines<br />
|-<br />
| 4 || scePowerRequestDisplayOn<br />
|-<br />
| 8 || scePowerRequestDisplayOff<br />
|-<br />
| 0x10 || scePowerRequestSuspend, scePowerRequestStandby<br />
|-<br />
| 0x20 || scePowerRequestSuspend<br />
|-<br />
| 0x40 || scePowerRequestSoftReset<br />
|-<br />
| 0x80 || scePowerRequestColdReset<br />
|-<br />
| 0x200 || ScePowerAlarm0 subroutines<br />
|-<br />
| 0x400 || scePowerRequestHibernate<br />
|-<br />
| 0x800 || HDMI callback subroutines<br />
|}<br />
<br />
== Types ==<br />
<br />
<source lang="C"><br />
typedef enum ScePowerCallbackType {<br />
SCE_POWER_CB_AFTER_SYSTEM_RESUME = 0x00000080, /* TODO: confirm */<br />
SCE_POWER_CB_BATTERY_ONLINE = 0x00000100,<br />
SCE_POWER_CB_THERMAL_SUSPEND = 0x00000200, /* TODO: confirm */<br />
SCE_POWER_CB_LOW_BATTERY_SUSPEND = 0x00000400, /* TODO: confirm */<br />
SCE_POWER_CB_LOW_BATTERY = 0x00000800,<br />
SCE_POWER_CB_POWER_ONLINE = 0x00001000,<br />
SCE_POWER_CB_SYSTEM_SUSPEND = 0x00010000,<br />
SCE_POWER_CB_SYSTEM_RESUMING = 0x00020000,<br />
SCE_POWER_CB_SYSTEM_RESUME = 0x00040000,<br />
SCE_POWER_CB_UNK_0x100000 = 0x00100000, /* Related to proc_event::display_switch */<br />
SCE_POWER_CB_APP_RESUME = 0x00200000,<br />
SCE_POWER_CB_APP_SUSPEND = 0x00400000,<br />
SCE_POWER_CB_APP_RESUMING = 0x00800000, /* TODO: confirm */<br />
SCE_POWER_CB_SCREENSHOT_TRIGGER = 0x04000000,<br />
SCE_POWER_CB_UNK_0x8000000 = 0x08000000, /* Triggered by a special button combo (PS + Power) on the event of ScePowerMain */<br />
SCE_POWER_CB_PS_BUTTON_HOLD = 0x10000000,<br />
SCE_POWER_CB_PS_BUTTON_PRESS = 0x20000000,<br />
SCE_POWER_CB_POWER_BUTTON_HOLD = 0x40000000,<br />
SCE_POWER_CB_POWER_BUTTON_PRESS = 0x80000000,<br />
SCE_POWER_CB_VALID_MASK_KERNEL = 0xFCF71F80,<br />
SCE_POWER_CB_VALID_MASK_SYSTEM = 0xFCF71F80,<br />
SCE_POWER_CB_VALID_MASK_NON_SYSTEM = 0x00361180<br />
} ScePowerCallbackType;<br />
<br />
#define SCE_CLOCK_FREQ_GPU_41MHZ (41)<br />
#define SCE_CLOCK_FREQ_GPU_55MHZ (55)<br />
#define SCE_CLOCK_FREQ_GPU_83MHZ (83)<br />
#define SCE_CLOCK_FREQ_GPU_111MHZ (111)<br />
#define SCE_CLOCK_FREQ_GPU_166MHZ (166)<br />
#define SCE_CLOCK_FREQ_GPU_222MHZ (222)<br />
<br />
#define SCE_CLOCK_FREQ_GPU_XBAR_111MHZ (111)<br />
#define SCE_CLOCK_FREQ_GPU_XBAR_166MHZ (166)<br />
<br />
#define SCE_CLOCK_FREQ_DMAC5_41MHZ (41)<br />
#define SCE_CLOCK_FREQ_DMAC5_83MHZ (83)<br />
#define SCE_CLOCK_FREQ_DMAC5_133MHZ (133)<br />
#define SCE_CLOCK_FREQ_DMAC5_166MHZ (166)<br />
<br />
#define SCE_CLOCK_FREQ_BUS_55MHZ (55)<br />
#define SCE_CLOCK_FREQ_BUS_83MHZ (83)<br />
#define SCE_CLOCK_FREQ_BUS_111MHZ (111)<br />
#define SCE_CLOCK_FREQ_BUS_166MHZ (166)<br />
#define SCE_CLOCK_FREQ_BUS_222MHZ (222)<br />
<br />
#define SCE_CLOCK_FREQ_COMPAT_0MHZ (0)<br />
#define SCE_CLOCK_FREQ_COMPAT_222MHZ (222)<br />
#define SCE_CLOCK_FREQ_COMPAT_333MHZ (333)<br />
<br />
#define SCE_CLOCK_FREQ_VENEZIA_41MHZ (41)<br />
#define SCE_CLOCK_FREQ_VENEZIA_55MHZ (55)<br />
#define SCE_CLOCK_FREQ_VENEZIA_83MHZ (83)<br />
#define SCE_CLOCK_FREQ_VENEZIA_111MHZ (111)<br />
#define SCE_CLOCK_FREQ_VENEZIA_166MHZ (166)<br />
#define SCE_CLOCK_FREQ_VENEZIA_222MHZ (222)<br />
#define SCE_CLOCK_FREQ_VENEZIA_333MHZ (333)<br />
<br />
#define SCE_CLOCK_FREQ_VIP_0MHZ (0)<br />
#define SCE_CLOCK_FREQ_VIP_41MHZ (41)<br />
#define SCE_CLOCK_FREQ_VIP_55MHZ (55)<br />
#define SCE_CLOCK_FREQ_VIP_83MHZ (83)<br />
#define SCE_CLOCK_FREQ_VIP_111MHZ (111)<br />
#define SCE_CLOCK_FREQ_VIP_166MHZ (166)<br />
#define SCE_CLOCK_FREQ_VIP_222MHZ (222)<br />
<br />
#define SCE_CLOCK_FREQ_SYS_190MHZ (190)<br />
#define SCE_CLOCK_FREQ_SYS_222MHZ (222)<br />
<br />
#define SCE_CLOCK_FREQ_CAMERA_BUS_0MHZ (0)<br />
#define SCE_CLOCK_FREQ_CAMERA_BUS_41MHZ (41)<br />
#define SCE_CLOCK_FREQ_CAMERA_BUS_67MHZ (67)<br />
#define SCE_CLOCK_FREQ_CAMERA_BUS_83MHZ (83)<br />
#define SCE_CLOCK_FREQ_CAMERA_BUS_131MHZ (131)<br />
#define SCE_CLOCK_FREQ_CAMERA_BUS_166MHZ (166)<br />
</source><br />
<br />
== ScePower ==<br />
<br />
=== scePowerGetBatteryCycleCount ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x008A54B9<br />
|}<br />
<br />
=== scePowerRequestColdReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x0442D852<br />
|}<br />
<br />
=== scePowerRegisterCallback ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x04B7766E<br />
|}<br />
<br />
=== scePowerGetGpuXbarClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x0A750DEE<br />
|}<br />
<br />
=== scePowerIsBatteryExist ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x0AFD0D8B<br />
|}<br />
<br />
=== scePowerGetGpuClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x1B04A1D6<br />
|}<br />
<br />
=== scePowerIsBatteryCharging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x1E490401<br />
|}<br />
<br />
=== scePowerGetBatteryLifePercent ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x2085D15D<br />
|}<br />
<br />
=== scePowerBatteryUpdateInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.030-3.740.011 || 0x27F3292C<br />
|}<br />
<br />
=== scePowerGetBatteryTemp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x28E12023<br />
|}<br />
<br />
=== scePowerRequestStandby ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x2B7C7CF4<br />
|}<br />
<br />
=== scePowerSetConfigurationMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x3CE187B6<br />
|}<br />
<br />
=== scePowerGetBatteryVolt ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x483CE86B<br />
|}<br />
<br />
=== scePowerSetUsingWireless ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x4D695C1F<br />
|}<br />
<br />
=== scePowerGetCaseTemp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x525592E4<br />
|}<br />
<br />
=== scePowerSetGpuClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x717DB06C<br />
|}<br />
<br />
=== scePowerSetArmClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x74DB5AE5<br />
|}<br />
<br />
=== scePowerIsSuspendRequired ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x78A1A796<br />
|}<br />
<br />
=== scePowerIsRequest ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x7FA406DD<br />
|}<br />
<br />
=== scePowerGetBatteryElec ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x862AE1A6<br />
|}<br />
<br />
=== scePowerIsPowerOnline ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x87440F5E<br />
|}<br />
<br />
=== scePowerGetBatteryLifeTime ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x8EFB3FA2<br />
|}<br />
<br />
=== scePowerGetBatteryRemainCapacity ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x94F5A53F<br />
|}<br />
<br />
=== scePowerSetGpuXbarClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xA7739DBE<br />
|}<br />
<br />
=== scePowerGetBatterySOH ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xA88A2B65<br />
|}<br />
<br />
=== scePowerGetArmClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xABC6F88F<br />
|}<br />
<br />
=== scePowerRequestSuspend ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xAC32C9CC<br />
|}<br />
<br />
=== scePowerSetIdleTimerCount ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xB11EF149<br />
|}<br />
<br />
=== scePowerGetBatteryChargingStatus ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xB4432BC8<br />
|}<br />
<br />
=== scePowerIsLowBattery ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xD3075926<br />
|}<br />
<br />
=== scePowerGetUsingWireless ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xD541FF03<br />
|}<br />
<br />
=== scePowerCancelRequest ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xDB62C9CF<br />
|}<br />
<br />
=== scePowerUnregisterCallback ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xDFA8BAF8<br />
|}<br />
<br />
=== scePowerGetBatteryFullCapacity ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0xFD18A0FF<br />
|}<br />
<br />
=== scePowerGetBusClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x478FE6F5<br />
|}<br />
<br />
=== scePowerSetBusClockFrequency ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xB8D7B3FB<br />
|}<br />
<br />
=== scePowerRequestDisplayOff ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x160EB506<br />
|}<br />
<br />
This function was probably added for PS TV support. Indeed, the screen of a PS TV is a HDMI device not an embedded screen like on PS Vita handled consoles.<br />
<br />
=== scePowerRequestDisplayOn ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3EA75C88<br />
|}<br />
<br />
This function was probably added for PS TV support. Indeed, the screen of a PS TV is a HDMI device not an embedded screen like on PS Vita handled consoles.<br />
<br />
=== scePowerIsLowBatteryInhibitUpdateDownload ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xE3E45636<br />
|}<br />
<br />
This function was added along with [[SceSyscon#sceSysconIsLowBatteryInhibitUpdateDownloadForDriver]].<br />
<br />
=== scePowerIsLowBatteryInhibitUpdateReboot ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x9AA05A48<br />
|}<br />
<br />
This function was added along with [[SceSyscon#sceSysconIsLowBatteryInhibitUpdateRebootForDriver]].<br />
<br />
=== scePowerGetBatteryRemainLevel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xEA3E3715<br />
|}<br />
<br />
This function was added along with [[SceSyscon#sceSysconGetBatteryRemainLevelForDriver]].<br />
<br />
=== scePowerGetBatteryRemainMaxLevel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1DB00F10<br />
|}<br />
<br />
== ScePowerForDriver ==<br />
<br />
=== scePowerGetArmClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xABC6F88F<br />
|}<br />
<br />
<source lang="C">int scePowerGetArmClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetArmClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x74DB5AE5<br />
|}<br />
<br />
<source lang="C">int scePowerSetArmClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetArmClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2E9000F7<br />
|}<br />
<br />
<source lang="C">int scePowerGetArmClockFrequencyProcForDriver(SceUID pid);</source><br />
<br />
=== scePowerSetArmClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x86CB5218<br />
|}<br />
<br />
<source lang="C">int scePowerSetArmClockFrequencyProcForDriver(SceUID pid, int clock);</source><br />
<br />
=== scePowerGetGpuClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || 0x1B04A1D6<br />
|-<br />
| 1.800.071-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">int scePowerGetGpuClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetGpuClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || 0x717DB06C<br />
|-<br />
| 1.800.071-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">int scePowerSetGpuClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetGpuClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x642E0AF2<br />
|}<br />
<br />
<source lang="C">int scePowerGetGpuClockFrequencyProcForDriver(SceUID pid);</source><br />
<br />
=== scePowerSetGpuClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xB104EFE2<br />
|}<br />
<br />
<source lang="C">int scePowerSetGpuClockFrequencyProcForDriver(SceUID pid, int clock);</source><br />
<br />
=== scePowerGetGpuClockFrequencyInternalForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x475BCC82<br />
|}<br />
<br />
Temp name was scePowerGetGpuEs4ClockFrequencyForDriver, scePowerGetDeviceCountForDriver.<br />
<br />
<source lang="C">int scePowerGetGpuClockFrequencyInternalForDriver(SceInt32 *corefreq, SceInt32 *mpfreq);</source><br />
<br />
=== scePowerSetGpuClockFrequencyInternalForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x264C24FC<br />
|}<br />
<br />
Temp name was scePowerSetGpuEs4ClockFrequencyForDriver<br />
<br />
<source lang="C">int scePowerSetGpuClockFrequencyInternalForDriver(SceInt32 corefreq, SceInt32 mpfreq);</source><br />
<br />
=== scePowerGetGpuXbarClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x0A750DEE<br />
|}<br />
<br />
<source lang="C">int scePowerGetGpuXbarClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetGpuXbarClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xA7739DBE<br />
|}<br />
<br />
<source lang="C">int scePowerSetGpuXbarClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetGpuXbarClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x62C5406C<br />
|}<br />
<br />
<source lang="C">int scePowerGetGpuXbarClockFrequencyProcForDriver(SceUID pid);</source><br />
<br />
=== scePowerSetGpuXbarClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8D18F728<br />
|}<br />
<br />
<source lang="C">int scePowerSetGpuXbarClockFrequencyProcForDriver(SceUID pid, int clock);</source><br />
<br />
=== scePowerGetBusClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x478FE6F5<br />
|}<br />
<br />
<source lang="C">int scePowerGetBusClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetBusClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB8D7B3FB<br />
|}<br />
<br />
<source lang="C">int scePowerSetBusClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetBusClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2777A517<br />
|}<br />
<br />
<source lang="C">int scePowerGetBusClockFrequencyProcForDriver(SceUID pid);</source><br />
<br />
=== scePowerSetBusClockFrequencyProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x20A33D58<br />
|}<br />
<br />
<source lang="C">int scePowerSetBusClockFrequencyProcForDriver(SceUID pid, int clock);</source><br />
<br />
=== scePowerGetCompatClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCBCC11CC<br />
|}<br />
<br />
<source lang="C">int scePowerGetCompatClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetCompatClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFFC84E69<br />
|}<br />
<br />
<source lang="C">int scePowerSetCompatClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetVeneziaClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x64641E6A<br />
|}<br />
<br />
<source lang="C">int scePowerGetVeneziaClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetVeneziaClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x621BD8FD<br />
|}<br />
<br />
<source lang="C">int scePowerSetVeneziaClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetDmac5ClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF1E14EA9<br />
|}<br />
<br />
<source lang="C">int scePowerGetDmac5ClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetDmac5ClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA902CDDF<br />
|}<br />
<br />
<source lang="C">int scePowerSetDmac5ClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetVipClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0E58FCDF<br />
|}<br />
<br />
Temp name was scePowerGetVeneziaForDriver.<br />
<br />
<source lang="C">int scePowerGetVipClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetVipClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE5573571<br />
|}<br />
<br />
Temp name was scePowerSetVeneziaForDriver.<br />
<br />
VIP is set to ?222MHz? by system when video is played back, even in PspEmu. ?The two clocks it sets are 55MHz and 83MHz.?<br />
<br />
Related to [[Venezia]].<br />
<br />
<source lang="C">int scePowerSetVipClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetSysClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC63DACD5<br />
|}<br />
<br />
<source lang="C">int scePowerGetSysClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetSysClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.60 || 0x0E333BEC<br />
|}<br />
<br />
[[Hardware_Timers]] Clock.<br />
<br />
<source lang="C">int scePowerSetSysClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerGetCameraBusClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x668F01D4<br />
|}<br />
<br />
<source lang="C">int scePowerGetCameraBusClockFrequencyForDriver(void);</source><br />
<br />
=== scePowerSetCameraBusClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC743E392<br />
|}<br />
<br />
<source lang="C">int scePowerSetCameraBusClockFrequencyForDriver(int clock);</source><br />
<br />
=== scePowerSetCallbackStateForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA6FF5997<br />
|}<br />
<br />
=== scePowerSetDisplayBrightnessForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x43D5CE1D<br />
|}<br />
<br />
=== scePowerGetDisplayMaxBrightnessForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD8759B55<br />
|}<br />
<br />
=== scePowerSetDisplayMaxBrightnessForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x77027B6B<br />
|}<br />
<br />
<source lang="c"><br />
// ex: scePowerSetDisplayMaxBrightnessForDriver(0x10000);<br />
// ex: scePowerSetDisplayMaxBrightnessForDriver(0xC4EC);<br />
int scePowerSetDisplayMaxBrightnessForDriver(int unk);<br />
</source><br />
<br />
=== scePowerSetDisplayBrightnessForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x43D5CE1D<br />
|}<br />
<br />
=== scePowerTickForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xEFD3C963<br />
|}<br />
<br />
Generate a power tick, preventing unit from powering off and turning off display.<br />
<br />
<source lang="C">int scePowerTickForDriver(SceUInt32 type);</source><br />
<br />
=== ScePowerForDriver_394DE492 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x394DE492<br />
|}<br />
<br />
Returns a global boolean variable indicating if display brightness change is allowed.<br />
<br />
<source lang="C">int ScePowerForDriver_394DE492(void);</source><br />
<br />
=== scePowerSetStandbyButtonPushTimeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x675A84ED<br />
|}<br />
<br />
derived from [[SceVshBridge#vshPowerSetStandbyButtonPushTime|vshPowerSetStandbyButtonPushTime]]<br />
<br />
<source lang="C">int scePowerSetStandbyButtonPushTimeForDriver(int a1);</source><br />
<br />
=== scePowerSetPsButtonPushTimeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCF8F0529<br />
|}<br />
<br />
derived from [[SceVshBridge#vshPowerSetPsButtonPushTime|vshPowerSetPsButtonPushTime]]<br />
<br />
<source lang="C">int scePowerSetPsButtonPushTimeForDriver(int a1);</source><br />
<br />
=== scePowerGetWakeupFactorForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9F26222A<br />
|}<br />
<br />
derived from [[SceVshBridge#vshPowerGetWakeupFactor|vshPowerGetWakeupFactor]]<br />
<br />
<source lang="C">int scePowerGetWakeupFactorForDriver(void);</source><br />
<br />
=== scePowerGetPowerSwModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x165CE085<br />
|}<br />
<br />
Derived from PSP NID.<br />
<br />
<source lang="C"><br />
/**<br />
* Unknow, get ??? something<br />
*<br />
* @returns On PSP, 0 or 1 or 2 or 3, default to 2, on PS Vita, 4 is a possible value<br />
*/<br />
int scePowerGetPowerSwModeForDriver(void);</source><br />
<br />
=== scePowerSetPowerSwModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0CD21B1F<br />
|}<br />
<br />
Derived from PSP NID.<br />
<br />
<source lang="C">int scePowerSetPowerSwModeForDriver(int mode);</source><br />
<br />
=== scePowerSetPowerSwMode2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC1853BA7<br />
|}<br />
<br />
This is guessed name.<br />
<br />
derived from [[SceVshBridge#vshPowerSetPowerSwMode|vshPowerSetPowerSwMode]]<br />
<br />
<source lang="C">int scePowerSetPowerSwMode2ForDriver(int power_sw_mode);</source><br />
<br />
=== scePowerGetBatteryCycleCountForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x008A54B9<br />
|}<br />
<br />
=== scePowerGetResumeCountForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || 0x0074EF9B<br />
|-<br />
| 3.500.011-3.740.011 || 0x0074EF9B<br />
|}<br />
<br />
=== scePowerIsRequestForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x7FA406DD<br />
|}<br />
<br />
=== scePowerCancelRequestForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xDB62C9CF<br />
|}<br />
<br />
=== scePowerRequestShutdownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8921A7A0<br />
|}<br />
<br />
=== scePowerRequestSoftResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x2875994B<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to do a soft reset<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestSoftResetForDriver(void);<br />
</source><br />
<br />
=== scePowerRequestColdResetForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x0442D852<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to do a cold reset<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestColdResetForDriver(void);<br />
</source><br />
<br />
=== scePowerRequestHibernateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x08951418<br />
|}<br />
<br />
derived from [[SceVshBridge#vshPowerRequestHibernate|vshPowerRequestHibernate]]<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to enter hibernate mode<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestHibernateForDriver(void);<br />
</source><br />
<br />
=== scePowerRequestSuspendForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xAC32C9CC<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to enter suspend mode<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestSuspendForDriver(void);<br />
</source><br />
<br />
=== scePowerRequestStandbyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x2B7C7CF4<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to enter standby mode<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestStandbyForDriver(void);<br />
</source><br />
<br />
=== scePowerRequestResumeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x02DB1035<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to resume<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestResumeForDriver(void);<br />
</source><br />
<br />
=== scePowerRequestDisplayOffForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x160EB506<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to turn off display<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestDisplayOffForDriver(void);<br />
</source><br />
<br />
=== scePowerRequestDisplayOnForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3EA75C88<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Requests PS Vita to turn on display<br />
*<br />
* @return always 0<br />
*/<br />
int scePowerRequestDisplayOnForDriver(void);<br />
</source><br />
<br />
=== scePowerIsSuspendRequiredForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x78A1A796<br />
|}<br />
<br />
=== scePowerRegisterCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x04B7766E<br />
|}<br />
<br />
=== scePowerUnregisterCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xDFA8BAF8<br />
|}<br />
<br />
=== scePowerGetIdleTimerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEDC13FE5<br />
|}<br />
<br />
=== scePowerSetIdleTimerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6BC26FC7<br />
|}<br />
<br />
=== scePowerSetIdleTimerCountProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFB5C3C75<br />
|}<br />
<br />
=== scePowerSetIdleCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x1BA2FCAE<br />
|}<br />
<br />
<source lang="C"><br />
// idx: 0-7<br />
int scePowerSetIdleCallbackForDriver(SceUInt32 idx, int maybe_flags, SceUInt64 duration, void *cb_func, int idle_cb_info_5);<br />
</source><br />
<br />
{| class="wikitable"<br />
|-<br />
! Index !! By !! Description<br />
|-<br />
| 0 || ScePower || scePowerRequestSuspend<br />
|-<br />
| 1 || ScePower || Ctrl<br />
|-<br />
| 2 || ScePower || Ctrl<br />
|-<br />
| 3 || unknown || -<br />
|-<br />
| 4 || SceMsif || -<br />
|-<br />
| 5 || unknown || -<br />
|-<br />
| 6 || unknown || -<br />
|-<br />
| 7 || unknown || -<br />
|}<br />
<br />
=== ScePowerForDriver_660D5AB4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.60 || 0x660D5AB4<br />
|}<br />
<br />
Set some value of the selected Idle Callback to 2.<br />
<br />
<source lang="C"><br />
// idx: 0-7<br />
int ScePowerForDriver_660D5AB4(SceUInt32 idx);<br />
</source><br />
<br />
=== scePowerSetProcessIdleCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0856FD0A<br />
|}<br />
<br />
<source lang="C">int scePowerSetProcessIdleCallbackForDriver(int idle_cb_info_1, int idle_cb_info_2);</source><br />
<br />
=== scePowerGetCaseTempForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x525592E4<br />
|}<br />
<br />
Exact same code as [[#scePowerGetBatteryTempForDriver]].<br />
<br />
=== scePowerIsBatteryExistForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x0AFD0D8B<br />
|}<br />
<br />
=== scePowerWaitRequestCompletionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3951AF53<br />
|}<br />
<br />
Temp name was scePowerEncodeUBattery (PSP NID wrong bruteforce).<br />
<br />
=== scePowerSetBatteryFakeStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x0C6973B8<br />
|}<br />
<br />
Derived from [[SceVshBridge#_vshPowerSetBatteryFakeStatus|_vshPowerSetBatteryFakeStatus]].<br />
<br />
<source lang="C">int scePowerSetBatteryFakeStatusForDriver(int status);</source><br />
<br />
=== scePowerIsPowerOnlineForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x87440F5E<br />
|}<br />
<br />
=== scePowerIsBatteryChargingForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1E490401<br />
|}<br />
<br />
=== scePowerGetBatteryLifePercentForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x2085D15D<br />
|}<br />
<br />
=== scePowerBatteryUpdateInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x27F3292C<br />
|}<br />
<br />
=== scePowerGetBatteryTempForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x28E12023<br />
|}<br />
<br />
Exact same code as [[#scePowerGetCaseTempForDriver]].<br />
<br />
=== scePowerGetBatteryVoltForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x483CE86B<br />
|}<br />
<br />
=== scePowerGetBatteryElecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x862AE1A6<br />
|}<br />
<br />
=== scePowerGetBatteryLifeTimeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8EFB3FA2<br />
|}<br />
<br />
=== scePowerGetBatteryRemainCapacityForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x94F5A53F<br />
|}<br />
<br />
To document: in which unit is the remaining capacity.<br />
<br />
<source lang="C">int scePowerGetBatteryRemainCapacityForDriver(void);</source><br />
<br />
=== scePowerGetBatteryRemainLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xEA3E3715<br />
|}<br />
<br />
If Syscon version < 0x1040105, returns the remaining battery level, else returns 0 (SCE_POWER_BATTERY_REMAIN_LEVEL_INVALID).<br />
<br />
<source lang="C"><br />
#define SCE_POWER_BATTERY_REMAIN_LEVEL_INVALID 0<br />
#define SCE_POWER_BATTERY_REMAIN_LEVEL_0_25_PERCENTS 1<br />
#define SCE_POWER_BATTERY_REMAIN_LEVEL_25_50_PERCENTS 2<br />
#define SCE_POWER_BATTERY_REMAIN_LEVEL_50_75_PERCENTS 3<br />
#define SCE_POWER_BATTERY_REMAIN_LEVEL_75_100_PERCENTS 4<br />
<br />
int scePowerGetBatteryRemainLevelForDriver(void);<br />
</source><br />
<br />
=== scePowerGetBatteryRemainMaxLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1DB00F10<br />
|}<br />
<br />
If Syscon version < 0x1040105, returns 4 (SCE_POWER_BATTERY_REMAIN_LEVEL_75_100_PERCENTS), else returns 0 (SCE_POWER_BATTERY_REMAIN_LEVEL_INVALID).<br />
<br />
<source lang="C">int scePowerGetBatteryRemainLevelForDriver(void);</source><br />
<br />
=== scePowerGetBatterySOHForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xA88A2B65<br />
|}<br />
<br />
=== scePowerGetBatteryChargingStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xB4432BC8<br />
|}<br />
<br />
Returns battery charging status.<br />
<br />
<source lang="C"><br />
// To verify<br />
#define SCE_POWER_ERROR_BATTERY_NOT_CONNECTED 0x802B0100<br />
#define SCE_POWER_ERROR_BATTERY_NOT_WORKING 0x802B0101<br />
<br />
#define SCE_BATTERY_STATUS_POWER_OFFLINE 0<br />
#define SCE_BATTERY_STATUS_CHARGING_NORMAL 1<br />
#define SCE_BATTERY_STATUS_CHARGE_FORBIDDEN 2<br />
#define SCE_BATTERY_STATUS_CHARGING_USB 3<br />
<br />
int scePowerGetBatteryChargingStatusForDriver(void);<br />
</source><br />
<br />
=== scePowerIsLowBatteryForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xD3075926<br />
|}<br />
<br />
=== scePowerIsSomethingBatteryForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x0D56C601<br />
|}<br />
<br />
Returns value from [[#SceSysconForDriver_ACEE1C70]].<br />
<br />
=== scePowerIsSomethingBattery2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x627A89C6<br />
|}<br />
<br />
return SceSysconForDriver_4A184B7C<br />
<br />
=== scePowerGetBatteryFullCapacityForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xFD18A0FF<br />
|}<br />
<br />
=== scePowerBatteryDisableUsbChargingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x90285886<br />
|}<br />
<br />
<source lang="c">int scePowerBatteryDisableUsbChargingForDriver(void);</source><br />
<br />
=== scePowerBatteryEnableUsbChargingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x733F973B<br />
|}<br />
<br />
<source lang="c">int scePowerBatteryEnableUsbChargingForDriver(void);</source><br />
<br />
=== scePowerBatteryForbidChargingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x166922EC<br />
|}<br />
<br />
<source lang="c">int scePowerBatteryForbidChargingForDriver(void);</source><br />
<br />
=== scePowerBatteryPermitChargingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xDD3D4DAC<br />
|}<br />
<br />
<source lang="c">int scePowerBatteryPermitChargingForDriver(void);</source><br />
<br />
=== scePowerBatteryStopUsbChargingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0xACC857A4<br />
|}<br />
<br />
<source lang="c">int scePowerBatteryStopUsbChargingForDriver(void);</source><br />
<br />
=== scePowerBatterySetUsbStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE4E3C316<br />
|}<br />
<br />
<source lang="c">int scePowerBatterySetUsbStatusForDriver(int unk);</source><br />
<br />
=== scePowerSetWakeupConditionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF535D928<br />
|}<br />
<br />
<source lang="c"><br />
// cond: 4: WlanBt related, 0x20: WlanBt related, 0x8000: USB charge<br />
int scePowerSetWakeupConditionForDriver(int cond, SceBool enable);<br />
</source><br />
<br />
=== scePowerWlanActivateForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6D2CA84B<br />
|}<br />
<br />
<source lang="C">int scePowerWlanActivateForDriver(void);</source><br />
<br />
=== scePowerWlanDeactivateForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x23BB0A60<br />
|}<br />
<br />
<source lang="C">int scePowerWlanDeactivateForDriver(void);</source><br />
<br />
=== ScePowerForDriver_2B51FE2F ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2B51FE2F<br />
|}<br />
<br />
A good name might be scePowerIsWlanActivatedForDriver, but it does not match NID using ScePowerForDriver NID suffix.<br />
<br />
<source lang="C">int ScePowerForDriver_2B51FE2F(void);</source><br />
<br />
=== ScePowerForDriver_C62B6164 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xC62B6164<br />
|}<br />
<br />
Gets some information about battery.<br />
<br />
=== ScePowerForDriver_8C0D2051 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8C0D2051<br />
|}<br />
<br />
Gets the battery status obtained using [[SceSyscon#SceSysconForDriver_A2FE9BF9]].<br />
<br />
Called by [[SceUdcd]] when SceUdcdAlarmTickTimer is triggered.<br />
<br />
<source lang="C">int ScePowerForDriver_8C0D2051(SceUInt32 *pResult);</source><br />
<br />
=== scePowerGetUsingWirelessProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x06AF03DB<br />
|}<br />
<br />
<source lang="C">int scePowerGetUsingWirelessProcForDriver(SceUID pid);</source><br />
<br />
=== scePowerSetUsingWlanProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x4A69163A<br />
|}<br />
<br />
=== scePowerGetUsingWlanProcForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x2784A6BD<br />
|}<br />
<br />
<source lang="C">int scePowerGetUsingWlanProcForDriver(SceUID pid);</source><br />
<br />
=== ScePowerForDriver_0D80B917 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x0D80B917<br />
|}<br />
<br />
Maybe related to [[#scePowerGetUsingWirelessProcForDriver]].<br />
<br />
<source lang="C">int ScePowerForDriver_0D80B917(SceUID pid);</source><br />
<br />
=== ScePowerForDriver_4159E0D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x4159E0D9<br />
|}<br />
<br />
=== ScePowerForDriver_5210A6FE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x5210A6FE<br />
|}<br />
<br />
=== ScePowerForDriver_661D670D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x661D670D<br />
|}<br />
<br />
=== ScePowerForDriver_991BDEAF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.03-3.60 || 0x991BDEAF<br />
|}<br />
<br />
<source lang="C"><br />
// idx: 0-7<br />
int ScePowerForDriver_991BDEAF(SceSize idx, SceUInt32 value);<br />
</source><br />
<br />
=== ScePowerForDriver_38415146 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.03-3.60 || 0x38415146<br />
|}<br />
<br />
Sets a global variable and sets global event flag 0x2000.<br />
<br />
Related to LED.<br />
<br />
<source lang="C">int ScePowerForDriver_38415146(SceBool enable);</source><br />
<br />
== SceLedForDriver ==<br />
<br />
=== sceLedSetModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xEA24BE03<br />
|}<br />
<br />
Maybe concerns DevKit LEDs as there are 8 LEDs, or maybe led=2 is PS button LED.<br />
<br />
<source lang="c"><br />
typedef struct SceLedConfiguration { // size is 0x14 on FW 3.60<br />
SceSize size; // Size of this structure<br />
SceUInt32 maybe_onTime; // ex: 2 (2 seconds)<br />
SceUInt32 maybe_offTime; // ex: 3 (3 seconds)<br />
SceInt32 timeLimit; // ex: 60 (60 seconds), -1 (infinite)<br />
SceUInt32 maybe_endOrStartBlinkState; // ex: 0 (OFF), 1 (ON)<br />
} SceLedConfiguration;<br />
<br />
#define SCE_LED_MODE_OFF 0 // Turn a LED OFF.<br />
#define SCE_LED_MODE_ON 1 // Turn a LED ON.<br />
#define SCE_LED_MODE_BLINK 2 // Set a blink event for a LED.<br />
#define SCE_LED_MODE_SELECTIVE_EXEC 3 // Register LED configuration commands and execute them. Still not completely known how that mode works.<br />
#define SCE_LED_MODE_UNK_4 4 // Only works with led = 2<br />
<br />
// ex:<br />
// uint32_t config_1[5] = {0x14, 2, 3, 0x3C, 0};<br />
// uint32_t config_2[5] = {0x14, 2, 3, -1, 0};<br />
// sceLedSetModeForDriver(1, 2, (SceLedConfiguration *)&config);<br />
// sceLedSetModeForDriver(3, 2, (SceLedConfiguration *)&config);<br />
<br />
// led: valid values are 0-7, 0: used in SceCamera, 1: used when sdstor read/write from SD, 3: used when sdstor read/write from MMC<br />
// mode: valid values are 0-4<br />
<br />
int sceLedSetModeForDriver(int led, int mode, SceLedConfiguration *pConfig);<br />
</source><br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceExcpmgr&diff=21160
SceExcpmgr
2024-03-25T19:23:25Z
<p>CelesteBlue: /* SMC calls */</p>
<hr />
<div>SceExcpmgr is a kernel module that sets up exception handling. A version exists in both non-secure and secure worlds. In non-secure world, after the kernel is booted up, the exception handlers pointed to by VBAR all jump into code in this module.<br />
<br />
== Module ==<br />
<br />
This module exists in both non-secure and secure world. The non-secure world SELF can be found in <code>os0:kd/excpmgr.skprx</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.931.010-3.740.011 || Non-secure || Kernel<br />
|-<br />
| 0.931.010-1.69 || Secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.931.010-3.610.011 || [[SceExcpmgr#SceExcpmgrForKernel|SceExcpmgrForKernel]] || Non-secure || Kernel || 0x4CA0FDD5<br />
|-<br />
| 3.630.011-3.740.011 || [[SceExcpmgr#SceExcpmgrForKernel|SceExcpmgrForKernel]] || Non-secure || Kernel || 0x1496A5B5<br />
|-<br />
| 0.931.010-1.80 || [[SceExcpmgr#SceExcpmgrForTZS|SceExcpmgrForTZS]] || Secure || Kernel || 0x8F526F35<br />
|}<br />
<br />
== Types ==<br />
<br />
<source lang="C"><br />
// All data in this structure are per-core (field_name[0] belongs to CPU0, field_name[1] to CPU1, etc)<br />
<br />
typedef struct _DBGBVC_save {<br />
SceUInt32 unk_0x00;<br />
SceUInt32 unk_0x04;<br />
SceUInt32 DBGBVR0;<br />
SceUInt32 DBGBCR0;<br />
SceUInt32 DBGBVR1;<br />
SceUInt32 DBGBCR1;<br />
SceUInt32 DBGBVR2;<br />
SceUInt32 DBGBCR2;<br />
SceUInt32 DBGBVR3;<br />
SceUInt32 DBGBCR3;<br />
SceUInt32 DBGBVR4;<br />
SceUInt32 DBGBCR4;<br />
} DBGBVC_save;<br />
<br />
typedef struct _DBGWVC_save {<br />
SceUInt32 unk_0x00;<br />
SceUInt32 unk_0x04;<br />
SceUInt32 DBGWVR0;<br />
SceUInt32 DBGWCR0;<br />
SceUInt32 DBGWVR1;<br />
SceUInt32 DBGWCR1;<br />
SceUInt32 DBGWVR2;<br />
SceUInt32 DBGWCR2;<br />
SceUInt32 DBGWVR3;<br />
SceUInt32 DBGWCR3;<br />
} DBGWVC_save;<br />
<br />
typedef struct _SceExcpmgrCB {<br />
// Incremented by the first exception handler, must be 1 when then decremented before returning from an exception.<br />
// If not, raise a nested exception kernel panic.<br />
SceUInt32 nestedExceptionCount[4];<br />
int unused[4]; // Seemingly unused<br />
void *ExcpStackTop[4]; // Stack size is 0x1000<br />
void *ExcpStackBottom[4];<br />
void *unk_0x40;<br />
DBGBVC_save *pDBGBVC_save;<br />
DBGWVC_save *pDBGWVC_save;<br />
} SceExcpmgrCB;<br />
<br />
// Exception handlers' prototype<br />
typedef void(SceExcpmgrExceptionHandler)(SceExcpmgrExceptionContext* context, SceExcpmgrExceptionHandlingCode code); //Prototype for non-zero priority handlers<br />
typedef void(SceExcpmgrPriority0ExceptionHandler)(void); //Prototype for priority 0 handlers<br />
<br />
// Parameter for the RegisterHandler/ReleaseHandler functions<br />
typedef struct __attribute__((aligned(4))) _SceExcpmgrExceptionHandlerContext {<br />
struct _SceExcpmgrExceptionHandlerContext *next; // Pointer to the next handler in the chain<br />
SceUInt32 must_be_zero; // Unused - probably required for alignement reasons<br />
// Code of the exception handler goes here.<br />
} SceExcpmgrExceptionHandlerContext;<br />
<br />
typedef struct SceArmWaypoint { //!< Size is 0x10-bytes<br />
SceUInt32 flags;<br />
SceUIntPtr prev_inst; // pc<br />
SceUIntPtr curr_inst; // target<br />
SceUInt32 event;<br />
} SceArmWaypoint;<br />
<br />
// Structure that holds the CPU's state at the moment when an exception was raised<br />
typedef struct _SceExcpmgrExceptionContext { //!< Size is 0x400 on FW 3.60<br />
SceUInt32 r0;<br />
SceUInt32 r1;<br />
SceUInt32 r2;<br />
SceUInt32 r3;<br />
SceUInt32 r4;<br />
SceUInt32 r5;<br />
SceUInt32 r6;<br />
SceUInt32 r7;<br />
SceUInt32 r8;<br />
SceUInt32 r9;<br />
SceUInt32 r10;<br />
SceUInt32 r11;<br />
SceUInt32 r12;<br />
SceUInt32 sp;<br />
SceUInt32 lr;<br />
SceUInt32 pc; // address of faulting instruction (+4)<br />
SceExcpmgrExceptionCode excode;<br />
SceUInt32 SPSR;<br />
SceUInt32 CPACR;<br />
SceUInt32 FPSCR;<br />
SceUInt32 FPEXC;<br />
SceUInt32 CONTEXTIDR;<br />
SceUInt32 TPIDRURW;<br />
SceUInt32 TPIDRURO;<br />
SceUInt32 TPIDRPRW;<br />
SceUInt32 TTBR1;<br />
SceUInt32 unused68;<br />
SceUInt32 DACR;<br />
SceUInt32 DFSR;<br />
SceUInt32 IFSR;<br />
SceUInt32 DFAR;<br />
SceUInt32 IFAR;<br />
SceUInt32 PAR;<br />
SceUInt32 TEEHBR;<br />
SceUInt32 PMCR;<br />
SceUInt32 PMCNTENSET;<br />
SceUInt32 PMCNTENSET_2; //<! Second copy of PMCNTENSET<br />
SceUInt32 PMSELR;<br />
SceUInt32 PMCCNTR;<br />
SceUInt32 PMUSERENR;<br />
SceUInt32 PMXEVTYPER0;<br />
SceUInt32 PMXEVCNTR0;<br />
SceUInt32 PMXEVTYPER1;<br />
SceUInt32 PMXEVCNTR1;<br />
SceUInt32 PMXEVTYPER2;<br />
SceUInt32 PMXEVCNTR2;<br />
SceUInt32 PMXEVTYPER3;<br />
SceUInt32 PMXEVCNTR3;<br />
SceUInt32 PMXEVTYPER4;<br />
SceUInt32 PMXEVCNTR4;<br />
SceUInt32 PMXEVTYPER5;<br />
SceUInt32 PMXEVCNTR5;<br />
SceUInt32 unusedD0;<br />
SceUInt32 unkD4; //<! Comes from SceVfpIntRegs memblock<br />
SceUInt32 DBGSCRext;<br />
SceUInt32 unusedDC[9]; <br />
SceUInt64 VFP_registers[32]; //<! Content of floating-point registers d0-d31<br />
SceArmWaypoint waypoint[0x20]; //<! Comes from SceVfpIntRegs memblock<br />
} SceExcpmgrExceptionContext;<br />
<br />
typedef enum {<br />
// For all codes != 3, calling the last handler in the chain should call sceKernelSysrootReturnFromExcpToThreadForKernel and return properly<br />
SCE_EXCPMGR_EXCEPTION_HANDLING_CODE_0 = (int16_t)0,<br />
SCE_EXCPMGR_EXCEPTION_HANDLING_CODE_1 = (int16_t)1,<br />
SCE_EXCPMGR_EXCEPTION_HANDLING_CODE_2 = (int16_t)2,<br />
// If this code reaches the last handler in the chain, calls SceDebugForKernel_082B8D6A then loops infinitely<br />
SCE_EXCPMGR_EXCEPTION_NOT_HANDLED_FATAL = (int16_t)3,<br />
SCE_EXCPMGR_EXCEPTION_HANDLING_CODE_4 = (int16_t)4<br />
} SceExcpmgrExceptionHandlingCode;<br />
<br />
typedef enum {<br />
SCE_EXCPMGR_EXCEPTION_CODE_RESET = 0, // Reset<br />
SCE_EXCPMGR_EXCEPTION_CODE_UNDEF = 1, // Undefined Instruction<br />
SCE_EXCPMGR_EXCEPTION_CODE_SVC = 2, // Supervisor Call<br />
SCE_EXCPMGR_EXCEPTION_CODE_PABT = 3, // Prefetch Abort<br />
SCE_EXCPMGR_EXCEPTION_CODE_DABT = 4, // Data Abort<br />
SCE_EXCPMGR_EXCEPTION_CODE_RESERVED = 5, // Reserved<br />
SCE_EXCPMGR_EXCEPTION_CODE_IRQ = 6, // Interrupt<br />
SCE_EXCPMGR_EXCEPTION_CODE_FIQ = 7, // Fast Interrupt<br />
} SceExcpmgrExceptionCode;<br />
<br />
typedef struct SceExcpmgrRegistersSave { // Size is at least 0x194 on FW 0.931<br />
SceUInt32 FPEXC; // -0x190<br />
SceUInt32 FPSCR; // -0x18C<br />
SceUInt32 unk_0x188; // -0x188<br />
SceUInt32 unk_0x88[64]; // -0x88<br />
SceUInt32 unk_0x84; // -0x84<br />
SceUInt32 TPIDRURO; // -0x80<br />
SceUInt32 TPIDRPRW; // -0x7C<br />
SceUInt32 unk_0x78; // -0x78<br />
SceUInt32 unk_0x74; // -0x74<br />
SceUInt32 context_id; // -0x70<br />
SceUInt32 unk_0x6C; // -0x6C<br />
SceUInt32 unk_0x68; // -0x68<br />
SceUInt32 unk_0x64; // -0x64<br />
SceUInt32 unk_0x60; // -0x60<br />
SceUInt32 unk_0x5C; // -0x5C<br />
SceUInt32 unk_0x58; // -0x58<br />
SceUInt32 unk_0x54; // -0x54<br />
SceUInt32 unk_0x50; // -0x50<br />
SceUInt32 unk_0x4C; // -0x4C<br />
SceUInt32 unk_0x48; // -0x48<br />
SceUInt32 r0; // -0x44<br />
SceUInt32 r1;<br />
SceUInt32 r2;<br />
SceUInt32 r3;<br />
SceUInt32 r4;<br />
SceUInt32 r5;<br />
SceUInt32 r6;<br />
SceUInt32 r7;<br />
SceUInt32 r8;<br />
SceUInt32 r9;<br />
SceUInt32 r10;<br />
SceUInt32 r11;<br />
SceUInt32 r12;<br />
SceUInt32 sp;<br />
SceUInt32 lr;<br />
SceUInt32 pc;<br />
SceUInt32 CPSR; // -0x4<br />
SceUInt32 unk_0; // -0x0<br />
} SceExcpmgrRegistersSave;<br />
</source><br />
<br />
== Exceptions ==<br />
<br />
At coldboot startup, VBAR is set to 0x51000000. As kernel modules are loaded, SceExcpmgr's module_bootstart updates the VBAR according to the CPU core.<br />
<br />
<code>set_vbar(sceKernelSysrootGetVbaseResetVector() + sceKernelCpuId() * 0x40);</code><br />
<br />
Note - VbaseResetVector consists of 0x120-bytes.<br />
<br />
<source lang="C"><br />
typedef struct _SceKernelVbaseResetVector { // size is 0x120-bytes on 3.60~3.74.<br />
struct {<br />
SceUInt32 instr[8];<br />
void *unk_0x20;<br />
void *unk_0x24; // seems thread stack<br />
void *unk_0x28;<br />
void *unk_0x2C;<br />
SceUInt32 padding[4];<br />
} core[4];<br />
void *handler[8];<br />
} SceKernelVbaseResetVector;<br />
</source><br />
<br />
=== Context ===<br />
<br />
If you handle with priority 0 these contexts are not applied.<br />
<br />
<source><br />
CPACR <- 0xF00000<br />
fpexc <- 0x40000000<br />
<br />
DBGBCR0 <- 0<br />
DBGBCR1 <- 0<br />
DBGBCR2 <- 0<br />
DBGBCR3 <- 0<br />
DBGBCR4 <- 0<br />
DBGBCR5 <- 0<br />
<br />
DBGWCR0 <- 0<br />
DBGWCR1 <- 0<br />
DBGWCR2 <- 0<br />
DBGWCR3 <- 0<br />
<br />
CONTEXTIDR <- 0<br />
TTBR1 <- ?<br />
CONTEXTIDR <- ? (could be restore)<br />
<br />
DACR <- 0x15450000<br />
<br />
TPIDRPRW <- 0<br />
TPIDRURO <- 0<br />
</source><br />
<br />
=== Registered exception handler by PSP2 Kernel ===<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! excode<br />
! priority<br />
! module<br />
! descrption<br />
|-<br />
| rowspan="2" | Reset (0)<br />
| 7<br />
| SceExcpmgr<br />
| sceKernelDefaultHandlerReset<br />
|-<br />
<!-- | Reset (0) --><br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|-<br />
| rowspan="7" | Undef (1)<br />
| 0<br />
| SceExcpmgr<br />
| Setup the excp context.<br />
|-<br />
<!-- | Undef (1) --><br />
| 2<br />
| SceDeci4pSDfMgr<br />
| Decide whether to return to the excp point or continue with the exception after calling some callback.<br />
|-<br />
<!-- | Undef (1) --><br />
| 4<br />
| SceKernelThreadMgr<br />
| -<br />
|-<br />
<!-- | Undef (1) --><br />
| 5<br />
| SceDeci4pDbgp<br />
| Save information about the exception and continue with the exception.<br />
|-<br />
<!-- | Undef (1) --><br />
| 6<br />
| SceKernelThreadMgr<br />
| -<br />
|-<br />
<!-- | Undef (1) --><br />
| 7<br />
| SceExcpmgr<br />
| sceKernelPanicHandlerUndef<br />
|-<br />
<!-- | Undef (1) --><br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|-<br />
| rowspan="3" | Svc (2)<br />
| 0<br />
| SceKernelIntrMgr<br />
| svc handler<br />
|-<br />
<!-- | Svc (2) --><br />
| 7<br />
| SceExcpmgr<br />
| sceKernelDefaultHandlerSvc<br />
|-<br />
<!-- | Svc (2) --><br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|-<br />
| rowspan="7" | Pabt (3)<br />
| 0<br />
| SceExcpmgr<br />
| Setup the excp context.<br />
|-<br />
<!-- | Pabt (3) --><br />
| 2<br />
| SceDeci4pSDfMgr<br />
| Decide whether to return to the excp point or continue with the exception after calling some callback.<br />
|-<br />
<!-- | Pabt (3) --><br />
| 4<br />
| SceKernelThreadMgr<br />
| -<br />
|-<br />
<!-- | Pabt (3) --><br />
| 5<br />
| SceDeci4pDbgp<br />
| Save information about the exception and continue with the exception.<br>Also, if the crashed address is a specific instruction, some callbacks will be called.<br />
|-<br />
<!-- | Pabt (3) --><br />
| 6<br />
| SceKernelThreadMgr<br />
| -<br />
|-<br />
<!-- | Pabt (3) --><br />
| 7<br />
| SceExcpmgr<br />
| sceKernelDefaultHandlerPabt<br />
|-<br />
<!-- | Pabt (3) --><br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|-<br />
| rowspan="7" | Dabt (4)<br />
| 0<br />
| SceExcpmgr<br />
| Setup the excp context.<br />
|-<br />
<!-- | Dabt (4) --><br />
| 2<br />
| SceDeci4pSDfMgr<br />
| Decide whether to return to the excp point or continue with the exception after calling some callback.<br />
|-<br />
<!-- | Dabt (4) --><br />
| 4<br />
| SceKernelThreadMgr<br />
| -<br />
|-<br />
<!-- | Dabt (4) --><br />
| 5<br />
| SceDeci4pDbgp<br />
| Save information about the exception and continue with the exception.<br />
|-<br />
<!-- | Dabt (4) --><br />
| 6<br />
| SceKernelThreadMgr<br />
| -<br />
|-<br />
<!-- | Dabt (4) --><br />
| 7<br />
| SceExcpmgr<br />
| sceKernelDefaultHandlerDabt<br />
|-<br />
<!-- | Dabt (4) --><br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|-<br />
| rowspan="2" | Reserved (5)<br />
| 7<br />
| SceExcpmgr<br />
| sceKernelDefaultHandlerReserved<br />
|-<br />
<!-- | Reserved (5) --><br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|-<br />
| rowspan="3" | Irq (6)<br />
| 0<br />
| SceKernelIntrMgr<br />
| intr handler<br />
|-<br />
<!-- | Irq (6) --><br />
| 7<br />
| SceExcpmgr<br />
| sceKernelDefaultHandlerIrq<br />
|-<br />
<!-- | Irq (6) --><br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|-<br />
| Fiq (7)<br />
| Lowest<br />
| SceExcpmgr<br />
| sceKernelDefaultHandler<br />
|}<br />
<br />
=== SVC ===<br />
<br />
SVC (Supervisor Call), more commonly called [[Syscalls]] (system calls), is what allows to interact with non-secure [[Kernel]] from usermode.<br />
<br />
The SVC interface is defined in non-secure [[Kernel]] as:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Register<br />
! Value<br />
|-<br />
| R0<br />
| First argument<br />
|-<br />
| R1<br />
| Second argument<br />
|-<br />
| R2<br />
| Third argument<br />
|-<br />
| R3<br />
| Fourth argument<br />
|-<br />
| R12<br />
| Syscall number<br />
|}<br />
<br />
On return, R1-R3 and R12 are cleared to 0x0 or 0xDEADBEEF to prevent any data leaks. All usermode pointers passed to syscalls are accessed with ARM instructions LDRT and STRT for hardware forced permission checks. Syscalls 0x0 - 0xFF are likely a "fastcall" interface that do not mask interrupts or set the DACR, however currently are no such fastcalls defined. Syscalls 0x100 - 0xFFF are made with IRQ interrupts masked and DACR set to 0xFFFF0000 (to prevent access to certain memory domains). Any other syscall numbers are invalid.<br />
<br />
System calls are handled in "system" mode defined in ARMv7 (mode 0b11111).<br />
<br />
Usermode exported functions loaded by [[SceKernelModulemgr]] are exported as syscalls. The number assigned to the syscall are randomized with respect to each library but not within a library. That means, for example, two functions exported by a library will always be some syscall number apart even though that number will change on each boot.<br />
<br />
There is no SVC in secure world because all code in secure world is running as kernel.<br />
<br />
=== SMC ===<br />
<br />
SMC (Secure Monitor Call) is what allows to interact with ARM [[TrustZone]] from non-secure kernel.<br />
<br />
The SMC interface for making a non-secure kernel call to [[TrustZone]] is:<br />
{| class="wikitable"<br />
|-<br />
! Register<br />
! Value<br />
|-<br />
| R0<br />
| First argument<br />
|-<br />
| R1<br />
| Second argument<br />
|-<br />
| R2<br />
| Third argument<br />
|-<br />
| R3<br />
| Fourth argument<br />
|-<br />
| R12<br />
| SMC number<br />
|}<br />
<br />
The SMC interface is very similar to the SVC interface. The SMC handler and MVBAR is set up in [[TrustZone]] by [[#SceExcpmgrForTZS|SceExcpmgrForTZS]].<br />
<br />
0x0 - 0xFF are fast service calls. 0x100 - 0xFFF are normal service calls ran with IRQs masked.<br />
<br />
Secure services are ran in ARM system processor mode (0b11111) in [[TrustZone]].<br />
<br />
SMC calls are registered by [[SceKernelIntrMgr#SceIntrmgrForTZS|SceIntrmgrForTZS]] functions.<br />
<br />
==== SMC calls ====<br />
<br />
{| class="wikitable"<br />
|-<br />
! Number<br />
! Module<br />
! Arguments<br />
! Notes<br />
|-<br />
| 0x101<br />
|<br />
| <source lang="C">int AllocSharedMemory_S(void *pPA, SceSize size);</source><br />
| <code>SCE_MONCALL_SET_SHARED_MEMORY</code> - Sets the physical address of the shared memory area for Secure kernel<br />
|-<br />
| 0x103<br />
|<br />
| <source lang="C">int FreeSharedMemory_S(void);</source><br />
| <code>SCE_MONCALL_UNMAP_KBL</code> - Frees the allocation of virtual ranges <code>0x40000000</code>-<code>0x40100000</code>, <code>0x50000000</code>-<code>0x51000000</code> and <code>0x51000000</code>-<code>0x52000000</code> with UID 0x10007 in Secure state kernel. This does not affect Non-Secure state kernel. Called by SysStateMgr when "''Unmapping Secure KBL''".<br />
|-<br />
| 0x104<br />
|<br />
| <source lang="C">int PervasiveAccessMode(int mode, SceBool cmd);</source><br />
| cmd: 0 clear, 1 set<br />
|-<br />
| 0x105<br />
|<br />
| <source lang="C">int TASAccessMode(int mode, SceBool cmd);</source><br />
| cmd: 0 clear, 1 set<br />
|-<br />
| 0x106<br />
|<br />
| <source lang="C">int Pervasive2AccessMode(int mode, SceBool cmd);</source><br />
| cmd: 0 clear, 1 set<br />
|-<br />
| 0x107<br />
|<br />
| <source lang="C">int RegbusAccessMode(int mode, SceBool cmd);</source><br />
| cmd: 0 clear, 1 set<br />
|-<br />
| 0x10A<br />
|<br />
| <source lang="C">int GetGrabCmpMap(int index);</source><br />
| Gets GRAB Compatibility Map.<br />
|-<br />
| 0x10B<br />
|<br />
| <source lang="C">int SetGrabCmpMap(int index, int map);</source><br />
| Sets GRAB Compatibility Map.<br />
|-<br />
| 0x10C<br />
| [[SceKernelBusError]]<br />
| <source lang="C">int BusErrorDump(void);</source><br />
| Used by [[SceKernelBusError]] when a bus error is handled, just before getting bus error info. Writes bus registers to (shared memory + 0x4000).<br />
|-<br />
| 0x10D<br />
| [[SceKernelBusError]]<br />
| <source lang="C">int BusErrorDump2(void);</source><br />
| Used by [[SceKernelBusError]] when a bus error is handled, just before getting bus error info. Writes bus registers to (shared memory + 0x6000). Replacement of SMC 0x10C that writes to offset 0x6000 instead of 0x4000 and calls sceKernelDcacheCleanInvalidateRange before returning.<br />
|-<br />
| 0x10E<br />
| [[SceKernelBusError]]<br />
| <source lang="C">int BusErrorClear(void);</source><br />
| On FW 0.931, prints a tree of all bus states. On FW 3.60, does nothing and return 0.<br />
|-<br />
| 0x10F<br />
|<br />
| <source lang="C">int smc_ple_flush_kill_and_l1_dcache_clean_invalidate_all(void);</source><br />
| Flushes (and kills if there is activity) the PLE (Preload Engine) and then cleans and invalidates all the L1 Dcache.<br />
|-<br />
| 0x110<br />
| [[SceDriverTzs]]<br />
| <source lang="C">int smc_bus_set_state(int bus, int command);</source><br />
| bus: 1 -> used by [[SceEnumWakeUp]], 2 -> used to enable/disable some things used by the PSP Emulator; maybe CPU, or memory for example. Command: 0 (stop), 1 (start), 2 (LCD DMAC init).<br />
|-<br />
| 0x111<br />
| [[SceDriverTzs]]<br />
| <br />
| Related to bus.<br />
|-<br />
| 0x113<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_bus_clk_gate_switch(ScePVoid *pPervasiveGateBase, SceBool enable);</source><br />
| <br />
|-<br />
| 0x114<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_bus_freq_op(SceUInt32 op, SceUInt32 freq_level);</source><br />
| op: 0 - Set bus frequency, 1 - Get bus frequency, 2 - Set GPU Xbar frequency, 3 - Get GPU Xbar frequency<br />
|-<br />
| 0x117<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_cdram_enable(void);</source><br />
| Seems to enable the CDRAM (by using the [[Physical Memory|SceEmcTop]] registers).<br />
|-<br />
| 0x118<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_cdram_enter_self_resresh(void);</source><br />
| Enter CDRAM self-refresh mode. The <code>resresh</code> typo is in SCE name.<br />
|-<br />
| 0x119<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_cdram_exit_self_resresh(void);</source><br />
| Exit CDRAM self-refresh mode. The <code>resresh</code> typo is in SCE name.<br />
|-<br />
| 0x11A<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int sceSysconSetPowerMode(int type, int mode);</source><br />
| Set power mode. See [[SceSyscon#sceSysconSetPowerModeForDriver|sceSysconSetPowerModeForDriver]].<br />
|-<br />
| 0x11B<br />
| [[SceDriverTzs]]<br />
| <source lang="C">int smc_0x11B(int mode, SceBool cmd);</source><br />
| mode: must be < 0x1000, cmd: 0 set, 1 clear<br />
|-<br />
| 0x11C<br />
| [[SceDriverTzs]]<br />
| <source lang="C">int smc_0x11C(SceUInt32 handle, SceInt32 value);</source><br />
| Used by [[SceLowio#SceGrabForDriver_188BBCC8]].<br />
|-<br />
| 0x11D<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int sceGrabSetCmpMap(int bank, void *pPA);</source><br />
| Valid banks: 0-7, and physical addresses: <code>0x20000000</code>-<code>0x2FFFFFFF</code> and <code>0x42800000</code>-<code>0x7FFFFFFF</code>.<br />
|-<br />
| 0x11E<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_compat_set_state_ex(int command, int ex);</source><br />
| Replacement for SMC 0x110. Used to enable/disable some things used by the PSP Emulator. Maybe the CPU, or memory for example. Command: 0 (stop), 1 (start), 2 (LCD DMAC init). Ex is only used for start (maybe for resume/suspend).<br />
|-<br />
| 0x11F<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_0x11F(int unk);</source><br />
| Valid unk: 1-3. Waits something like a semaphore.<br />
|-<br />
| 0x120<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_compat_get_memory_bank_start_paddr(int bank);</source><br />
| Valid banks 0-7.<br />
|-<br />
| 0x121<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int smc_0x121(int bank1, int bank2);</source><br />
| Valid banks 0-7.<br />
|-<br />
| 0x122<br />
| [[SceDriverTzs]]<br />
| <source lang="c">int sceCrashDumpMonitorCall(int type, void *pTTBR0, void *pVBAR, void *pSysroot);</source><br />
| type: 0 (exception), 1 (panic_or_assertion_failed), 2 (bus error)<br />
|-<br />
| 0x12D<br />
|<br />
| <source lang="C">int sceSblSmSchedInvoke(SceBool priority, void *sm_self_paddr, SceUInt32 num_pa_range, SceSblTzsBridgeArgArea area);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyInvokeForKernel|sceSblSmSchedProxyInvokeForKernel]].<br />
|-<br />
| 0x12E<br />
|<br />
| <source lang="C">int sceSblSmSchedWait(SceSmSchedRequestId req_id, SceSblTzsBridgeArgArea area);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyWaitForKernel|sceSblSmSchedProxyWaitForKernel]].<br />
|-<br />
| 0x12F<br />
|<br />
| <source lang="C">int sceSblSmSchedGetStatus(SceSmSchedRequestId req_id, SceSblTzsBridgeArgArea area);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyGetStatusForKernel|sceSblSmSchedProxyGetStatusForKernel]].<br />
|-<br />
| 0x130<br />
|<br />
| <source lang="C">int sceSblSmSchedKill(SceSmSchedRequestId req_id);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyKillForKernel|sceSblSmSchedProxyKillForKernel]].<br />
|-<br />
| 0x131<br />
|<br />
| Reserved (on FWs 0.931-3.60).<br />
| <br />
|-<br />
| 0x132<br />
|<br />
| Reserved (on FWs 0.931-3.60).<br />
| <br />
|-<br />
| 0x133<br />
|<br />
| <source lang="C">int smc_sm_sched_proxy_call_func(SceSmSchedRequestId req_id, int mailbox_id, SceUInt32 mailval);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyCallFuncForKernel|sceSblSmSchedProxyCallFuncForKernel]]. <code>mailval</code> is <code>paddr(SceSblSmschedCallFuncCommand) | 1</code>.<br />
|-<br />
| 0x134<br />
|<br />
| <source lang="C">int sceSblSmSchedReadArm2Cry(SceSmSchedRequestId req_id, int mailbox_id, SceUInt32 *pMailval);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyReadArm2CryForKernel|sceSblSmSchedProxyReadArm2CryForKernel]].<br />
|-<br />
| 0x135<br />
|<br />
| <source lang="C">int sceSblSmSchedWriteArm2Cry(SceSmSchedRequestId req_id, int mailbox_id, SceUInt32 mailval);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyWriteArm2CryForKernel|sceSblSmSchedProxyWriteArm2CryForKernel]].<br />
|-<br />
| 0x136<br />
|<br />
| <source lang="C">int sceSblSmSchedWriteCry2Arm(SceSmSchedRequestId req_id, int mailbox_id, SceUInt32 mailval);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyWriteCry2ArmForKernel|sceSblSmSchedProxyWriteCry2ArmForKernel]].<br />
|-<br />
| 0x137<br />
|<br />
| <source lang="C">int sceSblSmSchedReadCry2Arm(SceSmSchedRequestId req_id, int mailbox_id, SceUInt32 *pMailval);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyReadCry2ArmForKernel|sceSblSmSchedProxyReadCry2ArmForKernel]].<br />
|-<br />
| 0x138<br />
|<br />
| <source lang="C">int sceSblSmSchedRegisterIntrHandler(SceSmSchedRequestId req_id, int mailbox_id);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyRegisterIntrHandlerForKernel|sceSblSmSchedProxyRegisterIntrHandlerForKernel]].<br />
|-<br />
| 0x139<br />
|<br />
| <source lang="C">int sceSblSmSchedReleaseIntrHandler(SceSmSchedRequestId req_id, int mailbox_id);</source><br />
| Used by [[SceSblSmschedProxy#sceSblSmSchedProxyReleaseIntrHandlerForKernel|sceSblSmSchedProxyReleaseIntrHandlerForKernel]].<br />
|-<br />
| 0x13A<br />
|<br />
| <source lang="c">int smc_sm_sched_proxy_enable_all_cry2arm_interrupts(SceSmSchedRequestId req_id, int mailbox_id, SceSblTzsBridgeArgArea area);</source><br />
| Interrupt Cry2Arm set enable.<br />
|-<br />
| 0x13B<br />
|<br />
| <source lang="c">int smc_sm_sched_proxy_uninitialize(void);</source><br />
| Interrupt Cry2Arm clear enable. Used by [[SceSblSmschedProxy#sceSblSmSchedProxyUninitializeForKernel|sceSblSmSchedProxyUninitializeForKernel]].<br />
|-<br />
| 0x13C<br />
|<br />
| <source lang="c">int smc_sm_sched_proxy_execute_sk_command(sk_cmd_index cmd_index);</source><br />
| Executes a [[Secure_Kernel#Secure_Kernel_Commands|Secure Kernel command]]. Used by [[SceSblSmschedProxy#sceSblSmSchedProxyExecuteSKCommandForKernel|sceSblSmSchedProxyExecuteSKCommandForKernel]].<br />
|-<br />
| 0x168<br />
|<br />
| <source lang="c">int smc_0x168_dmac(int index, int value);</source><br />
| SceDmacmgrDmac related. Writes <code>value</code> to SceDmacmgrDmac<code>N</code> + <code>0x100</code>. Maybe key_id related.<br />
|-<br />
| 0x169<br />
|<br />
| <source lang="c">int smc_0x169_dmac(int index, int value);</source><br />
| SceDmacmgrDmac related. Writes <code>value</code> to SceDmacmgrDmac<code>N</code> + <code>0x104</code>. Maybe key_id related.<br />
|-<br />
| 0x16A<br />
|<br />
| <source lang="c">int smc_l2_write_control_register(int value);</source><br />
| Flushes and invalidates the entire L2 Cache (Clean and Invalidate by Way with <code>way = 0xFFFF</code>, offset <code>0x7FC</code>), then performs an L2 Cache Sync (offset <code>0x730</code>), and finally writes <code>value</code> to the L2 Control Register (offset <code>0x100</code>). Maybe related to PL310 Erratum 588369 (<code>Clean and invalidate maintenance operations do not invalidate clean lines</code>).<br />
|-<br />
| 0x16B<br />
|<br />
| <source lang="c">int smc_l2_write_auxiliary_control_register(int value);</source><br />
| Writes <code>value</code> to the L2 Auxiliary Control Register (offset <code>0x104</code>).<br />
|}<br />
<br />
=== Aborts ===<br />
<br />
On development units, data and prefetch aborts can handle <code>BKPT</code> instruction for software breakpoints. [[SceDebug]] uses this to handle usermode breakpoints. There is no built-in support for <code>BKPT</code> in kernel code.<br />
<br />
[[SceSysmem]] uses data aborts with the <code>LDRT</code> and <code>STRT</code> instructions to implement usermode pointer checking. When LDRT/STRT throws a MMU data exception because of an invalid access and the exception came from [[SceSysmem#sceKernelCopyFromUserForDriver]] or [[SceSysmem#sceKernelCopyToUserForDriver]] or related functions, the data abort handler will resume execution.<br />
<br />
=== IRQ ===<br />
<br />
IRQs are only handled in non-secure world. An IRQ in secure world is fatal. See [[SceKernelIntrMgr]].<br />
<br />
=== FIQ ===<br />
<br />
FIQs are only handled in secure world because of the bit set in the SCR. Because of this, it is likely that secure devices such as [[Cmep]] use FIQs to communicate with the Cortex A9 cores. See [[SceKernelIntrMgr]].<br />
<br />
== Built-in handlers behaviour ==<br />
SceExcpmgr is mostly responsible for providing a facility that allows installing exception handlers to other modules. However, it also installs exception handlers by itself.<br />
<br />
SceExcpmgr registers an infinite loop as the default exception handler in <code>module_start</code>. For RESET, SVC, RESERVED and IRQ, another infinite loop handler will be installed at priority 7.<br />
<br />
SceExcpmgr also installs a priority 7 handler for PABT, DABT and UNDEF. As specified in the [[SceExcpmgr#Types|Types section]], those handlers will panic the kernel if they receive <br />
either <code>SCE_EXCPMGR_EXCEPTION_NOT_HANDLED_FATAL</code> or <code>SCE_EXCPMGR_EXCEPTION_HANDLING_CODE_4</code> as their handling code parameter, infinite loop if nested exception count is greater than 1, and call [[SceSysmem#sceKernelSysrootReturnFromExcpToThreadForKernel|sceKernelSysrootReturnFromExcpToThreadForKernel]] otherwise.<br />
<br />
In addition to this, SceExcpmgr installs a priority 0 handler for PABT, DABT and UNDEF.<br />
Those three have a common behaviour: building the <code>SceExcpmgrExceptionContext</code>, incrementing the nested exception count, clearing some CP14 control registers if needed, loading the <code>SceProcessContext</code> provided by [[SceSysmem#SceSysrootForKernel_118657C6|SceSysrootForKernel_118657C6]], setting DACR to 0x15450000 (not done in System Software version 0.990.030), zero'ing out <code>TPIDRPRW</code> and <code>TPIDRURO</code>, and calling a per-handler callback. The CP14 registers that get zero'ed out are the breakpoint control registers (<code>DBGBCR0</code>-<code>DBGBCR5</code>) if a non-NULL pointer has been provided to [[SceExcpmgr#SceExcpmgrForKernel_A66DDFA3|SceExcpmgrForKernel_A66DDFA3]], and the watchpoint control registers (<code>DBGWCR0</code>-<code>DBGWCR3</code>) if a non-NULL pointer has been provided to [[SceExcpmgr#SceExcpmgrForKernel_4FF90618|SceExcpmgrForKernel_4FF90618]].<br />
<br />
=== PABT handler ===<br />
<br />
The PABT handler performs no additional work and merely transfers control to the next exception handler in chain.<br />
<br />
=== UNDEF handler ===<br />
<br />
In System Software version 0.990.030, the UNDEF handler performs no additional work and merely transfers control to the next exception handler in chain.<br />
<br />
Since System Software version ?.??, the UNDEF handler will check if the instruction that caused the exception is a <code>MCRR p15, 0, Rt, Rt2, c11</code>, in which case it will be replaced with a <code>NOP</code> before execution is resumed at the faulting instruction (which is now a <code>NOP</code>).<br />
Otherwise, control is transferred to the next exception handler in chain. According to the ARM Cortex-A9 TRM, this MCRR instruction is used to program the ''Preload Engine'' channels.<br />
<br />
=== DABT handler ===<br />
<br />
The DABT handler is responsible for handling aborts in the [[SceSysmem#sceKernelGetVmaccessRangeForKernel|Vmaccess routines]].<br />
If such an exception has not happened, control is transferred to the next exception handler in chain.<br />
<br />
==== Old Vmaccess model ====<br />
<br />
In System Software revision 0.931.010 and earlier, the Vmaccess functions follow this pattern:<br />
<source lang="armasm"><br />
CopyFromUser32:<br />
ldrt r2, [r0] @or any load from kernel/user<br />
str r2, [r1] @or any store to kernel/user<br />
mov r0, 0 @Return value = SCE_OK<br />
cpy r0, r0<br />
cpy r0, r0 @nop<br />
bx lr<br />
</source><br />
<br />
If an invalid (user) pointer was provided to this function, a Data Abort would occur on the checked instruction (in this case, <code>ldrt</code>).<br />
<br />
When an exception occurs, if the CPU is in ARM mode and <code>pc</code> belongs in the old model Vmaccess range, the DABT handler will set <code>r0 = 0x80022005</code> (SCE_KERNEL_ERROR_INVALID_MEMORY_ACCESS) in the exception context then resume execution 'three instructions after the faulting one', in the <code>nop</code>sled (in modern firmwares, only one instruction is skipped instead of 3).<br />
The caller thus see the function failed as it returned an error code (SCE_KERNEL_ERROR_INVALID_MEMORY_ACCESS).<br />
<br />
In recent firmwares, the old Vmaccess range must be explicitely set via a call to [[SceExcpmgr#SceExcpmgrForKernel_C45C0D3D|SceExcpmgrForKernel_C45C0D3D]] instead of being fetched during the call to [[SceSysmem#sceKernelGetVmaccessRangeForKernel|sceKernelGetVmaccessRange]].<br />
<br />
==== New Vmaccess model ====<br />
<br />
Since System Software revision 0.940, this model has been progressively phased out and replaced with a new Vmaccess model.<br />
<br />
Under the new model, the Vmaccess functions all begin by loading the address of a function in <code>r12</code> but no longer have to follow a specific pattern.<br />
When an exception occurs, if the CPU is in ARM mode and the instruction at <code>pc</code> is a checked memory access instruction (i.e. one of {<code>strt</code>, <code>strht</code>, <code>strbt</code>, <code>ldrt</code>, <code>ldrht</code>, <code>ldrbt</code>, <code>ldrsht</code>, <code>strsbt</code>}), execution is resumed at the address pointed to by <code>r12</code>. The address loaded in <code>r12</code> points to a snippet that cleans the stack if needed then returns SCE_KERNEL_ERROR_INVALID_MEMORY_ACCESS.<br />
<br />
Note that if the old and new model ranges overlap, the latter takes priority.<br />
This means that exceptions raised from code residing in the overlap will be handled under the new model.<br />
<br />
If the DABT or UNDEF handlers return, CP14 registers are restored from either the global variables set previously by [[SceExcpmgr#SceExcpmgrForKernel_4FF90618|SceExcpmgrForKernel_4FF90618]] and [[SceExcpmgr#SceExcpmgrForKernel_A66DDFA3|SceExcpmgrForKernel_A66DDFA3]], or interrupted thread's TPIDRPRW->0x18->0xC if the TPIDRPRW is non-NULL. If no breakpoint restore structure has been provided to [[SceExcpmgr#SceExcpmgrForKernel_A66DDFA3|SceExcpmgrForKernel_A66DDFA3]], then watchpoints will not be restored regardless of whether something was provided to [[SceExcpmgr#SceExcpmgrForKernel_4FF90618|SceExcpmgrForKernel_4FF90618]] or not.<br />
<br />
== Non-exported functions ==<br />
<br />
The following table contains offsets (from the base of <code>.text</code>/segment 0) to non-exported functions whose name is known:<br />
{| class="wikitable" <br />
|-<br />
! Function name<br />
! 0.990.030<br />
! 3.600.011 CEX<br />
|-<br />
| sceKernelDefaultHandlerCfunc<br />
| 0x2138<br />
| 0x1D4C<br />
|-<br />
| sceKernelDefaultHandlerResetCfunc<br />
| 0x21A8<br />
| 0x1D50<br />
|-<br />
| sceKernelDefaultHandlerSvcCfunc<br />
| 0x21D0<br />
| 0x1D54<br />
|-<br />
| sceKernelDefaultHandlerReservedCfunc<br />
| 0x2238<br />
| 0x1D58<br />
|-<br />
| sceKernelDefaultHandlerIrqCfunc<br />
| 0x2260<br />
| 0x1D5C<br />
|-<br />
| sceKernelPanicHandlerUndefCfunc<br />
| 0x2288<br />
| 0x1D60<br />
|-<br />
| sceKernelPanicHandlerPabtCfunc<br />
| 0x22C4<br />
| 0x1D78<br />
|-<br />
| sceKernelPanicHandlerDabtCfunc<br />
| 0x2304<br />
| 0x1D90<br />
|}<br />
<br />
== SceExcpmgrForKernel ==<br />
<br />
=== sceKernelRegisterExceptionHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x03499636<br />
|-<br />
| 3.65 || 0x00063675<br />
|}<br />
<br />
Temp name was sceExcpmgrRegisterHandlerForKernel.<br />
<br />
Installs an exception handler. The exception handler can be ARM code or Thumb code. Allowed <code>priority</code> values are from 0 (most important) to 7 (least important), including them. Specifying priority 0 will install the handler directly in VBAR, which means its code will run directly when an exception raises (and as such it needs to build the exception context itself).<br />
<code>handler & 0x1</code> must be set if the handler function is Thumb code.<br />
<br />
The syscall handler in FW 1.50 is SceExcpmgr_func_0x81000E40.<br />
<br />
The syscall handler in FW 3.65 is located at offset 0xF40 in [[SceKernelIntrMgr]]'s <code>.text</code> segment.<br />
<br />
<source lang="C">int sceKernelRegisterExceptionHandlerForKernel(SceExcpmgrExceptionCode excode, SceUInt32 priority, SceExcpmgrExceptionHandlerContext *handler);</source><br />
<br />
=== sceKernelRegisterDefaultExceptionHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFFCCB5F9<br />
|-<br />
| 3.65 || 0x416C0E20<br />
|}<br />
<br />
Installs an exception handler for all exceptions. If no exception handler is already installed for an exception, the handler will be installed in the VBAR. <code>handler</code> must be the same parameter that would be passed to [[SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel|sceKernelRegisterExceptionHandlerForKernel]].<br />
<br />
<source lang="C">int sceKernelRegisterDefaultExceptionHandlerForKernel(SceExcpmgrExceptionHandlerContext *handler);</source><br />
<br />
=== sceKernelReleaseExceptionHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xE04AE286<br />
|-<br />
| 3.65 || 0xDA7BB671<br />
|}<br />
<br />
Uninstalls an exception handler.<br />
<br />
Pass the same arguments as provided to [[SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel|sceKernelRegisterExceptionHandlerForKernel]].<br />
<br />
<source lang="C">int sceKernelReleaseExceptionHandlerForKernel(SceExcpmgrExceptionCode excode, SceExcpmgrExceptionHandlerContext *handler);</source><br />
<br />
=== sceKernelReleaseDefaultExceptionHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x917A6D2B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelInitialHandlerDebugUndefCfuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xB77DCBD6<br />
|-<br />
| 3.65 || 0x64A057C7<br />
|}<br />
<br />
Logs some information about the CPU state and backtrace then returns. Freezes with an infinite loop if currentHandlerIndex is superior to 1.<br />
<br />
<source lang="C">void sceKernelInitialHandlerDebugUndefCfuncForKernel(SceExcpmgrExceptionContext* context);</source><br />
<br />
=== sceKernelInitialHandlerDebugPabtCfuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x25C0C91B<br />
|-<br />
| 3.65 || 0x64A057C7<br />
|}<br />
<br />
Logs some information about the CPU state and backtrace then returns. Freezes with an infinite loop if currentHandlerIndex is superior to 1.<br />
<br />
<source lang="C">void sceKernelInitialHandlerDebugPabtCfuncForKernel(SceExcpmgrExceptionContext* context);</source><br />
<br />
=== sceKernelInitialHandlerDebugDabtCfuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xFFFA3353<br />
|-<br />
| 3.65 || 0xD195E55C<br />
|}<br />
<br />
Logs some information about the CPU state and backtrace then returns. Freezes with an infinite loop if currentHandlerIndex is superior to 1.<br />
<br />
<source lang="C">void sceKernelInitialHandlerDebugDabtCfuncForKernel(SceExcpmgrExceptionContext* context);</source><br />
<br />
=== sceKernelReturnFromExceptionForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xD17EEE40<br />
|-<br />
| 3.65 || 0x3E55B5C3<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelReturnFromExceptionForKernel(SceExcpmgrExceptionContext *context);</source><br />
<br />
=== SceExcpmgrForKernel_A90AC525 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA90AC525<br />
|-<br />
| 3.65 || 0x4337DD78<br />
|}<br />
<br />
Returns a pointer to the handler previously registered by [[SceExcpmgr#sceKernelRegisterDefaultExceptionHandlerForKernel|sceKernelRegisterDefaultExceptionHandlerForKernel]].<br />
<br />
<source lang="C">SceExcpmgrExceptionHandlerContext *SceExcpmgrForKernel_A90AC525(void);</source><br />
<br />
=== sceKernelGetExcpStackBottomForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4C603645<br />
|-<br />
| 3.65 || 0x5420ED8F<br />
|}<br />
<br />
Returns the exception stack bottom for specified CPU core. The stack bottom is the highest address of the stack.<br />
<br />
Reimplementation code:<br />
<source lang="C"><br />
void* sceKernelGetExcpStackBottomForKernel(int coreNum) {<br />
return sceKernelGetExcpDataForKernel()->ExcpStackBottom[coreNum];<br />
}<br />
</source><br />
<br />
<source lang="C">void* sceKernelGetExcpStackBottomForKernel(int coreNum);</source><br />
<br />
=== sceKernelGetExcpCBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x08CB30E6<br />
|-<br />
| 3.65 || 0x96C2869C<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetExcpDataForKernel, sceExcpmgrGetDataForKernel.<br />
<br />
Get exception data pointer (for use by handlers).<br />
<br />
<source lang="C">SceExcpmgrCB *sceKernelGetExcpCBForKernel(void);</source><br />
<br />
=== SceExcpmgrForKernel_3AE9AEE1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x3AE9AEE1<br />
|-<br />
| 3.65 || 0x1FBF5654<br />
|}<br />
<br />
Sets a callback function ran by the default UNDEF exception handler before calling the next handler in the chain.<br />
<br />
<source lang="C"><br />
// NOTE : context passed to callback lacks VFP registers<br />
void SceExcpmgrForKernel_3AE9AEE1(void (*callback)(SceExcpmgrExceptionContext*));<br />
</source><br />
<br />
=== SceExcpmgrForKernel_4FF90618 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4FF90618<br />
|-<br />
| 3.65 || 0xE7487AFD<br />
|}<br />
<br />
Called by [[SceProcessmgr]] during <code>CreateKernelProcess</code>.<br />
<br />
Sets the structure CP14 watchpoint registers will be restored from if TPIDRPRW of thread that raised an exception is NULL (Kernel process). See [[SceExcpmgr#Provided handlers' behaviour]] for more information.<br />
<br />
<source lang="C">void SceExcpmgrForKernel_4FF90618(DBGWVC_save *a1);</source><br />
<br />
=== SceExcpmgrForKernel_A66DDFA3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA66DDFA3<br />
|-<br />
| 3.65 || 0x293DFA04<br />
|}<br />
<br />
Called by [[SceProcessmgr]] during <code>CreateKernelProcess</code>.<br />
<br />
Sets the structure CP14 breakpoint registers will be restored from if TPIDRPRW of thread that raised an exception is NULL (Kernel process). See [[SceExcpmgr#Provided handlers' behaviour]] for more information.<br />
<br />
<source lang="C">void SceExcpmgrForKernel_A66DDFA3(DBGBVC_save *a1);</source><br />
<br />
=== SceExcpmgrForKernel_7ADF11DB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || Not present<br />
|-<br />
| 3.60 || 0x7ADF11DB<br />
|-<br />
| 3.65 || 0x9EE59C6E<br />
|}<br />
<br />
Sets a callback function ran by the default DABT exception handler before trying to handle the exception.<br />
<br />
<source lang="C"><br />
// NOTE : context passed to callback lacks VFP registers<br />
void SceExcpmgrForKernel_7ADF11DB(void (*callback)(SceExcpmgrExceptionContext*));<br />
</source><br />
<br />
=== SceExcpmgrForKernel_8D223205 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x8D223205<br />
|-<br />
| 3.65 || 0x58F7212B<br />
|}<br />
<br />
Sets a callback function ran by the default PABT exception handler before calling the next handler in the chain.<br />
<br />
<source lang="C"><br />
// NOTE : context passed to callback lacks VFP registers<br />
void SceExcpmgrForKernel_8D223205(void (*callback)(SceExcpmgrExceptionContext*));<br />
</source><br />
<br />
=== SceExcpmgrForKernel_C45C0D3D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || Not present<br />
|-<br />
| 3.60 || 0xC45C0D3D<br />
|-<br />
| 3.65 || 0x44CE04B8<br />
|}<br />
<br />
Sets the "memory access error area" range. See [[SceExcpmgr#Built-in handlers behaviour|the built-in handlers behaviour section]] for more information.<br />
<br />
In older firmwares (0.990.030), this range is acquired during the call to [[SceSysmem#SceCpuForKernel_9A3281C0|SceCpuForKernel_9A3281C0]]<br />
in SceExcpmgr <code>module_start</code> instead.<br />
<source lang="C">void SceExcpmgrForKernel_C45C0D3D(SceUIntPtr memErrorAreaStart, SceUIntPtr memErrorAreaEnd);</source><br />
<br />
=== SceExcpmgrForKernel_D464A9A7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xD464A9A7<br />
|-<br />
| 3.65 || 0xB615A7DA<br />
|}<br />
<br />
Returns the current nested exception count, or 0 if current TPIDRPRW is non-NULL.<br />
<br />
<source lang="C">int SceExcpmgrForKernel_D464A9A7(void);</source><br />
<br />
== SceExcpmgrForTZS ==<br />
<br />
=== SceExcpmgrForTZS_get_default_excp_handler ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x07A5790B<br />
|}<br />
<br />
<source lang="C">void *SceExcpmgrForTZS_get_default_excp_handler(void);</source><br />
<br />
=== sceKernelReleaseExceptionHandlerForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x166C9362<br />
|}<br />
<br />
<source lang="C">int sceKernelReleaseExceptionHandlerForTZS(SceExcpmgrExceptionCode excode, SceExcpmgrExceptionHandlerContext *handler)</source><br />
<br />
=== sceKernelReleaseDefaultExceptionHandlerForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x6282E52C<br />
|}<br />
<br />
<source lang="C">int sceKernelReleaseDefaultExceptionHandlerForTZS(SceExcpmgrExceptionHandlerContext *handler)</source><br />
<br />
=== sceKernelRegisterDefaultExceptionHandlerForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xA0434735<br />
|}<br />
<br />
<source lang="C">int sceKernelRegisterDefaultExceptionHandlerForTZS(SceExcpmgrExceptionHandlerContext *handler)</source><br />
<br />
=== sceKernelRegisterMonitorEntryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xAC297406<br />
|}<br />
<br />
<source lang="C">int sceKernelRegisterMonitorEntryForTZS(SceExcpmgrExceptionCode excode, SceExcpmgrExceptionHandlerContext *handler);</source><br />
<br />
=== sceKernelRegisterExceptionHandlerForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xDD4C680D<br />
|}<br />
<br />
<source lang="C">int sceKernelRegisterExceptionHandlerForTZS(SceExcpmgrExceptionCode excode, SceUInt32 priority, SceExcpmgrExceptionHandlerContext *handler);</source><br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21159
NID
2024-03-25T19:08:09Z
<p>CelesteBlue: /* Known suffixless libraries */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
The function NID is a value that is statically assigned by a toolchain in relation to a function exported in a library so that it is unique within that library. The function name can be determined by searching for the symbol name with the same value as the function NID from the program file before the symbol information has been stripped.<br />
<br />
In PS Vita, each library has its own NID. In PSP, libraries did not have NIDs so they were parsed by name.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" prefix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
The following PS Vita libraries are reusing some NIDs from PSP (to investigate):<br />
<pre><br />
SceFace<br />
SceIdStorageForDriver<br />
SceLedForDriver<br />
ScePower<br />
SceSmart<br />
SceVoice<br />
SceVoiceQoS<br />
</pre><br />
<br />
The following PS Vita libraries have interesting NIDs (to investigate):<br />
<pre><br />
SceFios2KernelForDriver<br />
</pre><br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + downcase(shortened(libname))<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | uppercase(camel_case("Sce"^-1 + libname))<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> ([[ScePaf]] module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> ([[ScePafWebMapView]] module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + psvita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Basics ==<br />
<br />
Lemma: Library and function/variable NIDs depend on name.<br />
<br />
Proof: All known algorithms use the function/variable/library name as a parameter.<br />
<br />
Lemma: Library and function/variable NIDs can depend on other things than name.<br />
<br />
Proof: Some known algorithms append a salt suffix to the name.<br />
<br />
== Per-library NID suffix ==<br />
<br />
Theorem: Every PS Vita function/variable NID suffix is common to the whole library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
Theorem: NID suffix is the same for libraries and functions/variables.<br />
<br />
Proof:<br />
<br />
1. For old PS Vita libraries there was no NID suffix, nor for the functions. Ex: [[ScePower#ScePowerForDriver]].<br />
<br />
2. All known functions/variables NID suffixes also apply to their respective library.<br />
<br />
Theorem: At least before SDK 3.630.011, PS Vita function/variable NID is not generated from something library-related other than library name.<br />
<br />
Proof: Some ForDriver and ForKernel libraries have different library NIDs but same function NID and same function name prefix (without ForDriver, ForKernel, etc... suffix).<br />
<br />
Example 1: [[SceKernelThreadMgr#sceKernelGetMutexInfo_089]]<br />
<br />
Example 2: Some functions have been moved from one library to another but the function names have not changed. <br />
<br />
== Per-library function naming convention ==<br />
<br />
Theorem: When a PS Vita library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]] function inside [[SceAvcdecForPlayer#SceAvcdecForPlayer]] library.<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
== Function or variable NID change ==<br />
<br />
Lemma: When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Theorem: If a PS Vita function NID changes but its library NID does not change, then the function has been renamed.<br />
<br />
Proof: When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== SDK 3.63 library NIDs change ==<br />
<br />
Lemma: SCE changed many PS Vita library NIDs since SDK 3.630.011, after SDK 3.610.011.<br />
<br />
Proof: [[SceKernelModulemgr#SceModulemgrForKernel]] library NID changed since FW 3.63, but libname, libver and all its library information have not changed.<br />
<br />
A non-exhaustive list of affected libraries is:<br />
<pre><br />
SceExcpmgrForKernel<br />
SceSysmemForKernel<br />
SceCpuForKernel<br />
SceDebugForKernel<br />
SceUartForKernel<br />
SceThreadmgrForKernel<br />
SceProcessmgrForKernel<br />
SceModulemgrForKernel<br />
</pre><br />
<br />
Theorem: If a library NID changes without changing name, then all its functions/variables NIDs change. Moreover, it is likely that the algorithm is hash(name+lib_suffix) and that the only modification was the library suffix.<br />
<br />
Proof: every function/variable NIDs whose library NID changed since SDK 3.630.000 while keeping library name, was also changed.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21158
NID
2024-03-25T19:07:02Z
<p>CelesteBlue: /* Known suffixless libraries */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
The function NID is a value that is statically assigned by a toolchain in relation to a function exported in a library so that it is unique within that library. The function name can be determined by searching for the symbol name with the same value as the function NID from the program file before the symbol information has been stripped.<br />
<br />
In PS Vita, each library has its own NID. In PSP, libraries did not have NIDs so they were parsed by name.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" prefix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
The following PS Vita libraries are reusing some NIDs from PSP (to investigate):<br />
<pre><br />
SceFace<br />
SceFios2KernelForDriver<br />
SceIdStorageForDriver<br />
SceLedForDriver<br />
ScePower<br />
SceSmart<br />
SceVoice<br />
SceVoiceQoS<br />
</pre><br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + downcase(shortened(libname))<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | uppercase(camel_case("Sce"^-1 + libname))<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> ([[ScePaf]] module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> ([[ScePafWebMapView]] module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + psvita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Basics ==<br />
<br />
Lemma: Library and function/variable NIDs depend on name.<br />
<br />
Proof: All known algorithms use the function/variable/library name as a parameter.<br />
<br />
Lemma: Library and function/variable NIDs can depend on other things than name.<br />
<br />
Proof: Some known algorithms append a salt suffix to the name.<br />
<br />
== Per-library NID suffix ==<br />
<br />
Theorem: Every PS Vita function/variable NID suffix is common to the whole library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
Theorem: NID suffix is the same for libraries and functions/variables.<br />
<br />
Proof:<br />
<br />
1. For old PS Vita libraries there was no NID suffix, nor for the functions. Ex: [[ScePower#ScePowerForDriver]].<br />
<br />
2. All known functions/variables NID suffixes also apply to their respective library.<br />
<br />
Theorem: At least before SDK 3.630.011, PS Vita function/variable NID is not generated from something library-related other than library name.<br />
<br />
Proof: Some ForDriver and ForKernel libraries have different library NIDs but same function NID and same function name prefix (without ForDriver, ForKernel, etc... suffix).<br />
<br />
Example 1: [[SceKernelThreadMgr#sceKernelGetMutexInfo_089]]<br />
<br />
Example 2: Some functions have been moved from one library to another but the function names have not changed. <br />
<br />
== Per-library function naming convention ==<br />
<br />
Theorem: When a PS Vita library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]] function inside [[SceAvcdecForPlayer#SceAvcdecForPlayer]] library.<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
== Function or variable NID change ==<br />
<br />
Lemma: When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Theorem: If a PS Vita function NID changes but its library NID does not change, then the function has been renamed.<br />
<br />
Proof: When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== SDK 3.63 library NIDs change ==<br />
<br />
Lemma: SCE changed many PS Vita library NIDs since SDK 3.630.011, after SDK 3.610.011.<br />
<br />
Proof: [[SceKernelModulemgr#SceModulemgrForKernel]] library NID changed since FW 3.63, but libname, libver and all its library information have not changed.<br />
<br />
A non-exhaustive list of affected libraries is:<br />
<pre><br />
SceExcpmgrForKernel<br />
SceSysmemForKernel<br />
SceCpuForKernel<br />
SceDebugForKernel<br />
SceUartForKernel<br />
SceThreadmgrForKernel<br />
SceProcessmgrForKernel<br />
SceModulemgrForKernel<br />
</pre><br />
<br />
Theorem: If a library NID changes without changing name, then all its functions/variables NIDs change. Moreover, it is likely that the algorithm is hash(name+lib_suffix) and that the only modification was the library suffix.<br />
<br />
Proof: every function/variable NIDs whose library NID changed since SDK 3.630.000 while keeping library name, was also changed.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21157
NID
2024-03-25T18:59:51Z
<p>CelesteBlue: /* NID Theory */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
The function NID is a value that is statically assigned by a toolchain in relation to a function exported in a library so that it is unique within that library. The function name can be determined by searching for the symbol name with the same value as the function NID from the program file before the symbol information has been stripped.<br />
<br />
In PS Vita, each library has its own NID. In PSP, libraries did not have NIDs so they were parsed by name.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" prefix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + downcase(shortened(libname))<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | uppercase(camel_case("Sce"^-1 + libname))<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> ([[ScePaf]] module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> ([[ScePafWebMapView]] module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + psvita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Basics ==<br />
<br />
Lemma: Library and function/variable NIDs depend on name.<br />
<br />
Proof: All known algorithms use the function/variable/library name as a parameter.<br />
<br />
Lemma: Library and function/variable NIDs can depend on other things than name.<br />
<br />
Proof: Some known algorithms append a salt suffix to the name.<br />
<br />
== Per-library NID suffix ==<br />
<br />
Theorem: Every PS Vita function/variable NID suffix is common to the whole library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
Theorem: NID suffix is the same for libraries and functions/variables.<br />
<br />
Proof:<br />
<br />
1. For old PS Vita libraries there was no NID suffix, nor for the functions. Ex: [[ScePower#ScePowerForDriver]].<br />
<br />
2. All known functions/variables NID suffixes also apply to their respective library.<br />
<br />
Theorem: At least before SDK 3.630.011, PS Vita function/variable NID is not generated from something library-related other than library name.<br />
<br />
Proof: Some ForDriver and ForKernel libraries have different library NIDs but same function NID and same function name prefix (without ForDriver, ForKernel, etc... suffix).<br />
<br />
Example 1: [[SceKernelThreadMgr#sceKernelGetMutexInfo_089]]<br />
<br />
Example 2: Some functions have been moved from one library to another but the function names have not changed. <br />
<br />
== Per-library function naming convention ==<br />
<br />
Theorem: When a PS Vita library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]] function inside [[SceAvcdecForPlayer#SceAvcdecForPlayer]] library.<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
== Function or variable NID change ==<br />
<br />
Lemma: When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Theorem: If a PS Vita function NID changes but its library NID does not change, then the function has been renamed.<br />
<br />
Proof: When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== SDK 3.63 library NIDs change ==<br />
<br />
Lemma: SCE changed many PS Vita library NIDs since SDK 3.630.011, after SDK 3.610.011.<br />
<br />
Proof: [[SceKernelModulemgr#SceModulemgrForKernel]] library NID changed since FW 3.63, but libname, libver and all its library information have not changed.<br />
<br />
A non-exhaustive list of affected libraries is:<br />
<pre><br />
SceExcpmgrForKernel<br />
SceSysmemForKernel<br />
SceCpuForKernel<br />
SceDebugForKernel<br />
SceUartForKernel<br />
SceThreadmgrForKernel<br />
SceProcessmgrForKernel<br />
SceModulemgrForKernel<br />
</pre><br />
<br />
Theorem: If a library NID changes without changing name, then all its functions/variables NIDs change. Moreover, it is likely that the algorithm is hash(name+lib_suffix) and that the only modification was the library suffix.<br />
<br />
Proof: every function/variable NIDs whose library NID changed since SDK 3.630.000 while keeping library name, was also changed.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21156
NID
2024-03-25T18:31:23Z
<p>CelesteBlue: /* Usage */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
The function NID is a value that is statically assigned by a toolchain in relation to a function exported in a library so that it is unique within that library. The function name can be determined by searching for the symbol name with the same value as the function NID from the program file before the symbol information has been stripped.<br />
<br />
In PS Vita, each library has its own NID. In PSP, libraries did not have NIDs so they were parsed by name.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" prefix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + downcase(shortened(libname))<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | uppercase(camel_case("Sce"^-1 + libname))<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> ([[ScePaf]] module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> ([[ScePafWebMapView]] module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + psvita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Per library NID suffix ==<br />
<br />
Theorem (Graphene): Every PS Vita function/variable NID suffix is per library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
== Per library function naming ==<br />
<br />
Theorem (CelesteBlue): When a PS Vita library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]] function inside [[SceAvcdecForPlayer#SceAvcdecForPlayer]] library.<br />
<br />
== Function or variable NID change ==<br />
<br />
Lemma (CelesteBlue): When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Theorem (CelesteBlue): If a PS Vita function NID changes but its library NID does not change, then the function has been renamed.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
== 3.63 NIDs change ==<br />
<br />
Lemma : SCE changed many library NIDs since SDK 3.630.011.<br />
<br />
Proof: a non-exhaustive list is:<br />
<pre><br />
SceExcpmgrForKernel<br />
SceSysmemForKernel<br />
SceCpuForKernel<br />
SceDebugForKernel<br />
SceUartForKernel<br />
SceThreadmgrForKernel<br />
SceProcessmgrForKernel<br />
SceModulemgrForKernel<br />
</pre><br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21155
NID
2024-03-25T18:28:20Z
<p>CelesteBlue: /* NID Theory */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" prefix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + downcase(shortened(libname))<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | uppercase(camel_case("Sce"^-1 + libname))<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> ([[ScePaf]] module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> ([[ScePafWebMapView]] module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + psvita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Per library NID suffix ==<br />
<br />
Theorem (Graphene): Every PS Vita function/variable NID suffix is per library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
== Per library function naming ==<br />
<br />
Theorem (CelesteBlue): When a PS Vita library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]] function inside [[SceAvcdecForPlayer#SceAvcdecForPlayer]] library.<br />
<br />
== Function or variable NID change ==<br />
<br />
Lemma (CelesteBlue): When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Theorem (CelesteBlue): If a PS Vita function NID changes but its library NID does not change, then the function has been renamed.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
== 3.63 NIDs change ==<br />
<br />
Lemma : SCE changed many library NIDs since SDK 3.630.011.<br />
<br />
Proof: a non-exhaustive list is:<br />
<pre><br />
SceExcpmgrForKernel<br />
SceSysmemForKernel<br />
SceCpuForKernel<br />
SceDebugForKernel<br />
SceUartForKernel<br />
SceThreadmgrForKernel<br />
SceProcessmgrForKernel<br />
SceModulemgrForKernel<br />
</pre><br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSblACMgr&diff=21154
SceSblACMgr
2024-03-25T18:17:40Z
<p>CelesteBlue: </p>
<hr />
<div>Secure block Attribute-Capability Manager<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.931.010-3.740.011 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.931.010-3.740.011 || [[SceSblACMgr#SceSblACMgrForKernel|SceSblACMgrForKernel]] || Non-secure || Kernel || 0x11F9B314<br />
|-<br />
| 0.931.010-3.740.011 || [[SceSblACMgr#SceSblACMgrForDriver|SceSblACMgrForDriver]] || Non-secure || Kernel || 0x9AD8E213<br />
|-<br />
| 0.931.010-3.740.011 || [[SceSblACMgr#SceSblACMgr|SceSblACMgr]] || Non-secure || User || 0xF069F219<br />
|}<br />
<br />
== Types ==<br />
<br />
<source lang="C"><br />
typedef struct st_attr_info_internal {<br />
SceUInt32 st_attr;<br />
int unk_0x04;<br />
} st_attr_info_internal;<br />
<br />
typedef struct st_attr_info {<br />
int index; // operation index<br />
st_attr_info_internal *st_attr;<br />
SceSize size; // 1 or 2 - size of st_attr<br />
} st_attr_info;<br />
</source><br />
<br />
== Notes ==<br />
<br />
=== Common functions ===<br />
<br />
FW 3.60 SceSblACMgr_0x570: sceSblACMgrHasAttribute<br />
<br />
== Capability ==<br />
<br />
Capability flags are stored on 0x20 bytes. Max bit number is 0xFF.<br />
<br />
{| class="wikitable"<br />
! Bit !! Class !! Name !! Description<br />
|-<br />
| 0 || privilege || root ||<br />
|-<br />
| 1 || privilege || system ||<br />
|-<br />
| 2 || privilege || game || Set on fSELF type 1.<br />
|-<br />
| 3 || privilege || nongame || Set on fSELF type 2.<br />
|-<br />
| 31 || ? || ? || Used by [[#SceSblACMgrForKernel_84604EED]].<br />
|-<br />
| 32 || ?debug level? || ?process dbg? || Bypass spawner privilege requirement and ignore shared secret.<br />
|-<br />
| 33 || ?debug level? || ?limited user? || Prohibits spawned attribute flag 17 at same time as self_type mask 0x20 and (genuine CEX or masked self_type != 0x10000). Error 0x800F0B35.<br />
|-<br />
| 34 || ?debug level? || ?remap? || VM function. Used by [[#SceSblACMgrForKernel_30575458]] ([[SceSysmem#sceKernelSysrootCheckRemapCodeForUserForKernel]]).<br />
|-<br />
| 35 || ?debug level? || ? ||<br />
|-<br />
| 52-55 || ? || ? || Set on fSELF type 1.<br />
|-<br />
| 56-59 || ? || ? || Set on fSELF type 2.<br />
|-<br />
| 96-127 || ? || ? || Always set (0xFFFFFFFF).<br />
|-<br />
| 128 || function || marlin || Used by [[#sceSblACMgrHasMarlinFlagForKernel]], [[#sceSblACMgrHasMarlinFlagForDriver]].<br />
|-<br />
| 129 || function || magic_gate || Used by [[#sceSblACMgrHasMagicGateFlagForKernel]], [[#sceSblACMgrHasMagicGateFlagForDriver]].<br />
|-<br />
| 130 || function || udcd || Allows LoopBack Mount, Allows Udcd.<br />
|-<br />
| 131 || function || usb_serial ||<br />
|-<br />
| 132 || function || virtual_machine ||<br />
|-<br />
| 133 || function || force_open_msgpipe || Used by [[#SceSblACMgrForKernel_8241AB5C]] (and [[SceKernelThreadMgr#sceKernelOpenMsgPipe]]).<br />
|-<br />
| 134 || function || system_data_file_play_ready || Used by [[#sceSblACMgrHasSystemDataFilePlayReadyFlagForKernel]], [[#sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver]].<br />
|-<br />
| 135 || function || system_data_file || Used by [[#sceSblACMgrHasSystemDataFileFlagForDriver]], [[#sceSblACMgrHasSystemDataFileFlagForDriver]]<br />
|}<br />
<br />
== Attribute ==<br />
<br />
Attribute flags are stored on 0x20 bytes. Max bit number is 0xFF.<br />
<br />
{| class="wikitable"<br />
! Bit !! Class !! Name !! Description<br />
|-<br />
| 0 || spawn_by || system ||<br />
|-<br />
| 1 || spawn_by || game ||<br />
|-<br />
| 2 || spawn_by || nongame ||<br />
|-<br />
| 16 || ? || coredump || Triggers a coredump when app crashes. Prohibits self_type mask 0x10000. Error 0x800F0B35.<br />
|-<br />
| 17 || ? || ? || Prohibits spawner capability flag 33 at same time as self_type mask 0x20 and (genuine CEX or masked self_type != 0x10000). Error 0x800F0B35.<br />
|-<br />
| 29 || platform || dex ||<br />
|-<br />
| 30 || platform || test, tool || Also supported by Diag.<br />
|-<br />
| 31 || platform || cex || Also supported by Diag.<br />
|-<br />
| 32 || mode || production || Requires production mode (Manufacturing mode).<br />
|-<br />
| 33 || mode || no_production || Prohibits production mode (Manufacturing mode). Set on fSELF type 1 and 2.<br />
|-<br />
| 34 || mode || qa_0xD_mask_1 || Requires QA flag 0xD mask 1.<br />
|-<br />
| 35 || mode || no_qa_0xD_mask_1 || Prohibits QA flag 0xD mask 1.<br />
|-<br />
| 36 || mode || some boot flag || Requires [[Second_Loader#Boot_type_indicator_for_slsk]] mask 0x20, but it seems this boot type is disabled in FW 3.60 release second_loader.<br />
|-<br />
| 37 || mode || qa_0xF_mask_1 || Requires QA flag 0xF mask 1.<br />
|-<br />
| 48 || "fself_related" || ? || <br />
|-<br />
| 49 || "fself_related" || ? || <br />
|-<br />
| 50 || "fself_related" || ? || Set on fSELF type 1.<br />
|-<br />
| 51 || "fself_related" || ? || Set on fSELF type 1.<br />
|-<br />
| 52 || "fself_related" || ? || Set on fSELF type 2.<br />
|-<br />
| 53 || "fself_related" || ? || Set on fSELF type 2.<br />
|-<br />
| 54 || "fself_related" || ? || Set on fSELF type 1 and 2.<br />
|-<br />
| 55 || "fself_related" || ? || Set on fSELF type 1 and 2.<br />
|-<br />
| 64 || media || ? || Media Type 9<br />
|-<br />
| 65 || media || sd0 || Set on fSELF type 1 and 2.<br />
|-<br />
| 66 || media || host0 || Set on fSELF type 1 and 2 only in Development Mode.<br />
|-<br />
| 67 || media || ? || Media Type 8<br />
|-<br />
| 68 || media || ux0 ||<br />
|-<br />
| 69 || media || gro0:app || Set on fSELF type 1 and 2 only in Release Mode.<br />
|-<br />
| 70 || media || gro0:patch || Set on fSELF type 1 and 2 only in Release Mode.<br />
|-<br />
| 71 || media || sa0 ||<br />
|-<br />
| 72 || media || mfa0 ||<br />
|-<br />
| 73 || media || mfb0 ||<br />
|-<br />
| 74 || media || lma0 ||<br />
|-<br />
| 75 || media || lmb0 ||<br />
|-<br />
| 76 || media || lmc0 ||<br />
|-<br />
| 77 || media || lmd0 ||<br />
|-<br />
| 78 || media || pd0 ||<br />
|-<br />
| 79 || media || ? || Maybe reserved or unused.<br />
|-<br />
| 80 || media || ?boot0? ?slb2? ||<br />
|-<br />
| 81 || media || os0 ||<br />
|-<br />
| 82 || media || vs0 ||<br />
|-<br />
| 83 || media || vd0 ||<br />
|-<br />
| 84 || media || tm0 ||<br />
|-<br />
| 85 || media || ur0 ||<br />
|-<br />
| 86 || media || ud0 ||<br />
|-<br />
| 87 || media || ? ||<br />
|-<br />
| 88 || media || ? ||<br />
|-<br />
| 89 || media || ux0:data ||<br />
|-<br />
| 90 || media || memcard (ux0:app) ||<br />
|-<br />
| 91 || media || memcard_patch (ux0:patch) ||<br />
|-<br />
| 92-95 || media || ? || Used by [[SceMagicGate]].<br />
|-<br />
| 96 || level or self_type || kernel ||<br />
|-<br />
| 97 || level or self_type || usermode ||<br />
|-<br />
| 98 || level or self_type || SM ||<br />
|-<br />
| 128 || ? || qa_0xB_mask_0x10 || On Test/Tool/Diag platform, it requires QA flag 0xB mask 0x10. Error 0x800F0B33.<br />
|-<br />
| 129 || ? || ? || Allows limited vs0 user drive access. Used by [[#SceSblACMgrForKernel_165C3C7A]], [[#SceSblACMgrForDriver_E79C7A8D]].<br />
|-<br />
| 136-223 || ? || ? || Never set?<br />
|-<br />
| 224-255 || ? || ? || Always set (0xFFFFFFFF).<br />
|}<br />
<br />
== Media Type ==<br />
<br />
A code is passed in the SceSblSmCommContext130 context buffer to decrypt a SELF based on the path in which the SELF file must be located. This is a security feature to prevent SELFs that are designed to run from one path (for example <code>os0:</code>) from being copied and run from another path.<br />
<br />
{| class="wikitable"<br />
! Path !! Media Type !! SELF Program Attribute Media Type Bit Number (0-255) !! Comment<br />
|-<br />
| ux0:user, ux0:/user || 0 || 0xFFFFFFFF (invalid) || Its bit number would read out of attribute (valid bits 0-255) so there is an early unsigned int check to avoid this Media Type in secure_kernel. It is so unlikely that this Media Type is embedded in SELF Program Attribute.<br />
|-<br />
| sd0 || 1 || 0x41 ||<br />
|-<br />
| os0 || 2 || 0x51 ||<br />
|-<br />
| vs0 || 3 || 0x52 ||<br />
|-<br />
| vd0 || 4 || 0x53 ||<br />
|-<br />
| tm0 || 5 || 0x54 ||<br />
|-<br />
| ur0 || 6 || 0x55 ||<br />
|-<br />
| host0 || 7 || 0x42 || For usermode self_type, requires QA flag 0xD mask 2. For kernel or SM self_type, requires QA flag 0xE mask 1.<br />
|-<br />
| ? || 8 || 0x43 || Present in FWs 0.931.010-3.740.011 [[Secure Kernel]].<br />
|-<br />
| ? || 9 || 0x40 || Present in FWs 0.931.010-3.740.011 [[Secure Kernel]].<br />
|-<br />
| ?sd1? || 10 || 0x50 || Only set when kbl_param->boot_type_indicator_1 has flag 0x40, which seems to never happen on external (release) FWs. It is used to load SM (usually from os0:) instead of using sd0: Media Type.<br />
|-<br />
| ud0 || 11 || 0x56 ||<br />
|-<br />
| ux0 || 12 || 0x44 ||<br />
|-<br />
| gro0:app, gro0:/app || 13 || 0x45 ||<br />
|-<br />
| gro0:patch, gro0:/patch || 14 || 0x46 ||<br />
|-<br />
| sa0 || 15 || 0x47 ||<br />
|-<br />
| mfa0 || 16 || 0x48 ||<br />
|-<br />
| mfb0 || 17 || 0x49 ||<br />
|-<br />
| lma0 || 18 || 0x4A ||<br />
|-<br />
| lmb0 || 19 || 0x4B ||<br />
|-<br />
| lmc0 || 20 || 0x4C ||<br />
|-<br />
| lmd0 || 21 || 0x4D ||<br />
|-<br />
| pd0 || 22 || 0x4E ||<br />
|-<br />
| ux0:app, ux0:/app || 23 || 0x5A ||<br />
|-<br />
| ux0:patch, ux0:/patch || 24 || 0x5B ||<br />
|-<br />
| ux0:data, ux0:/data || 25 || 0x59 ||<br />
|-<br />
| ? || 26 || ? || Not present in FWs 0.931.010-3.740.011 [[Secure Kernel]] thus would return error 0x800F0B32. Certainly usable in non-secure kernel though.<br />
|-<br />
| uma0 || 27 || ? || Not present in FWs 0.931.010-3.740.011 [[Secure Kernel]] thus would return error 0x800F0B32. Usable in non-secure kernel though.<br />
|}<br />
<br />
<source lang="C"><br />
// Code inspired by PSVita FWs 0.931.010-3.740.011 secure_kernel<br />
uint32_t check_media_type_in_attribute(uint8_t *pAttribute, uint32_t media_type) {<br />
if (0x18 < media_type - 1) // This unsigned int check inhibits Media Type 0 because it has an invalid bit number (-1)<br />
return 0x800f0b32;<br />
uint32_t ret = 0x800F0B32; // Bad Media Type<br />
uint32_t bit_no = index_table[media_type];<br />
uint8_t media_type_byte = *(uint8_t *)pAttribute[bit_no >> 3];<br />
uint8_t media_type_mask = 1 << (~bit_no & 7);<br />
if (media_type_byte & media_type_mask != 0)<br />
ret = 0;<br />
return ret;<br />
}<br />
</source><br />
<br />
== SceSblACMgrForKernel ==<br />
<br />
=== SceSblACMgrForKernel_F7524073 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xF7524073<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Returns true if QA flag byte 9 mask 1 is set.<br />
<br />
<source lang="C">SceBool SceSblACMgrForKernel_F7524073(void);</source><br />
<br />
=== sceSblACMgrHasMarlinFlagForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x04C0ED3F<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 128);<br />
<br />
<source lang="C">int sceSblACMgrHasMarlinFlagForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasMagicGateFlagForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x02422F1F<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 129);<br />
<br />
<source lang="C">int sceSblACMgrHasMagicGateFlagForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsGameProgramForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x05FDC646<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id begins with 0x21 (game) or 0x2F (fSELF).<br />
<br />
<source lang="C">int sceSblACMgrIsGameProgramForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsUnityRuntimeForPSMForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x06BE9F0F<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
<source lang="C">int sceSblACMgrIsUnityRuntimeForPSMForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasUserDebugFlagForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0E489631<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 32);<br />
<br />
<source lang="C">int sceSblACMgrHasUserDebugFlagForKernel(SceUID pid);</source><br />
<br />
=== SceSblACMgrForKernel_11C9158B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x11C9158B<br />
|}<br />
<br />
A guessed name is sceSblACMgrGetFSAttributeByModeForKernel.<br />
<br />
Same as [[#SceSblACMgrForDriver_3B356B98]].<br />
<br />
<source lang="C">int SceSblACMgrForKernel_11C9158B(void* input, void* output);</source><br />
<br />
=== SceSblACMgrForKernel_165C3C7A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x165C3C7A<br />
|}<br />
<br />
A guessed name is sceSblACMgrIsVs0UserDriveAccessibleProgramForKernel.<br />
<br />
Same as [[#SceSblACMgrForDriver_E79C7A8D]].<br />
<br />
<source lang="C">SceBool SceSblACMgrForKernel_165C3C7A(SceUID pid, const SceChar8 *path);</source><br />
<br />
=== SceSblACMgrForKernel_1948E9DB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1948E9DB<br />
|}<br />
<br />
Equivalent of [[#SceSblACMgrForKernel_FBA1A256]].<br />
<br />
<source lang="C">int SceSblACMgrForKernel_1948E9DB(void);</source><br />
<br />
=== SceSblACMgrForKernel_CCDBB74D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xCCDBB74D<br />
|}<br />
<br />
<source lang="C">int SceSblACMgrForKernel_CCDBB74D(SceUID pid, st_attr_info *a2, void *a3);</source><br />
<br />
=== SceSblACMgrForKernel_75AAF981 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x75AAF981<br />
|}<br />
<br />
A guessed name is sceSblACMgrIsAllowFSAttributeForKernel.<br />
<br />
Equivalent of [[#SceSblACMgrForKernel_BE5667C5]].<br />
<br />
<source lang="C">int SceSblACMgrForKernel_75AAF981(SceUID pid, st_attr_info *a2, int a3);</source><br />
<br />
=== sceSblACMgrSetFSAttributeByAttributeWithMountPointForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x1B160234<br />
|}<br />
<br />
<source lang="C">int sceSblACMgrSetFSAttributeByAttributeWithMountPointForKernel(SceUID pid, st_attr_info *a2, int *a3, int flags);</source><br />
<br />
=== sceSblACMgrSetFSAttributeByModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2AE6CF27<br />
|}<br />
<br />
Equivalent of [[#sceSblACMgrSetFSAttributeByModeForDriver]].<br />
<br />
<source lang="C">int sceSblACMgrSetFSAttributeByModeForKernel(SceUID pid, st_attr_info *a2, int flags);</source><br />
<br />
=== SceSblACMgrForKernel_30575458 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x30575458<br />
|}<br />
<br />
returns true if sceSblACMgrHasCapabilityForDriver(pid, 34) returns true<br />
<br />
or returns <code>SceSysrootForDriver_26AA237C();</code> if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true.<br />
<br />
<source lang="C">int SceSblACMgrForKernel_30575458(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsKernelProgramForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x31C23B66<br />
|}<br />
<br />
Temp name was sceSblACMgrIsSystemForKernel, sceSblACMgrIsRootProgramForKernel.<br />
<br />
Equivalent of [[#sceSblACMgrIsKernelProgramForDriver]].<br />
<br />
<source lang="C">int sceSblACMgrIsKernelProgramForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPSMDevAssistantForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3388F595<br />
|}<br />
<br />
Temp name was sceSblACMgrIsSIEAppForKernel.<br />
<br />
Equivalent of [[#sceSblACMgrIsPSMDevAssistantForDriver]].<br />
<br />
<source lang="C">int sceSblACMgrIsPSMDevAssistantForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowLoopBackMountForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x384D20FD<br />
|}<br />
<br />
Temp name was sceSblACMgrIsAllowExtendedMemoryForKernel.<br />
<br />
Equivalent of [[#sceSblACMgrIsAllowLoopBackMountForDriver]].<br />
<br />
<source lang="C">SceBool sceSblACMgrIsAllowLoopBackMountForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsNonGameProgramForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3F99279F<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 3);<br />
<br />
<source lang="C">int sceSblACMgrIsNonGameProgramForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasSystemDataFilePlayReadyFlagForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x410357AF<br />
|}<br />
<br />
returns true if sceSblACMgrHasCapabilityForDriver(pid, 134) returns true<br />
<br />
or returns SceSysrootForDriver_E2515A08(void); if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true.<br />
<br />
<source lang="C">int sceSblACMgrHasSystemDataFilePlayReadyFlagForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPspEmuForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x47B67F72<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x2800000000000013 (NPXS10029) or 0x2800000000007009 (NPXS10069 - testkit/old PSPemu).<br />
<br />
<source lang="C">int sceSblACMgrIsPspEmuForKernel(SceUID pid);</source><br />
<br />
=== SceSblACMgrForKernel_48F4D5EE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x48F4D5EE<br />
|}<br />
<br />
Equivalent of [[#SceSblACMgrForKernel_84604EED]].<br />
<br />
<source lang="C">SceBool SceSblACMgrForKernel_48F4D5EE(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowProcessDebugForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x49509A83<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSblACMgrIsAllowCoredumpForKernel.<br />
<br />
<source lang="C">int sceSblACMgrIsAllowProcessDebugForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowCacheForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4C4B7D6B<br />
|}<br />
<br />
Equivalent of SceSblACMgrForKernel_456DA7AC.<br />
<br />
<source lang="C">int sceSblACMgrIsAllowCacheForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsNonGameOrGameProgramForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x570D6AD3<br />
|}<br />
<br />
Returns true if sceSblACMgrHasCapabilityForDriver(pid, 2); (IsGame) returns true<br />
<br />
or if sceSblACMgrHasCapabilityForDriver(pid, 3); (IsNonGame) returns true.<br />
<br />
<source lang="C">int sceSblACMgrIsNonGameOrGameProgramForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsFselfForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5AC59172<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id begins with 0x2F (fSELF).<br />
<br />
<source lang="C">int sceSblACMgrIsFselfForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasSystemDataFileFlagForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5E6BA11C<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 135);<br />
<br />
<source lang="C">int sceSblACMgrHasSystemDataFileFlagForKernel(SceUID pid);</source><br />
<br />
=== SceSblACMgrForKernel_7529E364 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7529E364<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if [[SceSblACMgr#sceSblACMgrIsGameProgramForDriver|sceSblACMgrIsGameProgramForDriver]] returns true<br />
<br />
or if [[SceSblACMgr#sceSblACMgrIsAllowMsMountForDriver|sceSblACMgrIsAllowMsMountForDriver]] returns true.<br />
<br />
<source lang="C">int SceSblACMgrForKernel_7529E364(SceUID pid);</source><br />
<br />
=== sceSblACMgrGetPaidForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x7C2AF978<br />
|}<br />
<br />
Temp name was sceSblACMgrGetProcessProgramAuthIdForKernel, sceSblACMgrGetSelfAuthInfoForKernel, sceSblACMgrGetProcessSelfAuthInfoForKernel.<br />
<br />
<source lang="C">int sceSblACMgrGetPaidForKernel(SceUID pid, SceUInt64 *pPaid);</source><br />
<br />
=== SceSblACMgrForKernel_7F294A09 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7F294A09<br />
|}<br />
<br />
Uses [[SceSysmem#sceKernelSysrootGetProcessSelfAuthInfoForKernel|sceKernelSysrootGetProcessSelfAuthInfoForKernel]].<br />
<br />
attribute + 0x10<br />
<br />
Uses [[SceSysmem#SceKernelCheckDipswForDriver|SceKernelCheckDipswForDriver]](159); // is development mode<br />
<br />
<source lang="C">int SceSblACMgrForKernel_7F294A09(SceUID pid, char *maybe_path);</source><br />
<br />
=== SceSblACMgrForKernel_8241AB5C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8241AB5C<br />
|}<br />
<br />
<source lang="C">int SceSblACMgrForKernel_8241AB5C(SceUID pid, int a2);</source><br />
<br />
=== sceSblACMgrIsSystemProgramForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x930CD037<br />
|}<br />
<br />
Temp name was sceSblACMgrIsShellForKernel.<br />
<br />
Used by "scePfsACConvertModeForRedirect".<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 1);<br />
<br />
<source lang="C">int sceSblACMgrIsSystemProgramForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowVirtualMachineForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x96403142<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
If sceSblACMgrHasCapabilityForDriver(pid, 132) returns true<br />
<br />
-> returns true<br />
<br />
else if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true<br />
<br />
-> returns SceSysrootForDriver_26AA237C(1);<br />
<br />
<source lang="C">int sceSblACMgrIsAllowVirtualMachineForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPSMRuntimeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x966B3738<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x210000101CD2000A (PCSI00010 - Unity Runtime For PlayStation®Mobile (found inside a PSM .pkg))<br />
<br />
or equals 0x2800C0101CD2000B (PCSI00011 - PSM Runtime)<br />
<br />
<source lang="C">int sceSblACMgrIsPSMRuntimeForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsUpdaterUISetupperOrPkgInstallerSpawnForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x98B28671<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id first 8 bytes equals 0x28008000<br />
<br />
(?0x2800800000000001? - never seen OR 0x2800800000000002 - gui_setupper.self<br />
<br />
OR 0x2800800000000003 - cui_setupper.self OR 2800800000000015 - NPXS10082/spawn.self - Package Installer Spawn).<br />
<br />
<source lang="C">int sceSblACMgrIsUpdaterUISetupperOrPkgInstallerSpawnForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasCapabilityForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9EDAF856<br />
|}<br />
<br />
<source lang="C">int sceSblACMgrHasCapabilityForKernel(SceUID pid, int bit);</source><br />
<br />
=== sceSblACMgrIsWebCoreOrWebKitProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA7C3001D<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x2800000000008003 (NPXS10017 and NPXS10037 - SceWebCore)<br />
<br />
OR 0x2800000000008005 (NPXS10083 and SceWebKitProcess and NPXS10084 SceWebKitProcessMini)<br />
<br />
<source lang="C">int sceSblACMgrIsWebCoreOrWebKitProcessForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowUdcdForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAF6F208E<br />
|}<br />
<br />
Temp name was sceSblACMgrIsMiniSettingsForQAForKernel.<br />
<br />
Equivalent of [[#sceSblACMgrIsAllowUdcdForDriver]].<br />
<br />
<source lang="C">SceBool sceSblACMgrIsAllowUdcdForKernel(SceUID pid);</source><br />
<br />
=== SceSblACMgrForKernel_A50FDA27 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA50FDA27<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
-> returns self_auth_info.attribute bit flag number 16 from left (---> XX XX 8X)<br />
<br />
<source lang="C">int SceSblACMgrForKernel_A50FDA27(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsDevelopmentModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBBA13D9C<br />
|}<br />
<br />
Returns [[SceKernelThreadMgr#sceKernelCheckDipswForDriver|sceKernelCheckDipswForDriver]](159);<br />
<br />
<source lang="C">int sceSblACMgrIsDevelopmentModeForKernel(void);</source><br />
<br />
=== sceSblACMgrIsPSMDevAssistantForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC90A9216<br />
|}<br />
<br />
Equivalent of sceSblACMgrIsPSMDevAssistantForDriver.<br />
<br />
<source lang="C">int sceSblACMgrIsPSMDevAssistantForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrGetMediaTypeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xD442962E<br />
|}<br />
<br />
Temp name was sceSblACMgrGetPathIdForKernel.<br />
<br />
<source lang="C">int sceSblACMgrGetMediaTypeForKernel(const char *path, SceUInt32 *pMediaType);</source><br />
<br />
=== sceSblACMgrIsAllowUsbSerialForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDC49E160<br />
|}<br />
<br />
returns true if sceSblACMgrHasCapabilityForDriver(pid, 1) returns true<br />
<br />
AND sceSblACMgrHasCapabilityForDriver(pid, 131) returns true<br />
<br />
or returns SceSysrootForDriver_26AA237C(1); if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true.<br />
<br />
<source lang="C">int sceSblACMgrIsAllowUsbSerialForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPsNowClientForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE273ED8C<br />
|}<br />
<br />
Equivalent of sceSblACMgrIsPsNowClientForDriver.<br />
<br />
<source lang="C">int sceSblACMgrIsPsNowClientForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowMsMountForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF5AD56E4<br />
|}<br />
<br />
Temp name was sceSblACMgrIsNotSandboxedForKernel.<br />
<br />
Equivalent of sceSblACMgrIsAllowMsMountForDriver.<br />
<br />
<source lang="C">SceBool sceSblACMgrIsAllowMsMountForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsSceShellForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF9FEF5F0<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x2800000000000001 (NPXS19999 - SceShell)<br />
<br />
<source lang="C">int sceSblACMgrIsSceShellForKernel(SceUID pid);</source><br />
<br />
=== SceSblACMgrForKernel_FBA1A256 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFBA1A256<br />
|}<br />
<br />
Returns 0. Probably used in very old firmwares and patched in new firmwares by making it return always false.<br />
<br />
<source lang="C">SceBool SceSblACMgrForKernel_FBA1A256(void);</source><br />
<br />
=== SceSblACMgrForKernel_FB2AC5B4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFB2AC5B4<br />
|}<br />
<br />
<source lang="C">int SceSblACMgrForKernel_FB2AC5B4(SceUID pid, char *maybe_path);</source><br />
<br />
=== SceSblACMgrForKernel_356B9139 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x356B9139<br />
|}<br />
<br />
Equivalent of SceSblACMgrForKernel_FF7125DE.<br />
<br />
<source lang="C">int SceSblACMgrForKernel_356B9139(int unused, const char *path, int *a3);</source><br />
<br />
== SceSblACMgrForDriver ==<br />
<br />
=== sceSblACMgrIsWebCoreOrWebKitProcessForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0139FC20<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x2800000000008003 (NPXS10017 and NPXS10037 - SceWebCore)<br />
<br />
OR 0x2800000000008005 (NPXS10083 and SceWebKitProcess and NPXS10084 SceWebKitProcessMini)<br />
<br />
<source lang="C">int sceSblACMgrIsWebCoreOrWebKitProcessForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowUsbSerialForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x062CAEB2<br />
|}<br />
<br />
returns true if sceSblACMgrHasCapabilityForDriver(pid, 1) returns true<br />
<br />
AND sceSblACMgrHasCapabilityForDriver(pid, 131) returns true<br />
<br />
or returns SceSysrootForDriver_26AA237C(1); if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true.<br />
<br />
<source lang="C">int sceSblACMgrIsAllowUsbSerialForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPSMRuntimeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x091F7247<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x210000101CD2000A (PCSI00010 - Unity Runtime For PlayStation®Mobile (found inside a PSM .pkg))<br />
<br />
or equals 0x2800C0101CD2000B (PCSI00011 - PSM Runtime)<br />
<br />
<source lang="C">int sceSblACMgrIsPSMRuntimeForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPsNowClientForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0924896F<br />
|}<br />
<br />
Derived from [[SceAppMgr#sceAppMgrIsPsNowClient|sceAppMgrIsPsNowClient]].<br />
<br />
<source lang="C">int sceSblACMgrIsPsNowClientForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsKernelProgramForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0948F41C<br />
|}<br />
<br />
Temp name was sceSblACMgrIsSystemForDriver, sceSblACMgrIsRootProgramForDriver.<br />
<br />
Equivalent of [[#sceSblACMgrIsKernelProgramForKernel]].<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 0);<br />
<br />
<source lang="C">int sceSblACMgrIsKernelProgramForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowMsMountForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0B6E6CD7<br />
|}<br />
<br />
Temp name was sceSblACMgrIsNotSandboxedForDriver.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals :<br />
<br />
0x2800000000000013 (NPXS100028 - ScePspEmu)<br />
<br />
OR 0x2800000000007009 (NPXS10069 - ScePspEmu old/testkit)<br />
<br />
OR 0x2800000000000010 (NPXS10104 - Mini Settings For QA)<br />
<br />
OR 0x280000000000002D (NPXS10026 - CMA)<br />
<br />
OR 0x2800000000000022 (NPXS10027 - SceGameManual)<br />
<br />
OR 0x2800000000000039 (NPXS10079 - Daily Checker BG)<br />
<br />
OR 0x2800000000000001 (NPXS19999 - SceShell)<br />
<br />
<source lang="C">SceBool sceSblACMgrIsAllowMsMountForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsGameProgramForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1298C647<br />
|}<br />
<br />
Derived from [[SceAppMgr#sceAppMgrIsGameProgram|sceAppMgrIsGameProgram]].<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id begins with 0x21 (game) or 0x2F (fSELF).<br />
<br />
<source lang="C">int sceSblACMgrIsGameProgramForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowVirtualMachineForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2A29453C<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
If sceSblACMgrHasCapabilityForDriver(pid, 132) returns true<br />
<br />
-> returns true<br />
<br />
else if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true<br />
<br />
-> returns SceSysrootForDriver_26AA237C(1);<br />
<br />
<source lang="C">int sceSblACMgrIsAllowVirtualMachineForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_2E992B02 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2E992B02<br />
|}<br />
<br />
<source lang="C">int SceSblACMgrForDriver_2E992B02(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsFselfForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x426A4E8C<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id begins with 0x2F (fSELF).<br />
<br />
<source lang="C">int sceSblACMgrIsFselfForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrGetMediaTypeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x4322F188<br />
|}<br />
<br />
<source lang="C">int sceSblACMgrGetMediaTypeForDriver(const char *path, int *pMediaType);</source><br />
<br />
=== sceSblACMgrIsAllowCacheForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x456DA7AC<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true:<br />
* if [[SceSblACMgr#sceSblACMgrHasCapabilityForDriver|sceSblACMgrHasCapabilityForDriver]](pid, 3); returns true<br />
* or if program_authority_id is between 0x0x210000101CD20007 and 0x0x21000010â€1CD20009‬ (PSM Dev Assistant apps)<br />
* or if fSELF and SceSysrootForDriver_26AA237C returns true<br />
<br />
<source lang="C">SceBool sceSblACMgrIsAllowCacheForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_48CFCEA2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x48CFCEA2<br />
|}<br />
<br />
<source lang="C">int SceSblACMgrForDriver_48CFCEA2(SceUID pid, int *a2, int *a3, int flags);</source><br />
<br />
=== sceSblACMgrIsAllowProcessDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4CBD6156<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSblACMgrIsAllowCoredumpForDriver.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true:<br />
* if program_authority_id first 8 bytes equals 0x28000000 AND sceSblQafMgrIsAllowSystemAppDebugForDriver returns false<br />
* if self_auth_info.attribute flag 16 is set<br />
* if program_authority_id first 8 bytes equals 0x22000000 or 0x21000000 AND SceSysrootForDriver_56D85EB0 returns true AND SceQafMgrForDriver_694D1096 returns true<br />
<br />
<source lang="C">int sceSblACMgrIsAllowProcessDebugForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_84604EED ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x84604EED<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 31);<br />
<br />
<source lang="C">SceBool SceSblACMgrForDriver_84604EED(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowLoopBackMountForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4DB7F512<br />
|}<br />
<br />
Temp name was sceSblACMgrIsAllowExtendedMemoryForDriver.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x280000000000001E (NPXS10010 - Videos) or 0x2800000000000010 (NPXS10104 - Mini Settings for QA) or 0x2800000000000031 (NPXS10036 - AVMediaService) or 0x220000101CC73883 (a certain nongame program???)<br />
<br />
or if sceSblACMgrHasCapabilityForDriver(pid, 130) returns true.<br />
<br />
<source lang="C">SceBool sceSblACMgrIsAllowLoopBackMountForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsUnityRuntimeForPSMForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5C4BC352<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
<source lang="C">int sceSblACMgrIsUnityRuntimeForPSMForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_5F9AF49C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5F9AF49C<br />
|}<br />
<br />
might sceSblACMgrIsMediaAccessibleProgram.<br />
<br />
[[SceAppMgr]] will pass some drive list to this function and if it returns SCE_FALSE, it will add invalid overlay for that drive.<br />
<br />
Checks if program_authority_id begins with 0x21 (game) or with 0x2F (fSELF) and does different things accordingly.<br />
<br />
Calls sceKernelCheckDipswForDriver(159) and does different things according to the result.<br />
<br />
<source lang="C">int SceSblACMgrForDriver_5F9AF49C(SceUID pid, const char *drive);</source><br />
<br />
=== SceSblACMgrForDriver_3B356B98 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x3B356B98<br />
|}<br />
<br />
Maybe sceSblACMgrGetFSAttributeByModeForDriver.<br />
<br />
Same as [[#SceSblACMgrForKernel_11C9158B]].<br />
<br />
<source lang="C">int SceSblACMgrForDriver_3B356B98(void* input, void* output);</source><br />
<br />
=== sceFatfsACSetFSAttributeByPermissionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6210D745<br />
|}<br />
<br />
Temp name was sceSblACMgrSetFSAttributeByModeForDriver.<br />
<br />
<source lang="C">int sceFatfsACSetFSAttributeByPermissionForDriver(SceUID pid, st_attr_info *a2, int flags);</source><br />
<br />
=== sceSblACMgrGetFSAttributeByThreadAccessLevelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x0606B87E<br />
|}<br />
<br />
<source lang="C">int sceSblACMgrGetFSAttributeByThreadAccessLevelForDriver(int a1, int a2, int *a3);</source><br />
<br />
=== sceSblACMgrIsNonGameProgramForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6C5AB07F<br />
|}<br />
<br />
Derived from [[SceAppMgr#sceAppMgrIsNonGameProgram|sceAppMgrIsNonGameProgram]].<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 3);<br />
<br />
<source lang="C">int sceSblACMgrIsNonGameProgramForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_6D8A88B7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6D8A88B7<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if [[SceSblACMgr#sceSblACMgrIsGameProgramForDriver|sceSblACMgrIsGameProgramForDriver]] returns true<br />
<br />
or if [[SceSblACMgr#sceSblACMgrIsAllowMsMountForDriver|sceSblACMgrIsAllowMsMountForDriver]] returns true.<br />
<br />
<source lang="C">int SceSblACMgrForDriver_6D8A88B7(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsSystemProgramForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8612B243<br />
|}<br />
<br />
Temp name was sceSblACMgrIsShellForDriver.<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 1);<br />
<br />
<source lang="C">int sceSblACMgrIsSystemProgramForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsNonGameOrGameProgramForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8A54DF3A<br />
|}<br />
<br />
Returns true if sceSblACMgrHasCapabilityForDriver(pid, 2); (IsGame) returns true<br />
<br />
or if sceSblACMgrHasCapabilityForDriver(pid, 3); (IsNonGame) returns true.<br />
<br />
<source lang="C">int sceSblACMgrIsNonGameOrGameProgramForKernel(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsUpdaterUISetupperOrPkgInstallerSpawnForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x962CD237<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id first 8 bytes equals 0x28008000<br />
<br />
(?0x2800800000000001? - never seen OR 0x2800800000000002 - gui_setupper.self<br />
<br />
OR 0x2800800000000003 - cui_setupper.self OR 2800800000000015 - NPXS10082/spawn.self - Package Installer Spawn).<br />
<br />
<source lang="C">int sceSblACMgrIsUpdaterUISetupperOrPkgInstallerSpawnForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrGetPaidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x96AF69BD<br />
|}<br />
<br />
Temp name was sceSblACMgrGetProcessProgramAuthIdForDriver, sceSblACMgrGetSelfAuthInfoForDriver, sceSblACMgrGetProcessSelfAuthInfoForDriver.<br />
<br />
<source lang="C">int sceSblACMgrGetPaidForDriver(SceUID pid, SceUInt64 *pPaid);</source><br />
<br />
=== sceSblACMgrIsSceShellForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x991FDC15<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x2800000000000001 (NPXS19999 - SceShell)<br />
<br />
<source lang="C">int sceSblACMgrIsSceShellForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasMagicGateFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA27E47A7<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 129);<br />
<br />
<source lang="C">int sceSblACMgrHasMagicGateFlagForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPSMDevAssistantForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA67E8E5B<br />
|}<br />
<br />
Temp name was sceSblACMgrIsSIEAppForDriver.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id is between 0x210000101CD20007 and 0x210000101CD20009 (PSM Dev Assistant apps).<br />
<br />
<source lang="C">int sceSblACMgrIsPSMDevAssistantForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasSystemDataFileFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA92CD636<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 135);<br />
<br />
<source lang="C">int sceSblACMgrHasSystemDataFileFlagForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasUserDebugFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAD717E7A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Used by [[SceDeci4pLoadp]], [[SceDeci4pDbgp]]<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 32);<br />
<br />
<source lang="C">int sceSblACMgrHasUserDebugFlagForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAE1AF154<br />
|}<br />
<br />
returns true if sceSblACMgrHasCapabilityForDriver(pid, 134) returns true<br />
<br />
or returns SceSysrootForDriver_E2515A08(void); if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true.<br />
<br />
<source lang="C">int sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_B12CEAA8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB12CEAA8<br />
|}<br />
<br />
Seems to check some bit flags.<br />
<br />
Used by SceExfatfs in VFS implementation functions: sceVfsNodeChstatForDriver and sceVfsNodeChstatByFdForDriver<br />
<br />
<source lang="C">int SceSblACMgrForDriver_B12CEAA8(SceUID pid, st_attr_info *a1, st_attr_info *a2);</source><br />
<br />
=== SceSblACMgrForDriver_B836CF13 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB836CF13<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
-> returns self_auth_info.attribute bit flag number 16 from left (---> XX XX 8X)<br />
<br />
<source lang="C">int SceSblACMgrForDriver_B836CF13(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_BE5667C5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBE5667C5<br />
|}<br />
<br />
<source lang="C">int SceSblACMgrForDriver_BE5667C5(SceUID pid, st_attr_info *a2, int a3);</source><br />
<br />
=== sceSblACMgrHasCapabilityForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC2D1F2FC<br />
|}<br />
<br />
<source lang="C">int sceSblACMgrHasCapabilityForDriver(SceUID pid, int bit);</source><br />
<br />
=== sceSblACMgrIsPSMDevAssistantForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC98D82EE<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x210000101CD20007 (PCSI00007 - PlayStation®Mobile Development Assistant)<br />
<br />
AND [[SceSblACMgr#sceSblACMgrIsPSMRuntimeForDriver|sceSblACMgrIsPSMRuntimeForDriver]] returns true.<br />
<br />
or returns SceSysrootForDriver_26AA237C(void); if [[SceSblACMgr#sceSblACMgrIsFselfForDriver|sceSblACMgrIsFselfForDriver]] returns true.<br />
<br />
<source lang="C">int sceSblACMgrIsPSMDevAssistantForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsAllowUdcdForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD0E11C89<br />
|}<br />
<br />
Temp name was sceSblACMgrIsMiniSettingsForQAForDriver.<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x2800000000000010 (NPXS10104 - Mini Settings for QA)<br />
<br />
or if program_authority_id equals 0x220000101CC73883 (a certain nongame program???)<br />
<br />
or if sceSblACMgrHasCapabilityForDriver(pid, 130) returns true.<br />
<br />
<source lang="C">SceBool sceSblACMgrIsAllowUdcdForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_D7AD8471 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD7AD8471<br />
|}<br />
<br />
<source lang="C">int SceSblACMgrForDriver_D7AD8471(SceUID pid, char *maybe_path);</source><br />
<br />
=== SceSblACMgrForDriver_E79C7A8D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE79C7A8D<br />
|}<br />
<br />
A guessed name is sceSblACMgrIsVs0UserDriveAccessibleProgramForDriver.<br />
<br />
Same as [[#SceSblACMgrForKernel_165C3C7A]].<br />
<br />
<source lang="C">SceBool SceSblACMgrForDriver_E79C7A8D(SceUID pid, const SceChar8 *path);</source><br />
<br />
=== sceSblACMgrIsDevelopmentModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xE87D1777<br />
|}<br />
<br />
Derived from [[SceAppMgr#sceAppMgrIsDevelopmentMode|sceAppMgrIsDevelopmentMode]].<br />
<br />
Returns [[SceKernelThreadMgr#sceKernelCheckDipswForDriver|sceKernelCheckDipswForDriver]](159);<br />
<br />
<source lang="C">int sceSblACMgrIsDevelopmentModeForDriver(void);</source><br />
<br />
=== sceSblACMgrHasMarlinFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF5AE24AC<br />
|}<br />
<br />
return sceSblACMgrHasCapabilityForDriver(pid, 128);<br />
<br />
<source lang="C">int sceSblACMgrHasMarlinFlagForDriver(SceUID pid);</source><br />
<br />
=== sceSblACMgrIsPspEmuForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFD00C72A<br />
|}<br />
<br />
Calls [[SceSblACMgr#sceSblACMgrGetPaidForDriver|sceSblACMgrGetPaidForDriver]] to get program_authority_id.<br />
<br />
Returns true if program_authority_id equals 0x2800000000000013 (NPXS10029) or 0x2800000000007009 (NPXS10069 - testkit/old PSPemu).<br />
<br />
<source lang="C">int sceSblACMgrIsPspEmuForDriver(SceUID pid);</source><br />
<br />
=== SceSblACMgrForDriver_FF7125DE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFF7125DE<br />
|}<br />
<br />
Gets some info for path.<br />
<br />
<source lang="C">int SceSblACMgrForDriver_FF7125DE(int unused, const char *path, int *a3);</source><br />
<br />
== SceSblACMgr ==<br />
<br />
=== _sceSblACMgrIsGameProgram ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3C17A7F7<br />
|}<br />
<br />
<source lang="C">int _sceSblACMgrIsGameProgram(int *result);</source><br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21153
NID
2024-03-25T18:16:07Z
<p>CelesteBlue: </p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" prefix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + downcase(shortened(libname))<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | uppercase(camel_case("Sce"^-1 + libname))<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> ([[ScePaf]] module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> ([[ScePafWebMapView]] module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + psvita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Per library NID suffix ==<br />
<br />
Theorem (Graphene): Every PS Vita function/variable NID suffix is per library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
== Per library function naming ==<br />
<br />
Theorem (CelesteBlue): When a PS Vita library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]] function inside [[SceAvcdecForPlayer#SceAvcdecForPlayer]] library.<br />
<br />
== Function or variable NID change ==<br />
<br />
Theorem (CelesteBlue): When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21151
NID
2024-03-24T15:30:25Z
<p>CelesteBlue: /* Known plaintext suffixes */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" suffix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | libname<br />
|-<br />
| ?SceAvcodecUser? || ?SceAvcodecUser?<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | libname + "User"<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | "Sce"^-1 + libname<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | "lib" + downcase(shortened(libname))<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | "lib" + libname<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | "Sce"^-1 + uppercase(libname)<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> (?ScePafWebMapView? module) || PAF_WEB_MAP_VIEW<br />
|-<br />
! colspan="2" | ?modulename?<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|-<br />
! colspan="2" | No pattern<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Per library NID suffix ==<br />
<br />
Theorem (Graphene): PS Vita function/variable NID suffix is per library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
== Per library function naming ==<br />
<br />
Theorem (CelesteBlue): When a library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]].<br />
<br />
== Function or variable NID change ==<br />
<br />
Theorem (CelesteBlue): When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21150
NID
2024-03-24T15:21:49Z
<p>CelesteBlue: /* Per library NID suffix */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" suffix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Per library NID suffix ==<br />
<br />
Theorem (Graphene): PS Vita function/variable NID suffix is per library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though module name could be the same as the suffix. For example the "User" appendix in suffix and/or in module name and/or in library name can be confusing.<br />
<br />
== Per library function naming ==<br />
<br />
Theorem (CelesteBlue): When a library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]].<br />
<br />
== Function or variable NID change ==<br />
<br />
Theorem (CelesteBlue): When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21149
NID
2024-03-24T15:20:10Z
<p>CelesteBlue: /* NID Theory */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" suffix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Per library NID suffix ==<br />
<br />
Theorem (Graphene): PS Vita function/variable NID suffix is per library.<br />
<br />
Proof: see avcodec_us.elf.<br />
<br />
Remark: NID suffix is not per module even though it could be set to the same value. It is always the library name that gives the NID suffix, even though the "User" appendix can be confusing.<br />
<br />
== Per library function naming ==<br />
<br />
Theorem (CelesteBlue): When a library name is "SceXForY" then the functions names are usually "sceXForYCommand".<br />
<br />
Proof: see [[SceAvcdecForPlayer#sceAvcdecForPlayerDecodeStop]].<br />
<br />
== Function or variable NID change ==<br />
<br />
Theorem (CelesteBlue): When a PS Vita function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
== Algorithm for unknown official names ==<br />
<br />
Conjecture: It is possible that for some libraries, SCE switched from sha1 to sha256 algorithm at some point on PS Vita because everywhere PS3 used sha1, PS Vita and PS4 used instead sha256. It would mean that when bruteforcing the suffix of a library, we are not even sure if the algorithm is still sha1(name+suffix).<br />
<br />
Proof: We have no evidence that sha256 is used for any PS Vita NID.<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21148
NID
2024-03-24T15:04:30Z
<p>CelesteBlue: /* Calculation */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* On the HENkaku wiki, most kernel functions/variables names have an added "For..." suffix that has to be removed for NID computation.<br />
* In the vitasdk headers, most kernel functions/variables names have an added "k" suffix that has to be removed for NID computation.<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Function or Variable NID change ==<br />
<br />
Theorem (CelesteBlue): When a function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21147
NID
2024-03-24T14:58:27Z
<p>CelesteBlue: /* Remarks */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Function or Variable NID change ==<br />
<br />
Theorem (CelesteBlue): When a function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
= Remarks =<br />
<br />
* See [https://forum.devchroma.nl/index.php/topic,111.0.html article by dots-tb]<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21146
NID
2024-03-24T14:56:13Z
<p>CelesteBlue: /* NID Theory */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
== Function or Variable NID change ==<br />
<br />
Theorem (CelesteBlue): When a function/variable NID changes, its name has been changed or its library NID has been changed or both.<br />
<br />
Proof:<br />
<br />
When a typo in function/variable name is fixed, the function/variable NID changes as in:<br />
* [[SceLowio#sceDsiQeuryResolutionSizeForDriver]] that became [[SceLowio#sceDsiQueryResolutionSizeForDriver]]<br />
<br />
= Remarks =<br />
<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21145
NID
2024-03-24T14:45:09Z
<p>CelesteBlue: </p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source><br />
<br />
= NID Theory =<br />
<br />
= Remarks =<br />
<br />
* In PS Vita System Software version 0.990, [[SceSqliteVsh]] and [[SceSqlite]] modules shared the same suffix despite having nothing in common.<br />
* In PS Vita System Software version 0.990, [[SceLibMtp]] ?module? was named libmtp. Later the library name was changed to SceLibMtp, but NID suffix remained the same.<br />
* JSStringCreateWithUTF8CString -> SHA1 match with javascriptcore_5487D441<br />
* javascriptcore is also known as libSceJsc.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21144
NID
2024-03-24T14:36:01Z
<p>CelesteBlue: /* Known plaintext suffixes */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
| SceSas (in SceSasUser module) || SceSasUser<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source></div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21143
NID
2024-03-24T14:31:59Z
<p>CelesteBlue: </p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> (ScePaf module) || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|-<br />
| All libraries in <code>paflib.suprx</code> (some SCE downloadable apps like LiveTweet, Flickr) || ScePafLib<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source></div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21142
NID
2024-03-24T14:19:10Z
<p>CelesteBlue: </p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
= Usage =<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that needs to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules. This reveals much less information to attackers.<br />
* Lookup inside a NID table is faster.<br />
** Equality testing is a simple 32-bit comparison instead of a costly <code>strncmp()</code> of length <code>strlen(name)</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
= Calculation =<br />
<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Compute the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* For C++ symbols, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
== Suffixless NIDs ==<br />
<br />
=== Example ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
=== Known suffixless libraries ===<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| Most PSP libraries before some System Software version around 3.50<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
== Plaintext Suffix NIDs ==<br />
<br />
=== Example ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
<br />
=== Known plaintext suffixes ===<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All PS3 libraries except NONAME ones || 0xbc5eba9e042504905b64274994d9c41f<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|}<br />
<br />
== Binary Suffix NIDs ==<br />
<br />
Used for PS Vita [[Modules#NONAME_exports|NONAME exports]] and PS3 named exports.<br />
<br />
=== Example ===<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
=== Known binary suffixes ===<br />
<br />
<source lang="c"><br />
// Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
// Suffix for PSP2 NONAME library NIDs derivation.<br />
const char PSP2_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source></div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=NID&diff=21141
NID
2024-03-24T13:46:29Z
<p>CelesteBlue: /* Known suffixless libraries */</p>
<hr />
<div>Abbreviation of '''N'''umeric '''Id'''entifier.<br />
<br />
== Usage ==<br />
<br />
Dynamic linking of modules (by [[SceKernelModulemgr]]) is performed based on NIDs of functions/variables instead of names.<br />
<br />
For example, a module that wants to import [[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]] will indicate that it needs <code>SceDisplayForDriver:0xEEDA2E54</code> in [[Modules#Imports|its libstub structures]].<br />
<br />
This solution provides multiple benefits:<br />
* Names of functions and variables are not included in modules - this reveals much less information to attackers<br />
* Lookup inside a NID table is faster<br />
** Equality testing is a simple 32-bit comparison instead of a costy <code>strncmp()</code>.<br />
** A dichotomic search can be performed in <code>O(log2(n))</code> if NID tables are sorted.<br />
*** While NID tables appear to be sorted, this optimization is seemingly not used by SCE.<br />
<br />
== Calculation ==<br />
By default, NIDs are derived from a symbol's name using the following algorithm:<br />
# Calculate the SHA-1 hash of the (optionally salted) name: <code>hash = sha1(name + suffix) = ZZ YY XX WW VV UU TT SS RR QQ PP OO NN MM LL KK JJ II HH GG </code><br />
#* <code>suffix</code> acts as salt and may be a string or raw binary data<br />
#* <code>name + suffix</code> corresponds to concatenation in this context<br />
#** For example, <code>name="sceFunc"</code> and <code>suffix="MySuffix"</code> results in <code>hash = sha1("sceFuncMySuffix")</code><br />
# Truncate the result to 32 bits: <code>tr = truncate32(hash) = 0xZZYYXXWW</code><br />
# Reverse endianness of the truncated result: <code>NID = swap32(tr) = 0xWWXXYYZZ</code><br />
<br />
Notes:<br />
* For C++, derivation is performed using the symbol's mangled name.<br />
* <code>libname_nid</code> is derived using the same suffix as the rest of the library.<br />
** Since library names are always known, this makes it (in theory) possible to bruteforce the suffix used for NID derivation of any library.<br />
* The NID of functions and variables can be set to arbitrary values.<br />
** It is possible to encounter NIDs that do not match the "expected" NID found by deriving using this algorithm.<br />
* The [https://creepnt.stream/vita/nid_help.html following online tool] can be used for NID calculations.<br />
<br />
=== Example 1: suffixless ===<br />
<br />
[[SceDisplay#sceDisplayGetFrameBufForDriver|sceDisplayGetFrameBuf]]<br />
<br />
<source lang="c"><br />
sha1("sceDisplayGetFrameBuf") = 54 2E DA EE DA 61 8E 3F 07 9A C7 46 92 24 6D F1 2A A8 F7 C7<br />
<br />
Truncate to 32 bits: 0x542EDAEE<br />
Reverse endianness: 0xEEDA2E54<br />
<br />
The NID of sceDisplayGetFrameBuf is 0xEEDA2E54.<br />
</source><br />
<br />
==== Known suffixless libraries ====<br />
<br />
Verifying that a library does not use a suffix for NID derivation is trivial: derive a NID based on the library name and check if it matches the <code>libname_nid</code> field of the [[Modules#Exports|libent]] structure of that library.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! List of known suffixless libraries<br />
|-<br />
| SceKblForKernel<br />
|-<br />
| ScePowerForDriver<br />
|-<br />
| SceDisplayForDriver<br />
|-<br />
| SceHpremoteForDriver<br />
|-<br />
| SceFt2<br />
|-<br />
| SceKernelForMono<br />
|-<br />
| SceKernelForVM<br />
|-<br />
| SceRtabi<br />
|}<br />
<br />
=== Example 2: plaintext suffix ===<br />
<br />
The [[SceShellSvc#SceIpmi|SceIpmi]] library uses <code>libipmi</code> as suffix.<br />
<br />
<source lang="c"><br />
//N.B. "SceIpmilibipmi" is "SceIpmi" + "libipmi<br />
sha1("SceIpmilibipmi") = DB 4E E3 F4 E9 A8 6C 3F 79 4B 5A 28 CF 26 07 36 14 42 70 B0<br />
<br />
Truncate to 32 bits: 0xDB4EE3F4<br />
Reverse endianness: 0xF4E34EDB<br />
<br />
NID of the SceIpmi library is 0xF4E34EDB.<br />
</source><br />
<br />
For C++ exports, the NID is derived from the mangled name.<br />
<source lang="cpp"><br />
//IPMI::Client::Config::estimateClientMemorySize() =mangling=> _ZN4IPMI6Client6Config24estimateClientMemorySizeEv<br />
sha1("_ZN4IPMI6Client6Config24estimateClientMemorySizeEvlibipmi") = 31 5C 25 4E FE AE B4 34 CA B5 9F 43 03 3D 62 BC 11 6F FC AB<br />
<br />
Truncate to 32 bits: 0x315C254E<br />
Reverse endianness: 0x4E255C31<br />
<br />
The NID of IPMI::Client::Config::estimateClientMemorySize() is 0x4E255C31.<br />
</source><br />
==== Known plaintext suffixes ====<br />
<br />
Plaintext suffixes follow patterns across some modules.<br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! colspan="2" | List of libraries with a known plaintext suffix<br />
|-<br />
! Library name !! Suffix<br />
|-<br />
! colspan="2" | Library name<br />
|-<br />
| SceAvcdecForPlayer || SceAvcdecForPlayer<br />
|-<br />
| SceAudiodecUser || SceAudiodecUser<br />
|-<br />
| SceAudioencUser || SceAudioencUser<br />
|-<br />
| SceCodecEngineUser || SceCodecEngineUser<br />
|-<br />
| SceJpegUser || SceJpegUser<br />
|-<br />
| SceJpegEncUser || SceJpegEncUser<br />
|-<br />
| SceLibMonoBridge || SceLibMonoBridge<br />
|-<br />
| SceVideodecUser || SceVideodecUser<br />
|-<br />
| SceVideodecAsyncUser || SceVideodecAsyncUser<br />
|-<br />
| SceVideodecLowDelayUser || SceVideodecLowDelayUser<br />
|-<br />
| SceVideodecRecoveryPointUser || SceVideodecRecoveryPointUser<br />
|-<br />
| SceVideoencUser || SceVideoencUser<br />
|-<br />
! colspan="2" | Library name + User<br />
|-<br />
| SceAtrac || SceAtracUser<br />
|-<br />
| SceG729 || SceG729User<br />
|-<br />
! colspan="2" | Library name without Sce<br />
|-<br />
| SceWebUIPlugin || WebUIPlugin<br />
|-<br />
| SceAppSettings || AppSettings<br />
|-<br />
| SceBackupRestore || BackupRestore <br />
|-<br />
| SceDbRecovery || DbRecovery<br />
|-<br />
| SceLibLocationPermission || LibLocationPermission<br />
|-<br />
! colspan="2" | libXXX<br />
|-<br />
| SceLibMtp || libmtp<br />
|-<br />
| [[SceShellSvc#SceIpmi|SceIpmi]] || libipmi<br />
|-<br />
! colspan="2" | lib + Library name<br />
|-<br />
| ScePsp2Compat || libScePsp2Compat<br />
|-<br />
| SceWebKit || libSceWebKit<br />
|-<br />
! colspan="2" | Others<br />
|-<br />
| All libraries in <code>libpaf.suprx</code> || PAF<br />
|-<br />
| All libraries in <code>libpaf_web_map_view.suprx</code> || PAF_WEB_MAP_VIEW<br />
|}<br />
<br />
=== Example 3: binary suffix ===<br />
<br />
Used for [[Modules#NONAME_exports|NONAME exports]].<br />
<br />
<source lang="c"><br />
sha1("module_start" + vita_NONAME_lib_nid_suffix) = 96 D1 5C 93 65 10 32 1C 7D 60 7B 4D FC 06 BC 73 06 3E 25 61<br />
<br />
Truncate to 32 bits: 0x96D15C93<br />
Reverse endianness: 0x935CD196<br />
<br />
The NID of module_start is 0x935CD196.<br />
</source><br />
<br />
==== Known binary suffixes ====<br />
The following suffixes are used by SCE for NID derivation:<br />
<br />
<source lang="c"><br />
//Default suffix for all PS3 NIDs derivations, except NONAME library.<br />
const char PS3_default_nid_suffix[] = {<br />
0x67, 0x59, 0x65, 0x99, 0x04, 0x25, 0x04, 0x90, 0x56, 0x64, 0x27, 0x49, 0x94, 0x89, 0x74, 0x1a<br />
};<br />
<br />
//Suffix for PS3 NONAME library NIDs derivation.<br />
const char PS3_NONAME_lib_nid_suffix[] = {<br />
0xbc, 0x5e, 0xba, 0x9e, 0x04, 0x25, 0x04, 0x90, 0x5b, 0x64, 0x27, 0x49, 0x94, 0xd9, 0xc4, 0x1f<br />
};<br />
<br />
//Suffix for Vita NONAME library NIDs derivation.<br />
const char vita_NONAME_lib_nid_suffix[] = {<br />
0xc1, 0xb8, 0x86, 0xaf, 0x5c, 0x31, 0x84, 0x64, 0x67, 0xe7, 0xba, 0x5e, 0x2c, 0xff, 0xd6, 0x4a<br />
};<br />
</source></div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSysmem&diff=21130
SceSysmem
2024-02-24T19:46:35Z
<p>CelesteBlue: /* SceSysrootForKernel */</p>
<hr />
<div>SceSysmem is a kernel module that acts as the heart of the kernel. It exports multiple libraries for various features. SceSysmem is the first module that is loaded in the [[Boot Sequence|kernel load sequence]] and its libraries are imported by almost all other modules. See [[Virtual Memory]] and [[Physical Memory]] for more details on the memory subsystem.<br />
<br />
== Module ==<br />
<br />
This module exists in both non-secure and secure world. The non-secure world SELF can be found in <code>os0:kd/sysmem.skprx</code>. It also can be found in the [[Boot Sequence|Boot Image]].<br />
<br />
{| class="wikitable"<br />
! Version !! World !! Privilege<br />
|-<br />
| 1.50-3.61 || Non-secure || Kernel<br />
|-<br />
| 1.69-1.80 || Secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
{| class="wikitable"<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceSysmemForKernel|SceSysmemForKernel]] || Non-secure || Kernel || 0x63A519E5<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceSysmemForKernel|SceSysmemForKernel]] || Non-secure || Kernel || 0x02451F0F<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysmemForDriver|SceSysmemForDriver]] || Non-secure || Kernel || 0x6F25E18A<br />
|-<br />
| 0.990-1.692 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || 0xC7309957<br />
|-<br />
| 1.80-3.74 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || not present. Removed.<br />
|-<br />
| 0.990-3.60 || [[SceSysmem#SceSysmem|SceSysmem]] || Non-secure || User || 0x37FE725A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDipsw|SceDipsw]] || Non-secure || User || 0xB36D5922<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDipswForDriver|SceDipswForDriver]] || Non-secure || Kernel || 0xC9E26388<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceUartForKernel|SceUartForKernel]] || Non-secure || Kernel || 0xC03DBE40<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceUartForKernel|SceUartForKernel]] || Non-secure || Kernel || 0x1CCD9BA3<br />
|-<br />
| 0.990-3.740.011 || [[SceSysmem#SceCpu|SceCpu]] || Non-secure || User || 0x45265161<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0x54BF2BAB<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0xA5195D20<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E<br />
|-<br />
| 0.990-1.692 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || 0x24878615<br />
|-<br />
| 1.80-3.74 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || not present. Removed.<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysclibForDriver|SceSysclibForDriver]] || Non-secure || Kernel || 0x7EE45391<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysrootForKernel|SceSysrootForKernel]] || Non-secure || Kernel || 0x3691DA45<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysrootForDriver|SceSysrootForDriver]] || Non-secure || Kernel || 0x2ED7F97A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4<br />
|-<br />
| 0.990-1.692 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E<br />
|-<br />
| 1.80-3.74 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || not present. Moved to [[SceSblPostSsMgr#SceZlibForDriver]].<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceQafMgrForDriver|SceQafMgrForDriver]] || Non-secure || Kernel || 0x4E29D3B6<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#ScePmMgrForDriver|ScePmMgrForDriver]] || Non-secure || Kernel || 0xF13F32F9<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSblAIMgrForDriver|SceSblAIMgrForDriver]] || Non-secure || Kernel || 0xFD00C69A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceProcEventForDriver|SceProcEventForDriver]] || Non-secure || Kernel || 0x887F19D0<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDebugLed|SceDebugLed]] || Non-secure || User || 0xAE004C0A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDebugLedForDriver|SceDebugLedForDriver]] || Non-secure || Kernel || 0x7BC05EAD<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceDebugForKernel|SceDebugForKernel]] || Non-secure || Kernel || 0x88C17370<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceDebugForKernel|SceDebugForKernel]] || Non-secure || Kernel || 0x13D793B7<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDebugForDriver|SceDebugForDriver]] || Non-secure || Kernel || 0x88758561<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSysmemForTZS|SceSysmemForTZS]] || Secure || Kernel || 0x08680060<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceDipswForTZS|SceDipswForTZS]] || Secure || Kernel || 0x9DBF584C<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceUartForTZS|SceUartForTZS]] || Secure || Kernel || 0xA1D740D7<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceDebugForTZS|SceDebugForTZS]] || Secure || Kernel || 0x028FFADB<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceCpuForTZS|SceCpuForTZS]] || Secure || Kernel || 0xC516B23E<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSysclibForTZS|SceSysclibForTZS]] || Secure || Kernel || 0xC839BB78<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSysrootForTZS|SceSysrootForTZS]] || Secure || Kernel || 0xFEFF641D<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceQafMgrForTZS|SceQafMgrForTZS]] || Secure || Kernel || 0x637069DD<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#ScePmMgrForTZS|ScePmMgrForTZS]] || Secure || Kernel || 0x27F1AFD8<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSblAIMgrForTZS|SceSblAIMgrForTZS]] || Secure || Kernel || 0x60D19047<br />
|}<br />
<br />
The SceCpu libraries provide wrappers for much ARM CP15 co-processor access as well as low level support of spinlocks and other synchronization primitives.<br />
<br />
== Types ==<br />
<br />
See [[SceSysmem Types]].<br />
<br />
== SysEvent ==<br />
<br />
Dispatcher<br />
<br />
{| class="wikitable sortable mw-collapsible mw-collapsed"<br />
|-<br />
! Module !! Type !! Event !! Description<br />
|-<br />
| [[ScePower]] || 0 || 0x100 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_START</code>. before sceKernelCpuSuspendIntr.<br />
|-<br />
| [[ScePower]] || 0 || 0x101 || unknown<br />
|-<br />
| [[ScePower]] || 0 || 0x102 || unknown. later sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 0 || 0x20F -> 0x200 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE2</code>. after sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 0 || 0x400 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_START</code>.<br />
|-<br />
| [[ScePower]] || 0 || 0x401 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_MAIN</code>. (this is a guessed name. but should be official name)<br />
|-<br />
| [[ScePower]] || 0 || 0x402 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_END</code>. (this is a guessed name)<br />
|-<br />
| [[ScePower]] || 1 || 0x1000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_FREEZE_TIME</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x400F -> 0x4000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE0</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x10000 -> 0x1000F || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE0</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x40000 || <code>SCE_KERNEL_SYSEVENT_RESUME_MELT_TIME</code>. before sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 1 || 0x100000 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_START</code>. after sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 1 || 0x100001 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_MAIN</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x100002 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_END</code>. (this is a guessed name)<br />
|-<br />
| [[ScePower]] || 1 || 0x400000 || <code>SCE_KERNEL_SYSEVENT_RESUME_COMPLETED<br />
|}<br />
<br />
Handler<br />
<br />
{| class="wikitable sortable mw-collapsible mw-collapsed"<br />
|-<br />
! Module !! Type !! Event !! Description<br />
|-<br />
| [[SceAppMgr]] || 0 || 0x20F || _sceAppMgrSystemSuspend<br />
|-<br />
| [[SceAppMgr]] || 1 || 0x400000 || _sceAppMgrSystemResume<br />
|-<br />
| [[SceAudio]] || 0 || 0x1000 || Something<br />
|-<br />
| [[SceAudio]] || 0 || 0x400F || Something<br />
|-<br />
| [[SceAudio]] || 0 || 0x102 || Something<br />
|-<br />
| [[SceAudio]] || 1 || 0x1000F || Something<br />
|-<br />
| [[SceAudioin]] (SceAudioIn) || 0 || 0x102 || Something<br />
|-<br />
| [[SceAudioin]] (SceAudioIn) || 1 || 0x1000F || Something<br />
|-<br />
| [[SceAVConfig]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceAVConfig]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceAVConfig]] || 1 || 0x1000F || Something<br />
|-<br />
| [[SceAVConfig]] || 1 || 0x100001 || Something<br />
|-<br />
| [[SceBt]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceBt]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceBt]] || 1 || 0x100001 || Something<br />
|-<br />
| [[SceBt]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceCamera]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceCamera]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceCamera]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceCamera]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCamera]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceClockgen]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceClockgen]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCodec]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceCodec]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x400E || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 1 || 0x1000E || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCompat]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCtrl]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceCtrl]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceCtrl]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceCtrl]] || 1 || 0x1000C || Something<br />
|-<br />
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x102 || Something<br />
|-<br />
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x4003 || Something<br />
|-<br />
| [[SceDbgSdio]] (SceDbgSdio1) || 1 || 0x10003 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 0 || 0x102 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 0 || 0x4000 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x100 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceDeci4pDrfp]] || 0 || any || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 0 || 0x1000 || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 1 || 0x40000 || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceDeci4pSDfCtl]] || 0 || 0x102 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x400A || Something<br />
|-<br />
| [[SceDisplay]] || 1 || 0x40000 || Something<br />
|-<br />
| [[SceDisplay]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceDisplay]] || 1 || 0x1000A || Something<br />
|-<br />
| [[SceError]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceError]] || 1 || 0x100001 || Something<br />
|-<br />
| [[SceGps]] (SceGpsd) || 0 || 0x102 || Something<br />
|-<br />
| [[SceGps]] (SceGpsd) || 1 || 0x400000 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 0 || 0x402 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 0 || 0x4005 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 0 || 0x400 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 1 || 0x10005 || Something<br />
|-<br />
| [[SceHdmi]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceHdmi]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceHdmi]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceHid]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceHid]] || 0 || 0x4000 || Something<br />
|-<br />
| [[SceHid]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceHid]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceHpremote]] (SceHprm) || 1 || 0x1000C || Something<br />
|-<br />
| [[SceIdStorage]] || ? || ? || Something<br />
|-<br />
| [[SceIofilemgr]] || 0 || 0x401 || vfs_sync_all_mount_point<br />
|-<br />
| [[SceIofilemgr]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceIofilemgr]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceIofilemgr]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceIofilemgr]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceLowio]] (ScePervasive) || 1 || 0x10000 || Something<br />
|-<br />
| [[SceLowio]] (SceGpio) || 1 || 0x10002 || Something<br />
|-<br />
| [[SceLowio]] (ScePwm) || 0 || 0x4002 || Something<br />
|-<br />
| [[SceLowio]] (ScePwm) || 1 || 0x10002 || Something<br />
|-<br />
| [[SceLowio]] (SceI2c) || 0 || 0x402 || Something<br />
|-<br />
| [[SceLowio]] (SceI2c) || 0 || 0x4002 || Something<br />
|-<br />
| [[SceLowio]] (SceI2c) || 1 || 0x10002 || Something<br />
|-<br />
| [[SceLowio]] (SceDsi) || 0 || 0x4004 || Something<br />
|-<br />
| [[SceLowio]] (SceIftu) || 0 || 0x4005 || Something<br />
|-<br />
| [[SceLowio]] (SceIftu) || 1 || 0x10005 || Something<br />
|-<br />
| [[SceLowio]] (SceCsi) || 0 || 0x4004 || Something<br />
|-<br />
| [[SceLowio]] (SceCsi) || 1 || 0x10004 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 0 || 0x401 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 0 || 0x402 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 0 || 0x400 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 1 || 0x100000 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 1 || 0x100002 || Something<br />
|-<br />
| [[SceMsif]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceMsif]] || 1 || 0x1000C || Something<br />
|-<br />
| [[SceNetPs]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceNetPs]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceOled]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceOled]] || 0 || 0x4003 || Something<br />
|-<br />
| [[SceOled]] || 1 || 0x10003 || Something<br />
|-<br />
| [[ScePfsMgr]] || 0 || 0x402 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 0 || 0x402 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 0 || 0x4009 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 0 || 0x400 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 1 || 0x10009 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 1 || 0x100000 || Something<br />
|-<br />
| [[ScePower]] (SceLed) || 0 || 0x102 || Something<br />
|-<br />
| [[ScePower]] (SceLed) || 0 || 0x400A || Something<br />
|-<br />
| [[ScePower]] (SceLed) || 1 || 0x100000 || Something<br />
|-<br />
| [[SceRtc]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceRtc]] || 0 || 0x1000 || Something<br />
|-<br />
| [[SceRtc]] || 1 || 0x1000A || Something<br />
|-<br />
| [[SceRtc]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceSblSmSchedProxy]] || 1 || 0x10004 || Something<br />
|-<br />
| [[SceSblSsMgr]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceSblSsMgr]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceSblUpdateMgr]] || 0 || any || Something<br />
|-<br />
| [[SceSdif]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceSdif]] || 1 || 0x10009 || resume eMMC with sdif reset<br />
|-<br />
| [[SceSdif]] || 1 || 0x1000C || resume eMMC<br />
|-<br />
| [[SceSdstor]] || 0 || 0x200 || Umount 0x900/0xA00/0x100. invalidate gc sdpart str.<br />
|-<br />
| [[SceSdstor]] || 0 || 0x400D || disable intr/power off for gc/rm<br />
|-<br />
| [[SceSdstor]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceSdstor]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceSyscon]] || 0 || 0x4006 || Something<br />
|-<br />
| [[SceSyscon]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceSyscon]] || 0 || 0x400F || Something<br />
|-<br />
| [[SceSyscon]] || 1 || 0x10006 || Something<br />
|-<br />
| [[SceSyscon]] || 1 || 0x1000F || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceTouch]] || 1 || 0x1000C || Something<br />
|-<br />
| [[SceTouch]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceUsbEtherRtl]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceUsbEtherRtl]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceUsbEtherRtl]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceUsbEtherSmsc]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceUsbEtherSmsc]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceUsbEtherSmsc]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceUsbServ]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceUsbServ]] || 0 || 0x400E || Something<br />
|-<br />
| [[SceUsbServ]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceUsbServ]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x401 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x400 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100000 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100002 || Something<br />
|}<br />
<br />
== SceSysmemForKernel ==<br />
<br />
=== SceSysmemForKernel_A7D44B50 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || 0xA7D44B50<br />
|-<br />
| 1.800.071-3.740.011 || not present<br />
|}<br />
<br />
A guessed name is sceKernelSetSysmemFuncForKernel.<br />
<br />
Used by [[SceKernelSSProxy]]'s module_start to register a function that just calls [[SMC]] 0x10E (BusErrorClear).<br />
<br />
The registered function is used internally by [[#sceKernelPhysicalMemReadForKernel]] and [[#sceKernelPhysicalMemWriteForKernel]].<br />
<br />
<source lang="C">int SceSysmemForKernel_A7D44B50(void* pBusErrorClearFunc);</source><br />
<br />
=== sceKernelSysmemModuleStartAfterProcessmgrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.610.011 || 0xE7938BFB<br />
|-<br />
| 3.630.011-3.740.011 || 0x4E74DA48<br />
|}<br />
<br />
Temp name was sceKernelInitProcessMemoryForKernel.<br />
<br />
Used by [[SceProcessmgr]].<br />
<br />
<source lang="C">int sceKernelSysmemModuleStartAfterProcessmgrForKernel(void);</source><br />
<br />
=== sceKernelSysmemCleanerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x43E81C4B<br />
|-<br />
| 3.63 || 0x50980298<br />
|}<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSysmemCleanerForKernel(void);</source><br />
<br />
=== sceKernelStrnlenFromUserForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x9BC3DEAC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelPhysicalMemWriteForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0x4B86A751<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
Writes to physical address <code>pdest</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.<br />
<br />
<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source><br />
<br />
=== sceKernelPhysicalMemReadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0xF96E3AE2<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
Temp name was memcpy_from_paddr.<br />
<br />
Dest must be a virtual address and src must be a physical address. Returns copied size on success.<br />
<br />
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source><br />
<br />
=== sceKernelCopyFromUser32DomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xD530399A<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcTextDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x30931572<br />
|-<br />
| 3.65 || 0x2995558D<br />
|}<br />
<br />
Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.<br />
<br />
Same as [[SceSysmem#sceKernelCopyToUserProcDomainForDriver|sceKernelCopyToUserProcDomain]], but performs a DCache clean after the copy. Use this function if you want to write code in user pages.<br />
<br />
This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcTextDomainForDBGPForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xE65EA709<br />
|-<br />
| 3.63 || 0x4345C61F<br />
|}<br />
<br />
<source lang="C">int sceKernelCopyToUserProcTextDomainForDBGPForKernel(SceUID pid, void *dst, const void *src, SceSize length);</source><br />
<br />
=== sceKernelCopyToUserTextDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x67BAD5B4<br />
|-<br />
| 3.65 || 0x5EF1DAAF<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.<br />
<br />
Similar to [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]], but performed in the current address space.<br />
<br />
In FW 3.60, [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]] calls this function to perform the copy after changing address space.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserTextDomainForKernel(void *dst, const void *src, SceSize len);</source><br />
<br />
=== sceKernelCopyToUserDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || Not present<br />
|-<br />
| 3.60-3.61 || 0xA6F95838<br />
|-<br />
| 3.63 || 0x499A9FFF<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.<br />
<br />
Similar to [[SceSysmem#sceKernelCopyToUserTextDomainForKernel|sceKernelCopyToUserTextDomain]], but doesn't perform any DCache clean.<br />
<br />
Uses the same DACR, 0x15450FC3, for the copy.<br />
<br />
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source><br />
<br />
=== sceKernelRegisterClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x11761B77<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelFindClassByNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x62989905<br />
|-<br />
| 3.65 || 0x7D87F706<br />
|}<br />
<br />
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **ppClass);</source><br />
<br />
=== sceKernelGetUIDHeapClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x4CCA935D<br />
|-<br />
| 3.63 || 0x7C878E94<br />
|}<br />
<br />
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDMemBlockClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xAF729575<br />
|-<br />
| 3.63 || 0x86681B64<br />
|}<br />
<br />
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDDLinkClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.610.011 || 0xC105604E<br />
|-<br />
| 3.630.011-3.740.011 || 0xE4193EB6<br />
|}<br />
<br />
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDAddressSpaceClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xAF180A3F<br />
|-<br />
| 3.63 || 0x99D3BF76<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceClass *sceKernelGetUIDAddressSpaceClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDPartitionClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x2791F109<br />
|-<br />
| 3.63 || 0x5C0FC6BE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceClass *sceKernelGetUIDPartitionClassForKernel(void);</source><br />
<br />
=== sceUIDDLinkClassInitForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x21285F40<br />
|-<br />
| 3.63 || 0x7CDB7655<br />
|}<br />
<br />
Temp name was sceKernelCreateClassForKernel, sceUIDClassInitClassForKernel.<br />
<br />
Calls [[SceSysmem#sceUIDClassInitClassForDriver|sceUIDClassInitClassForDriver]].<br />
<br />
<source lang="C">int sceUIDDLinkClassInitForKernel(SceClass *pClass, const char *name, SceClass *subclass, SceSize itemsize, void *cstr, void *dstr);</source><br />
<br />
=== sceUIDClassGetClassInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0xC0BF149E<br />
|-<br />
| 3.63 || 0x100B4029<br />
|}<br />
<br />
This is a guessed name (ForDriver function name and NID changed at some point before 1.69). Temp name was sceKernelGetRegisterClassInfoForKernel.<br />
<br />
<source lang="C"><br />
typedef struct SceClassInfo {<br />
SceSize size;<br />
SceClass *pClass;<br />
SceClass *pSubClass;<br />
const char *name;<br />
} SceClassInfo;<br />
<br />
int sceUIDClassGetClassInfoAllForKernel(SceClassInfo *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);<br />
</source><br />
<br />
=== sceKernelCreateAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4A3737F0<br />
|-<br />
| 3.65 || 0x8EE89D2C<br />
|}<br />
<br />
<source lang="C"><br />
// type: 0x10000001 (user AS)<br />
// name: maybe titleid<br />
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelCreateAddressSpaceOpt *pOpt);<br />
</source><br />
<br />
=== sceKernelDeleteAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF2D7FE3A<br />
|-<br />
| 3.65 || 0x4A2E421D<br />
|}<br />
<br />
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source><br />
<br />
=== sceKernelAddressSpaceSetNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || not present<br />
|-<br />
| 3.60 || 0x7BD56D6D<br />
|-<br />
| 3.65 || 0xCEBC4963<br />
|}<br />
<br />
Used by [[SceProcessmgr]].<br />
<br />
<source lang="C">int sceKernelAddressSpaceSetNameForKernel(SceUID guid, const char *name);</source><br />
<br />
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x67955EE9<br />
|-<br />
| 3.65 || 0x7DF07D60<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, SceUInt32 index, SceKernelPhyMemPart *pPhyMemPart);</source><br />
<br />
=== sceKernelAddressSpaceCtrSetObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFC74A355<br />
|-<br />
| 3.63 || 0xFA348CB1<br />
|}<br />
<br />
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x89CE1F31<br />
|-<br />
| 3.65 || 0x36159CF5<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source><br />
<br />
=== sceKernelAddressSpaceUnmapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0xCE72839E<br />
|-<br />
| 3.63 || 0x73C38695<br />
|}<br />
<br />
<source lang="C"><br />
# For FW 0.931:<br />
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int a2, void* addr, SceSize size);<br />
# For FW 3.60:<br />
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int a2, int a3, void* addr, SceSize size);<br />
</source><br />
<br />
Example: 0.990 [[SceSysStateMgr]]:<br />
<source lang="C"><br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);<br />
</source><br />
<br />
Example: 3.60 [[SceSysStateMgr]]:<br />
<source lang="C"><br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);<br />
</source><br />
<br />
=== sceKernelAddressSpaceSetProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x2476B90F<br />
|-<br />
| 3.63 || 0x5E772E19<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID address_space, SceUID pid);</source><br />
<br />
=== sceKernelAddressSpaceChangeMMUContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x653B0849<br />
|-<br />
| 3.63 || 0x20D01AFA<br />
|}<br />
<br />
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.<br />
<br />
<source lang="C">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.10-3.61 || 0x9894B9E1<br />
|-<br />
| 3.63 || 0xA7C91D62<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID address_space, SceKernelMMUContext **ppCtx);</source><br />
<br />
=== SceSysmemForKernel_FBEF93AA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.01 || 0xFBEF93AA<br />
|-<br />
| 3.10-3.74 || not present<br />
|}<br />
<br />
Maybe gets MMU context. Maybe was replaced by [[#sceKernelAddressSpaceGetMMUContextForKernel]].<br />
<br />
<source lang="C">int SceSysmemForKernel_FBEF93AA(SceUID address_space, void* pOut);</source><br />
<br />
=== sceKernelAddressSpaceGetTimerVbaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 0.996.090-3.610.011 || 0x7D92B2D3<br />
|-<br />
| 3.630.011-3.740.011 || 0xFA1A73DD<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetTimerVbaseForKernel(SceUID address_space, void **ppBase);</source><br />
<br />
=== sceKernelGetAddressSpaceInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x4492421F<br />
|-<br />
| 3.630.011-3.740.011 || 0xC3EF4055<br />
|}<br />
<br />
This is a guessed name..<br />
<br />
<source lang="C">int sceKernelGetAddressSpaceInfoForKernel(SceUID address_space, SceKernelAddressSpaceInfo *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x671A3444<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Gets information about a L1PT entry in the translation table of an address space. Pass the virtual address of the target entry maps as <code>addr</code>.<br />
<br />
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xCB6E1C80<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID address_space, const void *addr, void *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x1A898F2E<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931<br />
SceSize size; // Size of this structure<br />
char unk[0x4008];<br />
} SceKernelAddressSpaceMMUL1AllInfo;<br />
<br />
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID address_space, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x1E1AA29B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931<br />
SceSize size; // Size of this structure<br />
char unk[0x400];<br />
} SceKernelAddressSpaceMMUL2AllInfo;<br />
<br />
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID address_space, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xCC7BB240<br />
|-<br />
| 3.63 || 0x0B5A3E93<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source><br />
<br />
=== sceKernelAddressSpaceVAtoPAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF2179820<br />
|-<br />
| 3.63 || 0x1BAF8C0B<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, SceUInt32 mode, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF7250E6C<br />
|-<br />
| 3.63 || 0xA541E0CF<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID address_space, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelAddressSpaceGetPhyMemPartByIndexForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x3F74E45C<br />
|-<br />
| 3.63 || 0x47C55DCC<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetPhyMemPartByIndexForKernel(SceUInt32 index, void **result);</source><br />
<br />
=== sceKernelAddressSpaceGetPartitionByIndexForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x210DB518<br />
|-<br />
| 3.63 || 0x1F84FE44<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUIDPartitionObject *sceKernelAddressSpaceGetPartitionByIndexForKernel(void *pAS, int pindex);</source><br />
<br />
=== sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x46A5CB84<br />
|-<br />
| 3.63 || 0xC3F9607E<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel(SceUID asid, int a2, int a3, int a4);</source><br />
<br />
=== sceKernelCheckAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x8B07BB52<br />
|-<br />
| 3.63 || 0x16A54BFE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelCheckAddressSpaceForKernel(void);</source><br />
<br />
=== sceKernelGetKernelAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.610.011 || 0xC38B4D52<br />
|-<br />
| 3.630.011-3.740.011 || 0x2E5CC243<br />
|}<br />
<br />
<source lang="C">void* sceKernelGetKernelAddressSpaceForKernel(void);</source><br />
<br />
=== sceKernelCreatePhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x2E36E0C4<br />
|-<br />
| 3.63 || 0xA2DFA383<br />
|}<br />
<br />
Calls [[#sceKernelCreatePhyMemPartByPbaseForKernel]] with pbase = 0.<br />
<br />
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart **pPhyMemPart);</source><br />
<br />
=== sceKernelCreatePhyMemPartByPbaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x63D83911<br />
|-<br />
| 3.63 || 0x5CC56F87<br />
|}<br />
<br />
<source lang="C"><br />
/*<br />
type<br />
<br />
ORed values:<br />
0x00002 : Shell<br />
0x00004 : Game<br />
0x00005 : PhyCont<br />
0x00060 : CDialog<br />
0x10000 : Lpddr2Main<br />
0x30000 : Cdram<br />
<br />
seen values:<br />
0x10002 : ShellLpddr2Main (shared)<br />
0x10004 : GameLpddr2Main<br />
0x10005 : PhyContLpddr2Main<br />
0x10064 : GameCDialogLpddr2Main<br />
<br />
0x30002 : ShellCdram<br />
0x30004 : GameCdram<br />
*/<br />
<br />
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);<br />
</source><br />
<br />
=== sceKernelDeletePhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x2AEA9E09<br />
|-<br />
| 3.63 || 0x3F72B2E7<br />
|}<br />
<br />
<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source><br />
<br />
=== sceKernelGetPhyMemPartAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x2F6F9C2C<br />
|-<br />
| 3.63 || 0x021053DD<br />
|}<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartAllForKernel(SceUInt32 vis_level, SceUID *pVector, SceSize vectorSize, SceUInt32 *ret_num);</source><br />
<br />
=== sceKernelGetPhyMemPartInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x67849418<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source><br />
<br />
=== sceKernelGetPhyMemPartInfoByIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0xF4FA0575<br />
|-<br />
| 3.63 || 0x029F5989<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelPhyMemPartInfo { // size is 0x44 on FW 0.931-0.990<br />
SceSize size; // Size of this structure<br />
uint32_t unk_4; // some size or address<br />
uint32_t unk_8; // some size or address<br />
char unk1[0xC];<br />
char *name; // name, maybe pointer or array<br />
char unk2[0x24];<br />
} SceKernelPhyMemPartInfo;<br />
<br />
int sceKernelGetPhyMemPartInfoByIDForKernel(SceUID guid, SceKernelPhyMemPartInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetPhyMemPartInfoCoreForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.61 || 0x3650963F<br />
|-<br />
| 3.63-3.65 || 0xB9B69700<br />
|}<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source><br />
<br />
=== sceKernelGetPhyMemPartInfoForDebuggerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || not present<br />
|-<br />
| 3.60-3.61 || 0x54E85275<br />
|-<br />
| 3.63 || 0x73E03A38<br />
|}<br />
<br />
info size is 0xB0-bytes.<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartInfoForDebuggerForKernel(SceKernelPhyMemPart *pPhyMemPart, void *pInfo);</source><br />
<br />
=== sceKernelGrowPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x6B3F4102<br />
|-<br />
| 3.63 || 0x5B434019<br />
|}<br />
<br />
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.<br />
<br />
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source><br />
<br />
=== sceKernelGrowPhyMemPartByPbaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x775AA5E3<br />
|-<br />
| 3.63 || 0x36FDA794<br />
|}<br />
<br />
Temp name was sceKernelGrowPhyMemPartWithFlagsForKernel.<br />
<br />
Grows physical memory partition with pbase.<br />
<br />
<source lang="C">int sceKernelGrowPhyMemPartByPbaseForKernel(SceKernelPhyMemPart *pPMP, SceUIntPtr pbase, SceSize psize);</source><br />
<br />
=== sceKernelGetGrownPhyMemPartSizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x4D809B47<br />
|-<br />
| 3.63 || 0xBC36755F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.<br />
<br />
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source><br />
<br />
=== SceSysmemForKernel_153A08A0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x153A08A0<br />
|-<br />
| 3.63 || 0x6D563733<br />
|}<br />
<br />
Adds 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.<br />
<br />
<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source><br />
<br />
=== sceKernelAllocPhyPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xD449547B<br />
|-<br />
| 3.63-3.74 || 0xB488C82E<br />
|}<br />
<br />
Temp name was sceKernelPhyMemPartAllocPhyPageForKernel.<br />
<br />
<source lang="C">int sceKernelAllocPhyPageForKernel(void *pPhyMemPart, SceSize size, void **ppPhyPage);</source><br />
<br />
=== sceKernelResetPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEEB85560<br />
|-<br />
| 3.65 || 0x9B7E673F<br />
|}<br />
<br />
Used by [[SceProcessmgr#sceKernelResetGameBudgetForKernel]].<br />
<br />
Called with same argument as [[#sceKernelSetPhyPartGameForKernel]].<br />
<br />
<source lang="C">int sceKernelResetPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source><br />
<br />
=== sceKernelShowPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x5C257482<br />
|-<br />
| 3.63-3.65 || 0x8F0B5536<br />
|}<br />
<br />
Prints information about a Physical Memory Partition.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">SceInt32 sceKernelShowPhyMemPartForKernel(SceKernelPhyMemPart *pPMP);</source><br />
<br />
=== sceKernelFreePhyPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x00BC5B4A<br />
|-<br />
| 3.63 || 0x193A9D2F<br />
|}<br />
<br />
<source lang="C">int sceKernelFreePhyPageForKernel(void *pPhyMemPart, void *pPage);</source><br />
<br />
=== sceKernelSetPhyMemPartHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x17F1AA22<br />
|-<br />
| 3.63 || 0x31FA81B5<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetPhyMemPartHookForKernel(void *pHook);</source><br />
<br />
=== sceKernelSetPhyMemPartLogCallbackForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x72E7BFAC<br />
|-<br />
| 3.63 || 0x93D0A183<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetPhyMemPartLogCallbackForKernel(void *pCallbacks);</source><br />
<br />
=== sceKernelAllocKernelHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x432EADA6<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source><br />
<br />
=== sceKernelGetHeapInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x91733EF4<br />
|-<br />
| 3.63 || 0x17DB1A0A<br />
|}<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);<br />
<br />
// 3.60:<br />
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceUInt32 level, SceKernelHeapInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetHeapInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x48D87E17<br />
|-<br />
| 3.63 || 0x1380E144<br />
|}<br />
<br />
This is a guessed namee.<br />
<br />
<source lang="C">int sceKernelGetHeapInfoAllForKernel(SceUInt32 vis_level, void *pInfo, SceSize infoSize, SceUInt32 *pnInfo);</source><br />
<br />
=== sceKernelGetHeapInfoAllChunkForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xAC4C0EB1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);</source><br />
<br />
=== sceKernelGetHeapInfoByPtrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x68451777<br />
|-<br />
| 3.63 || 0x80A75187<br />
|}<br />
<br />
Temp name was sceKernelGetHeapInfoByPointerForKernel.<br />
<br />
<source lang="C">int sceKernelGetHeapInfoByPtrForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source><br />
<br />
=== sceKernelReallocHeapMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFDC0EA11<br />
|-<br />
| 3.63 || 0x8EE8B917<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void *sceKernelReallocHeapMemoryForKernel(SceUID heapid, void *ptr, SceSize size);</source><br />
<br />
=== sceKernelHeapEnableModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xF1433852<br />
|-<br />
| 3.63 || 0x0B36F7F9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelHeapEnableModeForKernel(SceUID heapid, SceUInt32 mode);</source><br />
<br />
=== sceKernelHeapDiableModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x71869119<br />
|-<br />
| 3.63 || 0x6E82D5A0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelHeapDiableModeForKernel(SceUID heapid, SceUInt32 mode);</source><br />
<br />
=== sceKernelHeapMemoryGetAllocateSizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x60735311<br />
|-<br />
| 3.63 || 0xD124075A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceSize sceKernelHeapMemoryGetAllocateSizeForKernel(void *ptr);</source><br />
<br />
=== sceKernelPrintHeapSegmentListForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x2EE50533<br />
|-<br />
| 3.63 || 0x82059651<br />
|}<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelPrintHeapSegmentListForKernel(SceUID heap_guid);</source><br />
<br />
=== sceKernelGetKernelFixedHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x68CB9266<br />
|-<br />
| 3.630.000-3.740.011 || 0x3717C322<br />
|}<br />
<br />
Temp name was sceKernelGetFixedHeapBySizeForKernel.<br />
<br />
<source lang="C">SceUIDFixedHeapObject *sceKernelGetKernelFixedHeapForKernel(SceSize size);</source><br />
<br />
=== sceKernelGetFixedHeapInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x4FA4A624<br />
|-<br />
| 3.630.000-3.740.011 || 0x890D9160<br />
|}<br />
<br />
<source lang="C">int sceKernelGetFixedHeapInfoForKernel(SceUID heapid, SceKernelFixedHeapInfo *pInfo);</source><br />
<br />
=== sceKernelGetFixedHeapInfoByPointerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x219E90FD<br />
|-<br />
| 3.630.000-3.740.011 || 0xA24D2C8D<br />
|}<br />
<br />
<source lang="C">int sceKernelGetFixedHeapInfoByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, SceKernelFixedHeapInfo *pInfo);</source><br />
<br />
=== sceKernelFixedHeapSetHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.610.011 || 0x8C8E2DD1<br />
|-<br />
| 3.630.000-3.740.011 || 0xD4511A52<br />
|}<br />
<br />
<source lang="C">int sceKernelFixedHeapSetHookForKernel(SceUID heapid, void *hookdata);</source><br />
<br />
=== sceKernelFixedHeapAllocObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0xC8672A3D<br />
|-<br />
| 3.630.000-3.740.011 || 0xABA5313C<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void *sceKernelFixedHeapAllocObjectForKernel(SceUIDFixedHeapObject *pFixedHeap);</source><br />
<br />
=== sceKernelFixedHeapFreeObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x571660AA<br />
|-<br />
| 3.630.000-3.740.011 || 0x93344755<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelFixedHeapFreeObjectForKernel(SceUIDFixedHeapObject *pFixedHeap, void *pObject);</source><br />
<br />
=== sceKernelFixedHeapSetHookByPointerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.610.011 || 0x3EC2345B<br />
|-<br />
| 3.630.000-3.740.011 || 0x811C452B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelFixedHeapSetHookByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, void *a2);</source><br />
<br />
=== sceKernelNameHeapInsertForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x08AB3DAE<br />
|-<br />
| 3.63 || 0xB628B46B<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapInsertForKernel(const char *name, int flags, char **result);</source><br />
<br />
=== sceKernelNameHeapDeleteForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x9C7B62AB<br />
|-<br />
| 3.63 || 0x634D0D0C<br />
|}<br />
<br />
name max length is 31 characters.<br />
<br />
<source lang="C">int sceKernelNameHeapDeleteForKernel(const char *name, SceUInt32 flag);</source><br />
<br />
=== sceKernelNameHeapLinkForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xEC1293D2<br />
|-<br />
| 3.63 || 0x40965FD1<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapLinkForKernel(const char *name, int flags, void **result);</source><br />
<br />
=== sceKernelNameHeapFindForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB543A23C<br />
|-<br />
| 3.63 || 0x9F1A9AA6<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapFindForKernel(const char *name, int flags, void **result);</source><br />
<br />
=== sceKernelNameHeapGetKeyForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x942D15FC<br />
|-<br />
| 3.63 || 0xEB48682E<br />
|}<br />
<br />
This is a guessed name. Computes MurmurHash. Used to get UID by name.<br />
<br />
<source lang="C">SceUInt32 sceKernelNameHeapGetKeyForKernel(const char *key, SceSize len, SceUInt32 seed);</source><br />
<br />
=== sceKernelNameHeapGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.610.011 || 0xE443253B<br />
|-<br />
| 3.630.000-3.740.011 || 0x01194C2E<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapGetInfoForKernel(void *pInfo);</source><br />
<br />
=== sceKernelCreateObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x36830F46<br />
|-<br />
| 3.63 || 0x9D8F3BE8<br />
|}<br />
<br />
<source lang="C">int sceKernelCreateObjectHeapForKernel(SceUID pid, SceBool a2, SceFixedHeapHook *pHeapHook, SceKernelObjectHeap **ppObjectHeap);</source><br />
<br />
=== sceKernelCreateObjectHeapWithHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7FD757FE<br />
|-<br />
| 3.63 || 0x660DC18A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelCreateObjectHeapWithHeapForKernel(SceKernelObjectHeap *pObjectHeap, SceUID pid, SceUID heapid);</source><br />
<br />
=== sceKernelDeleteObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x080BA2F3<br />
|-<br />
| 3.63 || 0x2F526AB8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelDeleteObjectHeapForKernel(SceKernelObjectHeap *pObjectHeap);</source><br />
<br />
=== sceKernelObjectHeapAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7FDF483A<br />
|-<br />
| 3.63 || 0xEBFC8E10<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void *sceKernelObjectHeapAllocForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size);</source><br />
<br />
=== sceKernelObjectHeapFreeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x131CEF52<br />
|-<br />
| 3.63 || 0x17D3D4BD<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelObjectHeapFreeForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size, void *pObject);</source><br />
<br />
=== sceKernelObjectHeapSetResourceLimitForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x98E6905B<br />
|-<br />
| 3.63 || 0xDFA1EB57<br />
|}<br />
<br />
<source lang="C">int sceKernelObjectHeapSetResourceLimitForKernel(int a1, int a2, int a3, int a4, int a5);</source><br />
<br />
=== sceKernelObjectHeapSetResourceLimitAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x5409397F<br />
|-<br />
| 3.63 || 0x067F2550<br />
|}<br />
<br />
<source lang="C">int sceKernelObjectHeapSetResourceLimitAllForKernel(SceKernelObjectHeap *pObjectHeap, int a2, int a3);</source><br />
<br />
=== sceKernelObjectHeapSetSizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x6427560F<br />
|-<br />
| 3.63 || 0xB591E49F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelObjectHeapSetSizeForKernel(SceUInt32 index, SceUInt32 size);</source><br />
<br />
=== sceKernelGetObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x3B75CBED<br />
|-<br />
| 3.63 || 0x857408DA<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelObjectHeap *sceKernelGetObjectHeapForKernel(void);</source><br />
<br />
=== sceKernelGetSharedObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xBF0294E4<br />
|-<br />
| 3.63 || 0x791D6205<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelObjectHeap *sceKernelGetSharedObjectHeapForKernel(void);</source><br />
<br />
=== SceSysmemForKernel_B8D769C6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB8D769C6<br />
|-<br />
| 3.63 || 0xDBEACE2C<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_B8D769C6(SceKernelObjectHeap *pObjectHeap, void *info);</source><br />
<br />
=== sceUIDCreateEntryHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x19CAEF35<br />
|-<br />
| 3.65 || 0x89BEF058<br />
|}<br />
<br />
<source lang="C">int sceUIDCreateEntryHeapForKernel(SceUID pid, SceUID heap_guid);</source><br />
<br />
=== sceUIDDeleteEntryHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF0C3FCFC<br />
|-<br />
| 3.65 || 0xF6D09BD9<br />
|}<br />
<br />
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID guid);</source><br />
<br />
=== sceUIDRegisterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x59162CD7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDRegisterForKernel]].<br />
<br />
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source><br />
<br />
=== sceUIDObjectSetClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x226DE851<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source><br />
<br />
=== sceUIDGetUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0xA2F03233<br />
|-<br />
| 1.500.151-3.740.011 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDGetUIDVectorByClassForKernel]].<br />
<br />
=== sceUIDGetProcUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.060.031 || 0x51C08396<br />
|-<br />
| 1.500.151-3.740.011 || not present<br />
|}<br />
<br />
=== sceUIDReferObjectWithLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xF79B52B2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source><br />
<br />
=== sceUIDGetObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xC4893914<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDGetObjectForDriver]].<br />
<br />
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceUIDtoObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xED221825<br />
|-<br />
| 3.65 || 0xFA6C098C<br />
|}<br />
<br />
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].<br />
<br />
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source><br />
<br />
=== sceUIDClassIsSubclassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.691 || not present (in ForDriver)<br />
|-<br />
| 3.60-3.61 || 0x48750A5A<br />
|-<br />
| 3.63 || 0x7F7D5C4A<br />
|}<br />
<br />
This is a guessed name. Temp name was sceUIDClassIsWithinSubclassChainForKernel.<br />
<br />
<source lang="C">SceBool sceUIDClassIsSubclassForKernel(SceClass *pClass, SceClass *pTargetClass);</source><br />
<br />
=== sceUIDEntryHeapCloseAllPUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFAF96C1F<br />
|-<br />
| 3.65 || 0x133024A5<br />
|}<br />
<br />
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID guid);</source><br />
<br />
=== sceKernelUIDEntryHeapGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x686AA15C<br />
|-<br />
| 3.63 || 0xCCD47B97<br />
|}<br />
<br />
Official name may also be sceUIDEntryHeapGetInfoForKernel (seen in 4.00).<br />
<br />
<source lang="C"><br />
typedef struct SceUIDEntryHeapInfo {<br />
SceSize size; //<! Size of this structure (0x18)<br />
SceSize objectSize;<br />
SceSize totalHeapSize;<br />
SceSize totalItemCount;<br />
SceSize unk10;<br />
SceSize unk14;<br />
} SceUIDEntryHeapInfo;<br />
<br />
SceInt32 sceKernelUIDEntryHeapGetInfoForKernel(SceUID entryHeapId, SceUIDEntryHeapInfo *pInfo);<br />
</source><br />
<br />
=== sceUIDEntryHeapSetHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCD985AEB<br />
|-<br />
| 3.63 || 0x666C878F<br />
|}<br />
<br />
?Implemented in internal system software.? Not implemented in external system software.<br />
<br />
<source lang="C">int sceUIDEntryHeapSetHookForKernel(SceUID guid, void *pHook);</source><br />
<br />
=== sceUIDEntryGetNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x114E6476<br />
|-<br />
| 3.63 || 0x5FD15C6E<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">char *sceUIDEntryGetNameForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xC2F7D8A4<br />
|-<br />
| 3.63 || 0x797C858B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUInt16 sceUIDEntryGetLevelForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x8FB73A29<br />
|-<br />
| 3.63 || 0x17F12DCE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUInt32 sceUIDEntryGetAttrForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetLinkCountForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x876A7F44<br />
|-<br />
| 3.63 || 0xF3DB2D71<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUInt8 sceUIDEntryGetLinkCountForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x6BB6AF94<br />
|-<br />
| 3.63 || 0x03A2CAF0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUID sceUIDEntryGetUIDForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceGUIDRegisterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xAF42AAD5<br />
|-<br />
| 3.63 || 0x6DB44A42<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source><br />
<br />
=== sceGUIDUnregisterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xE79BBCF2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source><br />
<br />
=== sceGUIDOpenByGUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xCF53EEE4<br />
|-<br />
| 3.63 || 0x89D33DF0<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDOpenByGUIDForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.060.031 || 0x250EE289<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source><br />
<br />
=== sceGUIDtoClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x66636970<br />
|-<br />
| 3.63 || 0x368F1C36<br />
|}<br />
<br />
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDGetObjectWithClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x7ABFA9A7<br />
|-<br />
| 3.63 || 0x0E43E113<br />
|}<br />
<br />
Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.<br />
<br />
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source><br />
<br />
=== sceGUIDGetUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.600.011 || 0xEC7D36EF<br />
|-<br />
| 3.630.011-3.740.011 || 0x52137FA3<br />
|}<br />
<br />
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.<br />
<br />
<source lang="C"><br />
/*<br />
* nVector - maximum number of copied UIDs<br />
* ret_num - number of retrieved UIDs<br />
*/<br />
int sceGUIDGetUIDVectorByClassForKernel(SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);<br />
</source><br />
<br />
=== sceGUIDGetUIDVectorWeakByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || not present<br />
|-<br />
| 1.500.151-3.610.011 || 0x59F577E8<br />
|-<br />
| 3.630.011-3.740.011 || 0xE9957329<br />
|}<br />
<br />
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.<br />
<br />
<source lang="C"><br />
/*<br />
* nVector - maximum number of copied UIDs<br />
* ret_num - number of retrieved UIDs<br />
*/<br />
int sceGUIDGetUIDVectorWeakByClassForKernel(SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);<br />
</source><br />
<br />
=== sceGUIDGetEntryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x45F2A59C<br />
|-<br />
| 3.63 || 0xFF464A49<br />
|}<br />
<br />
<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceUIDEntry **ppEntry);</source><br />
<br />
=== sceGUIDGetEntryInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x2A79C51C<br />
|-<br />
| 3.630.011-3.740.011 || 0x3BF0DE65<br />
|}<br />
<br />
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUInt32 vis_level, SceUID guid, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source><br />
<br />
=== sceGUIDGetEntryInfoClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0xE90CFD62<br />
|-<br />
| 3.630.011-3.740.011 || 0x71E934DB<br />
|}<br />
<br />
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID guid, SceClass *pClass, SceUInt32 vis_level, void *pInfoVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== sceGUIDKernelCreateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xE6FAD50A<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Create a GUID with default attribute (0x30000).<br />
<br />
<source lang="C">int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDKernelCreateWithAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x53E1FFDE<br />
|-<br />
| 3.63 || 0x6D26B066<br />
|}<br />
<br />
Create a GUID with the specified attribute.<br />
<br />
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDKernelCreateWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-0.995 || not present<br />
|-<br />
| 0.996-3.60 || 0xDF0288D7<br />
|-<br />
| 3.65 || 0xFB6390CE<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.<br />
<br />
<source lang="c"><br />
typedef struct SceGUIDKernelCreateOpt { // size is at least 0x20 on FW 3.60<br />
SceUInt32 attr;<br />
SceUInt32 field_4;<br />
SceUID uid;<br />
SceUID pid;<br />
SceUInt32 field_10;<br />
SceUInt32 classAttr;<br />
SceUInt32 uidAttr;<br />
SceUID pid2;<br />
} SceGUIDKernelCreateOpt;<br />
<br />
SceUID sceGUIDKernelCreateWithOptForKernel(SceClass *pClass, const char *name, SceGUIDKernelCreateOpt *pOpt, SceKernelObject **ppEntry);<br />
</source><br />
<br />
=== sceGUIDGetVisibilityLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xC69666C3<br />
|-<br />
| 3.63 || 0x4E923101<br />
|}<br />
<br />
<source lang="C">SceUInt32 sceGUIDGetVisibilityLevelForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDSetVisibilityLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCB8D03C0<br />
|-<br />
| 3.63 || 0xE8CC2166<br />
|}<br />
<br />
Sets visibilityLevel into guid's GUIDEntry.<br />
<br />
<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source><br />
<br />
=== sceGUIDFindByObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x95ABFDC3<br />
|-<br />
| 3.63 || 0xEC90AA11<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDFindByObjectForKernel(void *pObject);</source><br />
<br />
=== sceGUIDFindByNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCEBA8031<br />
|-<br />
| 3.63 || 0xBDE00106<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDFindByNameForKernel(const char *name);</source><br />
<br />
=== sceGUIDFindByNameAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x4B5C85AC<br />
|-<br />
| 3.63 || 0xF49C0BE8<br />
|}<br />
<br />
<source lang="C"><br />
// return value: to reverse, should be either SceUID guid or void* pObj<br />
SceUID sceGUIDFindByNameAllForKernel(const char *name);<br />
</source><br />
<br />
=== sceGUIDGetPIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCF5A2311<br />
|-<br />
| 3.63 || 0xBD42A0FC<br />
|}<br />
<br />
Returns Process ID for guid.<br />
<br />
<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDSetPIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x812E7A53<br />
|-<br />
| 3.63 || 0x46DF8C8A<br />
|}<br />
<br />
Sets Process ID for guid.<br />
<br />
<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source><br />
<br />
=== sceGUIDSetCNOAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x8D6AF468<br />
|-<br />
| 3.63 || 0x5EDDEEB5<br />
|}<br />
<br />
Setting Class Name Object Attr.<br />
<br />
<source lang="C">int sceGUIDSetCNOAForKernel(SceUID guid, SceClass *pClass, const char *name, void *pObject, SceUInt32 attr);</source><br />
<br />
=== sceGUIDSetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0xD7B323EB<br />
|-<br />
| 3.63 || 0xBF275C5A<br />
|}<br />
<br />
Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.<br />
<br />
<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source><br />
<br />
=== scePUIDGetEntryInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.610.011 || 0x2770A7D7<br />
|-<br />
| 3.630.011-3.740.011 || 0x3C3005EE<br />
|}<br />
<br />
<source lang="C">int scePUIDGetEntryInfoAllForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source><br />
<br />
=== scePUIDGetAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x86E83C0D<br />
|-<br />
| 3.63 || 0x96BD47D1<br />
|}<br />
<br />
<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID puid, SceUInt32 *pAttr);</source><br />
<br />
=== scePUIDReleaseObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x3FCA782B<br />
|-<br />
| 3.63 || 0xCE561224<br />
|}<br />
<br />
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x12ED88AE<br />
|-<br />
| 3.63 || 0x857701D4<br />
|}<br />
<br />
<source lang="C"><br />
// pInfo size is 0x14 bytes<br />
int scePUIDGetInfoForKernel(SceUID pid, SceUID puid, void *pInfo);<br />
</source><br />
<br />
=== scePUIDtoGUIDWithDebugForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB3E2AA7A<br />
|-<br />
| 3.63 || 0x188C8742<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUID scePUIDtoGUIDWithDebugForKernel(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDReferObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x620E00E7<br />
|-<br />
| 3.63 || 0x2C15615F<br />
|}<br />
<br />
<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source><br />
<br />
=== scePUIDOpenByNameWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x22F79E82<br />
|-<br />
| 3.63 || 0x201E970B<br />
|}<br />
<br />
<source lang="C">SceUID scePUIDOpenByNameWithOptForKernel(ScePID pid, const char *name, void *pOpt);</source><br />
<br />
=== scePUIDGetPUIDVectorByGUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.06 || not present<br />
|-<br />
| 2.100.081-3.610.011 || 0xBF04FC83<br />
|-<br />
| 3.630.011-3.740.011 || 0xCE16AD91<br />
|}<br />
<br />
<source lang="C">int scePUIDGetPUIDVectorByGUIDForKernel(SceUID pid, SceUID guid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== scePUIDGetUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0xB16D5136<br />
|-<br />
| 3.630.000-3.740.011 || 0x08C05493<br />
|}<br />
<br />
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]].<br />
<br />
<source lang="C">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== scePUIDReferObjectWithClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x9C53F457<br />
|-<br />
| 3.63 || 0x9C23DFF7<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int scePUIDReferObjectWithClassForKernel(SceUID pid, SceUID puid, SceClass *pClass, void **ppObject);</source><br />
<br />
=== scePUIDOpenByGUIDWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x53A2E272<br />
|-<br />
| 3.63 || 0x1FF2749A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUID scePUIDOpenByGUIDWithOptForKernel(SceUID pid, SceUID guid, void *pOpt);</source><br />
<br />
=== scePUIDGetGUIDVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x3203AE64<br />
|-<br />
| 3.63 || 0x66489B4B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int scePUIDGetGUIDVectorForKernel(SceUID pid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== sceKernelGetPhyPartKernelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x4D38F861<br />
|-<br />
| 3.63-3.65 || 0x0164D817<br />
|}<br />
<br />
return gpPhyPartKernel;<br />
<br />
<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source><br />
<br />
=== sceKernelGetPhyPartToolForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF8E95A5A<br />
|-<br />
| 3.63-3.65 || 0x0B1B4ACA<br />
|}<br />
<br />
<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source><br />
<br />
=== sceKernelGetPhyPartGameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB60568F9<br />
|-<br />
| 3.63-3.65 || 0x62800A6B<br />
|}<br />
<br />
<source lang="C">void *sceKernelGetPhyPartGameForKernel(void);</source><br />
<br />
=== sceKernelSetPhyPartGameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x77876A8D<br />
|-<br />
| 3.63-3.65 || 0x3753C584<br />
|}<br />
<br />
<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source><br />
<br />
=== sceKernelSetPhyPartCdramForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x07FEBBCA<br />
|-<br />
| 3.63 || 0xDCEF10B2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSetPhyPartCdramForKernel(void *pPhyPart);</source><br />
<br />
=== sceKernelPhyMemLowAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x5E169FEF<br />
|-<br />
| 3.63 || 0xEA98CCE1<br />
|}<br />
<br />
Allocate a range of physically contiguous "pages" from a PhyMemLow object.<br />
<br />
<source lang="C"><br />
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)<br />
// size and alignment must be aligned to the target PHYMEMLOW granularity<br />
// On success, *pOut contains the base physical address of a range with the provided size<br />
SceInt32 sceKernelPhyMemLowAllocForKernel(SceUInt32 type, SceSize size, SceSize alignment, SceUIntPAddr* pOut);<br />
</source><br />
<br />
=== sceKernelPhyMemLowPA2VAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x0FD6B756<br />
|-<br />
| 3.63 || 0x2CFD8C9A<br />
|}<br />
<br />
<source lang="C"><br />
// type must be 0x10002<br />
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);<br />
</source><br />
<br />
=== sceKernelGetPhyMemLowInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x06A4DA6C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)<br />
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);<br />
</source><br />
<br />
=== sceKernelPhyMemLowFreeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x18B99FDD<br />
|-<br />
| 3.63 || 0x844DF3DA<br />
|}<br />
<br />
Free a range of physical "pages" from a PhyMemLow object.<br />
<br />
<source lang="C"><br />
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)<br />
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);<br />
</source><br />
<br />
=== sceKernelSetPhyMemLowHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x2658EE0A<br />
|-<br />
| 3.63 || 0x2C7B8D65<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetPhyMemLowHookForKernel(void *pHook);</source><br />
<br />
=== sceKernelAllocMemBlockByCommandForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCA91B9D5<br />
|-<br />
| 3.63 || 0x455B0A4C<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelMemBlockAllocCommand { // size is 0x94 on FW 3.65<br />
SceSize size; // Size of this structure<br />
SceUInt32 code;<br />
char* name;<br />
char unk_8[0x74];<br />
void* typeInfo;<br />
char unk_0x84[0x10];<br />
} SceKernelMemBlockAllocCommand;<br />
<br />
int sceKernelAllocMemBlockByCommandForKernel(SceKernelMemBlockAllocCommand *pCommand);<br />
</source><br />
<br />
=== sceKernelAllocSimpleMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF81F4672<br />
|-<br />
| 3.63 || 0x814CDCC5<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelSimpleMemBlock {<br />
char unk_0[0x14];<br />
void *base;<br />
char unk_18[0x14];<br />
void *PhyPage;<br />
SceSize size;<br />
} SceKernelSimpleMemBlock;<br />
<br />
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);<br />
</source><br />
<br />
=== sceKernelFreeSimpleMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xA1FFA2C9<br />
|-<br />
| 3.63 || 0xA4DB88E1<br />
|}<br />
<br />
<source lang="C">int sceKernelFreeSimpleMemBlockForKernel(void *a1);</source><br />
<br />
=== sceKernelGetSimpleMemBlockBaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x0A8D14EC<br />
|-<br />
| 3.63 || 0x39D5A3B7<br />
|}<br />
<br />
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source><br />
<br />
=== sceKernelSimpleMemBlockGetFIFOForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x43DFCE89<br />
|-<br />
| 3.63 || 0xBD625136<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelSimpleMemBlockGetFIFOForKernel(void *pResult);</source><br />
<br />
=== sceKernelGetMemBlockInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFEF54604<br />
|-<br />
| 3.63 || 0x1D19C864<br />
|}<br />
<br />
<source lang="C">int sceKernelGetMemBlockInfoAllForKernel(void *pPart, int a2, int a3, int a4, int a5, SceUInt32 level, void *pInfoBuffer, int a8, SceUInt32 *a9);</source><br />
<br />
=== sceKernelGetMemBlockInfoSimpleForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x2364A170<br />
|-<br />
| 3.63 || 0xBA441FD0<br />
|}<br />
<br />
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source><br />
<br />
=== sceKernelGetMemBlockTypeForKernel ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x289BE3EC<br />
|-<br />
| 3.63 || 0xD44FE44B<br />
|}<br />
<br />
<source lang="c"><br />
/***<br />
* Gets the memory block type of a memory block<br />
*<br />
* @param[in] uid - SceUID of the memory block<br />
* @param[out] type - Type of the memory block identified by uid<br />
*<br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelGetMemBlockTypeForKernel(SceUID uid, unsigned int *type);</source><br />
<br />
=== sceKernelRemapMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.05 || 0x8D332AE1<br />
|-<br />
| 1.50-3.60 || not present. Moved to ForDriver<br />
|}<br />
<br />
Temp name was sceKernelRemapBlockForKernel.<br />
<br />
See [[SceSysmem#sceKernelRemapMemBlockForDriver|sceKernelRemapMemBlockForDriver]].<br />
<br />
=== sceKernelSetMemBlockDebugCallbackForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x01DE3AB7<br />
|-<br />
| 3.63 || 0xF57A97A0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetMemBlockDebugCallbackForKernel(void *pCallbacks);</source><br />
<br />
=== sceKernelMemBlockAssocPhyPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xA88F6D88<br />
|-<br />
| 3.63 || 0x441E6BE9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelMemBlockAssocPhyPageForKernel(SceUID guid, const SceUIntPtr *a2);</source><br />
<br />
=== sceKernelAllocPartitionStackMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x64133268<br />
|-<br />
| 3.63 || 0x40870E74<br />
|}<br />
<br />
Temp name was sceKernelAllocStackBlockForKernel.<br />
<br />
<source lang="C">SceUID sceKernelAllocPartitionStackMemBlockForKernel(const char *name, SceSize size, int a3);</source><br />
<br />
=== sceKernelMemBlockGetCodeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x61C2AA52<br />
|-<br />
| 3.63 || 0x48D2E408<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUint32 sceKernelMemBlockGetCodeForKernel(SceUint32 type);</source><br />
<br />
=== sceKernelAllocPartitionMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x5FFE4B79<br />
|-<br />
| 3.65 || 0x6DB46017<br />
|}<br />
<br />
Temp name was sceKernelAllocSystemCallTableForKernel.<br />
<br />
<source lang="C"><br />
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);<br />
</source><br />
<br />
=== sceKernelPartitionGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7BE4D3D1<br />
|-<br />
| 3.63 || 0xFB101B86<br />
|}<br />
<br />
<source lang="C">int sceKernelPartitionGetInfoForKernel(SceUID part_id, void *pInfo);</source><br />
<br />
=== sceKernelGetPhyPageResetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xEB350679<br />
|-<br />
| 3.63 || 0x8FD11E02<br />
|}<br />
<br />
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source><br />
<br />
=== SceSysmemForKernel_BD33EDDF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xBD33EDDF<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Gets thread's name. Returns 0 on success.<br />
<br />
<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source><br />
<br />
=== sceKernelAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC0A4D2F3<br />
|-<br />
| 3.65 || 0x85571907<br />
|}<br />
<br />
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source><br />
<br />
=== sceKernelAllocWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xA2CD1697<br />
|-<br />
| 3.63 || 0xCF3C3F7A<br />
|}<br />
<br />
<source lang="C"><br />
<br />
typedef struct SceAllocOpt {<br />
SceSize size; // 0x14<br />
SceSize data04; // maybe len align?<br />
SceSize align;<br />
int data0C;<br />
int data10; <br />
} SceAllocOpt;<br />
<br />
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);<br />
<br />
</source><br />
<br />
=== sceKernelFreeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xABAB0FAB<br />
|-<br />
| 3.65 || 0x4233C16D<br />
|}<br />
<br />
<source lang="C">int sceKernelFreeForKernel(void *ptr);</source><br />
<br />
=== sceKernelSetAllocFreeHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xBC2E2B2B<br />
|-<br />
| 3.63 || 0x42834422<br />
|}<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetAllocFreeHookForKernel(void *pHook);</source><br />
<br />
=== SceSysmemForKernel_C38D61FC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xC38D61FC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#SceSysmemForDriver_89A44858]].<br />
<br />
=== SceSysmemForKernel_7C797940 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x7C797940<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#SceSysmemForKernel_620E00E7]] or [[#sceGUIDReferObjectForDriver]].<br />
<br />
=== sceKernelVSlotMapProcMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFAD03241<br />
|-<br />
| 3.63 || 0x14D3807B<br />
|}<br />
<br />
<source lang="C">int sceKernelVSlotMapProcMemoryForKernel(SceUID pid, void *addr, SceSize size, SceUInt32 flag, SceKernelVSlot *pVslot, int *pBaseAddrOrOffset);</source><br />
<br />
=== sceKernelVSlotUnmapProcMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x789CD5BF<br />
|-<br />
| 3.63 || 0x4EEF69C7<br />
|}<br />
<br />
<source lang="C">int sceKernelVSlotUnmapProcMemoryForKernel(SceKernelVSlot *pVslot);</source><br />
<br />
=== SceSysmemForKernel_ECF9435A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xECF9435A<br />
|-<br />
| 3.63 || 0xFCB5745A<br />
|}<br />
<br />
Writes <code>nWords</code> times the 4-byte <code>ch</code> starting at usermode address <code>u_dst</code>. Write is performed with the <code>STRT</code> instruction and <code>DACR=0x15450FC3</code> (same as [[SceSysmem#sceKernelCopyToUserTextDomainForKernel||sceKernelCopyToUserTextDomain]] - required because NID tables are in RX segments).<br />
<br />
Used by [[SceKernelModulemgr]] to overwrite NID tables once a module's imports are bound with a random value from Bigmac RNG. This overwrite was called [[Kernel#NID_Poisoning|"NID Poisoning"]] by Team Molecule.<br />
<br />
<source lang="C">int SceSysmemForKernel_ECF9435A(void *u_dst, SceUInt32 ch, SceUInt32 nWords);</source><br />
<br />
=== SceSysmemForKernel_ECC68E7B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xECC68E7B<br />
|-<br />
| 3.63 || 0x05822B82<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_ECC68E7B(SceUInt32 phymem_type, SceUInt32 *result);</source><br />
<br />
=== SceSysmemForKernel_E68A9F1B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xE68A9F1B<br />
|-<br />
| 3.63 || 0x1DE4953F<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_E68A9F1B(int a1, SceClass **ppClass);</source><br />
<br />
=== sceKernelCheckOpenVMDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.000.081-3.610.011 || 0xD514BB56<br />
|-<br />
| 3.630.000-3.740.011 || 0x4E6D8BC3<br />
|}<br />
<br />
Returns 2 if Virtual Machine is open, 0 else. Returns 0x80027101 on error.<br />
<br />
<source lang="C">SceUInt32 sceKernelCheckOpenVMDomainForKernel(void);</source><br />
<br />
=== sceeKernelSetNameHeapHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x1E11F41D<br />
|-<br />
| 3.63 || 0x6DBDA03B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Not implemented in sysdbg build either. Probably only implemented during real development.<br />
<br />
Only return 0.<br />
<br />
<source lang="C">int sceeKernelSetNameHeapHookForKernel(void *pHook);</source><br />
<br />
=== SceSysmemForKernel_22708F14 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x22708F14<br />
|-<br />
| 3.63 || 0x456ECB54<br />
|}<br />
<br />
<source lang="C">SceUInt32 SceSysmemForKernel_22708F14(void *a1, int a2);</source><br />
<br />
=== SceSysmemForKernel_22A26637 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x22A26637<br />
|-<br />
| 3.63 || 0xAD19285A<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_22A26637(void *a1, int a2, int a3, int a4, int a5, int a6, void *a7);</source><br />
<br />
=== SceSysmemForKernel_C6F04370 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xC6F04370<br />
|-<br />
| 3.63 || 0x02DAD732<br />
|}<br />
<br />
init budget data in sysmem.<br />
<br />
<source lang="C">int SceSysmemForKernel_C6F04370(void);</source><br />
<br />
=== SceSysmemForKernel_B339A865 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB339A865<br />
|-<br />
| 3.63 || 0x320E907F<br />
|}<br />
<br />
Returns 0.<br />
<br />
<source lang="C">int SceSysmemForKernel_B339A865(void);</source><br />
<br />
=== SceSysmemForKernel_AD5A83E3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xAD5A83E3<br />
|-<br />
| 3.63 || 0xBF70207B<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_AD5A83E3(SceUID guid, SceUInt32 vis_level, SceUInt32 a3, int *a4);</source><br />
<br />
=== SceSysmemForKernel_A504BA60 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xA504BA60<br />
|-<br />
| 3.63 || 0xCAB15F74<br />
|}<br />
<br />
=== SceSysmemForKernel_7DC46969 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7DC46969<br />
|-<br />
| 3.63 || 0x8450BFF7<br />
|}<br />
<br />
Returns 1.<br />
<br />
<source lang="C">int SceSysmemForKernel_7DC46969(void);</source><br />
<br />
== SceSysmemForDriver ==<br />
<br />
=== sceKernelProcessGetContextForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.80-3.74 || 0x2ECF7944<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">int sceKernelProcessGetMMUContextForDriver(SceUID pid, SceKernelMMUContext **ppCtx);</source><br />
<br />
=== sceKernelProcessSwitchContextForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.74 || 0x2D711589<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">int sceKernelProcessSwitchMMUContextForDriver(SceKernelMMUContext *new_context, SceKernelMMUContext *prev_context);</source><br />
<br />
=== scePUIDOpenByGUIDForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBF209859<br />
|}<br />
<br />
Temp name was sceKernelCreateUserUidForDriver.<br />
<br />
<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID guid);</source><br />
<br />
=== scePUIDOpenByGUIDWithFlagsForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCED1547B<br />
|}<br />
<br />
Temp name was sceKernelCreateUserUidForClassForDriver.<br />
<br />
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source><br />
<br />
=== scePUIDOpenByNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x513B9DDD<br />
|}<br />
<br />
Temp name was sceKernelCreateUserUidForNameForDriver.<br />
<br />
<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source><br />
<br />
=== scePUIDOpenByNameWithClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8DA0BCA5<br />
|}<br />
<br />
Equivalent to [[SceSysmem#scePUIDOpenByNameForDriver|scePUIDOpenByNameForDriver]], but object's class is checked to be a subclass of provided <code>pClass</code> before opening.<br />
<br />
<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(ScePID pid, const char *name, SceClass *pClass);</source><br />
<br />
=== scePUIDOpenByNameWithExactClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.010.031 || 0xB800123C<br />
|-<br />
| 3.10-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name. Temp name was <code>add_heap</code>.<br />
<br />
Equivalent to [[SceSysmem#scePUIDOpenByNameWithClassForDriver|scePUIDOpenByNameWithClass]], but the object's class must match exactly the provided <code>pClass</code>.<br />
<br />
<source lang="C">SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID pid, const char *name, const SceClass *pClass);</source><br />
<br />
=== scePUIDCloseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x84A4AF5E<br />
|}<br />
<br />
Temp name was sceKernelDeleteUserUidForDriver.<br />
<br />
<source lang="c">int scePUIDCloseForDriver(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDSetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x12624884<br />
|}<br />
<br />
Temp name was sceKernelSetNameForPidForUidForDriver.<br />
<br />
<source lang="c">int scePUIDSetNameForDriver(SceUID pid, SceUID puid, const char *name);</source><br />
<br />
=== scePUIDGetObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xFE6D7FAE<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForPidForUidForDriver.<br />
<br />
<source lang="c">int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== scePUIDtoGUIDForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x45D22597<br />
|}<br />
<br />
Temp name was sceKernelKernelUidForUserUidForDriver.<br />
<br />
Returns the Global UID of a process based on its Process UID.<br />
<br />
<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDtoGUIDWithClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x184172B1<br />
|}<br />
<br />
Temp name was sceKernelKernelUidForUserUidForClassForDriver.<br />
<br />
<source lang="c">SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID puid, SceClass *pClass);</source><br />
<br />
=== scePUIDGetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x09896EB7<br />
|}<br />
<br />
Temp name was sceKernelGetNameForPidByUidForDriver, scePUIDGetEntryHeapNameForDriver <br />
<br />
<source lang="C">int scePUIDGetNameForDriver(SceUID pid, SceUID puid, char **pName);</source><br />
<br />
=== scePUIDGetClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xE9728A12<br />
|}<br />
<br />
Temp name was sceKernelGetClassForPidForUidForDriver.<br />
<br />
<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID puid, SceClass **ppClass);</source><br />
<br />
=== sceUIDKernelCreateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.060.031 || 0x7FC849B1<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDKernelCreateForKernel]].<br />
<br />
Create a UID with default attribute (0x30000).<br />
<br />
<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDKernelCreateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x56A13E90<br />
|}<br />
<br />
Temp name was sceUIDKernelCreate2ForDriver, sceKernelCreateUidObj2ForDriver.<br />
<br />
Create a UID with default attribute (0x30000).<br />
<br />
<source lang="c">SceUID sceGUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source><br />
<br />
=== sceUIDOpenByNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x796881D6<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDOpenByNameForDriver]].<br />
<br />
<source lang="c">SceUID sceUIDOpenByNameForDriver(const char *name);</source><br />
<br />
=== sceUIDCloseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x32C5F628<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
if (flag_or_addr_or_pid & 0x40000000) == 0 calls [[#sceGUIDCloseForDriver]] else [[#scePUIDCloseForDriver]].<br />
<br />
<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source><br />
<br />
=== SceSysmemForDriver_F09A7D09 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xF09A7D09<br />
|-<br />
| 3.60-3.74 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDCloseForDriver]].<br />
<br />
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source><br />
<br />
=== sceUIDGetDefaultClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xFE28F5EB<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source><br />
<br />
=== sceUIDtoObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xAB7AC3D1<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls [[#sceUIDtoObjectForKernel]].<br />
<br />
<source lang="C">SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);</source><br />
<br />
=== sceUIDtoClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x65B9B393<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDtoClassForKernel]].<br />
<br />
<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source><br />
<br />
=== sceUIDClassInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xE6D75E99<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Renamed to [[SceSysmem#sceUIDClassInitClassForDriver|sceUIDClassInitClassForDriver]].<br />
<br />
<source lang="C">int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);</source><br />
<br />
=== sceUIDClassInitClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x61317102<br />
|}<br />
<br />
Temp name was sceKernelCreateClassForDriver.<br />
<br />
<source lang="c">int sceUIDClassInitClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);</source><br />
<br />
=== sceUIDGetClassInfoAllForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x3EF32C6C<br />
|-<br />
| 3.60 || not present. Moved to ForKernel<br />
|}<br />
<br />
See [[SceSysmem#sceUIDClassGetClassInfoAllForKernel|sceUIDClassGetClassInfoAllForKernel]]<br />
<br />
=== sceGUIDCreateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x89A44858<br />
|}<br />
<br />
Temp name was sceKernelCreateUidObjForUidForDriver.<br />
<br />
Create a GUID with default attribute (0x30000) for the specified UID.<br />
<br />
<source lang="c">SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID guid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDOpenByNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xD76E7452<br />
|}<br />
<br />
Temp name was sceKernelOpenUidForNameForDriver.<br />
<br />
<source lang="c">SceUID sceGUIDOpenByNameForDriver(const char *name);</source><br />
<br />
=== sceGUIDCloseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x047D32F2<br />
|}<br />
<br />
Temp name was sceKernelDeleteUidForDriver.<br />
<br />
<source lang="C">int sceGUIDCloseForDriver(SceUID guid);</source><br />
<br />
=== sceGUIDGetClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC74B0152<br />
|}<br />
<br />
Temp name was sceKernelGetClassForUidForDriver.<br />
<br />
<source lang="c">int sceGUIDGetClassForDriver(SceUID guid, SceClass **ppClass);</source><br />
<br />
=== sceGUIDSetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0x4CFA4100<br />
|}<br />
<br />
Temp name was sceKernelSetObjectForUidForDriver. Wrongfully named scePUIDSetNameForDriver.<br />
<br />
Calls the same routine as [[SceSysmem#sceGUIDSetForKernel|sceGUIDSetForKernel]], but passes NULL for pClass and pObject.<br />
<br />
<source lang="c">SceInt32 sceGUIDSetNameForDriver(SceUID guid, const char *name);</source><br />
<br />
=== sceGUIDNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xB2BB6216<br />
|-<br />
| 3.60 || 0xE655852F<br />
|}<br />
<br />
Temp name was sceKernelGetNameForUid2ForDriver.<br />
<br />
<source lang="C">char* sceGUIDNameForDriver(SceUID guid);</source><br />
<br />
=== sceGUIDGetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA78755EB<br />
|}<br />
<br />
Temp name was sceKernelGetNameForUidForDriver.<br />
<br />
<source lang="C">int sceGUIDGetNameForDriver(SceUID guid, char **pName);</source><br />
<br />
=== sceGUIDGetObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x0FC24464<br />
|}<br />
<br />
Temp name was sceKernelGUIDGetObjectForDriver.<br />
<br />
<source lang="c">int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0F5C84B7<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForUidForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectWithLevelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0xF6DB54BA<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForUidForAttrForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);</source><br />
<br />
=== sceGUIDReferObjectWithClassLevelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x77066FD1<br />
|}<br />
<br />
<source lang="c">int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectWithClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x00ED6C14<br />
|}<br />
<br />
Temp name was sceKernelGetObjForUidForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectWithSubclassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x72A98D17<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForUidForClassTreeForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectWithSubclassForDriver(SceUID guid, SceClass *pClass, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReleaseObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x149885C4<br />
|}<br />
<br />
Temp name was sceKernelUidReleaseForDriver.<br />
<br />
<source lang="c">int sceGUIDReleaseObjectForDriver(SceUID uid);</source><br />
<br />
=== sceKernelGetUIDClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x85336A1C<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceClass *sceKernelGetUIDClassForDriver(void);</source><br />
<br />
=== sceKernelIsSubclassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x6484D03E<br />
|-<br />
| 1.691 || 0x55F4826F<br />
|-<br />
| 3.60 || not present. Moved to ForKernel<br />
|}<br />
<br />
See [[SceSysmem#sceUIDClassIsSubclassForKernel|sceUIDClassIsSubclassForKernel]]<br />
<br />
=== SceSysmemForDriver_6F2ACDAE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x6F2ACDAE<br />
|-<br />
| 1.80-3.74 || not present<br />
|}<br />
<br />
Temp name was switch_ttb_for_pid.<br />
<br />
Changes the TTBR to point to the tables for a given PID.<br />
<br />
<source lang="c">int SceSysmemForDriver_6F2ACDAE(SceUID pid);</source><br />
<br />
=== sceKernelAllocMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.65 || 0xC94850C9<br />
|}<br />
<br />
The interface is the same as the usermode version of this function, however more types can be specified and more options are in the pOpt argument.<br />
<br />
To allocate a kernel RW block of memory, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW</code>.<br />
<br />
To allocate a block of memory with a specific physical address, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW</code> or <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW</code>, <code>pOpt->attr = 2</code>, and <code>pOpt->pbase = physical address</code>.<br />
<br />
To allocate a block of memory that is kernel executable, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.<br />
<br />
To allocate a block of memory that is physically contiguous, specify <code>type = 0x30808006</code>, <code>pOpt->attr = 0x200004</code> and an alignment to <code>pOpt->alignment</code>.<br />
<br />
To allocate a block of memory inside the CDRAM, specify <code>type = 0x40404006</code>.<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source><br />
<br />
=== sceKernelAllocMemBlockForDebuggerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.50 || 0x59F3159C<br />
|}<br />
<br />
Same as [[#sceKernelAllocMemBlockForDriver]] but authorizes null pOpt.<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source><br />
<br />
=== sceKernelAllocMemBlockWithInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD44F464D<br />
|}<br />
<br />
Temp name was sceKernelAllocMemBlockExtForDriver.<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source><br />
<br />
=== sceKernelFreeMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.65 || 0x009E1C61<br />
|}<br />
<br />
<source lang="C">int sceKernelFreeMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelFindMemBlockByAddrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8A1742F6<br />
|}<br />
<br />
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source><br />
<br />
=== sceKernelFindProcMemBlockByAddrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x857F1D5A<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockByAddrForPidForDriver.<br />
<br />
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source><br />
<br />
=== sceKernelGetMemBlockAllocSizeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.120.011 || 0x63E5754B<br />
|-<br />
| 2.500.071-3.740.011 || not present<br />
|}<br />
<br />
This function was replaced since System Software version 2.500.071 by [[#sceKernelGetMemBlockAllocMapSizeForDriver]].<br />
<br />
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID memid, SceSize *pAllocSize);</source><br />
<br />
=== sceKernelGetMemBlockAllocMapSizeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.120.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x78337B62<br />
|}<br />
<br />
Temp name was sceKernelMemBlockGetSomeSizeForDriver.<br />
<br />
This function is a replacement since System Software version 2.500.071 of [[#sceKernelGetMemBlockAllocSizeForDriver]].<br />
<br />
<source lang="C">int sceKernelGetMemBlockAllocMapSizeForDriver(SceUID memid, SceSize *pAllocMapSize);</source><br />
<br />
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF3BBE2E1<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.<br />
<br />
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source><br />
<br />
=== sceKernelGetMemBlockPARangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x98C15666<br />
|}<br />
<br />
Temp name was sceKernelGetMemBlockAddrPairForUidForDriver.<br />
<br />
Returns the physical address and size (pRange) of the memory block if it is physically continuous.<br />
<br />
<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelGetMemBlockBaseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.74 || 0xA841EDDA<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Get mapped base address of memory block.<br />
*<br />
* Get base address of memory block.<br />
* @param[in] uid block id<br />
* @param[out] ppBase base address of memory block<br />
* @retval SCE_OK success<br />
* @retval <SCE_OK Error<br />
*/<br />
int sceKernelGetMemBlockBaseForDriver(SceUID uid, void **ppBase);<br />
</source><br />
<br />
=== sceKernelGetMemBlockVBaseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB81CF0A3<br />
|}<br />
<br />
Temp name was sceKernelGetMemBlockKernelPageForDriver.<br />
<br />
<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source><br />
<br />
=== sceKernelGetMemBlockMappedBaseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0B1FD5C3<br />
|}<br />
<br />
<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source><br />
<br />
=== sceKernelGetMemBlockPAVectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x19A51AC7<br />
|}<br />
<br />
Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.<br />
<br />
<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelGetMemBlockInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA73CFFEF<br />
|}<br />
<br />
Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.<br />
<br />
<source lang="c">int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source><br />
<br />
=== sceKernelGetMemBlockInfoExForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x24A99FFF<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">int sceKernelGetMemBlockInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *pInfo);</source><br />
<br />
=== sceKernelDecRefCountMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF50BDC0C<br />
|}<br />
<br />
Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.<br />
<br />
<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source><br />
<br />
=== sceKernelIncRefCountMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xEAF3849B<br />
|}<br />
<br />
Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.<br />
<br />
<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelMemBlockType2MemtypeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x20C811FA<br />
|}<br />
<br />
<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source><br />
<br />
=== sceKernelMemBlockTypeGetPrivilegesForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6A0792A3<br />
|}<br />
<br />
<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source><br />
<br />
=== sceKernelMemBlockType2SourceMemTypeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCB0F3A33<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemBlockTypeGetUnknownForDriver.<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_IO 0x100000<br />
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_LPDDR 0x200000<br />
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_CDRAM 0x400000<br />
<br />
int sceKernelMemBlockType2SourceMemTypeForDriver (SceKernelMemBlockType type);<br />
</source><br />
<br />
=== sceKernelMapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x58D21746<br />
|}<br />
<br />
Temp name was sceKernelMapBlockUserVisibleForDriver, sceKernelPartitionMapMemBlockForDriver.<br />
<br />
<source lang="c">int sceKernelMapMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelMapMemBlockWithFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x04059C4B<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMapBlockUserVisibleWithFlagForDriver.<br />
<br />
<source lang="c"><br />
/**<br />
* Map a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock to map.<br />
* @param[in] flag - Set to 1 to prevent DCache invalidation before mapping.<br />
*<br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelMapMemBlockWithFlagForDriver(SceUID uid, int flag);<br />
</source><br />
<br />
=== sceKernelRemapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xDFE2C8CB<br />
|}<br />
<br />
Temp name was sceKernelRemapBlockForDriver, sceKernelPartialRemapMemBlockForDriver.<br />
<br />
This can be used to remap RW memory as RX. To do this, first allocate a memory block of type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW</code>. After you are done writing, call sceKernelRemapMemBlockForDriver with type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.<br />
<br />
<source lang="c">int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source><br />
<br />
=== sceKernelUnmapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFFCD9B60<br />
|}<br />
<br />
<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelGetPhysicalMemoryTypeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x0AAA4FDD<br />
|}<br />
<br />
Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver<br />
<br />
<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source><br />
<br />
=== sceKernelGetPhyMemInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x89475192<br />
|}<br />
<br />
<source lang="c"><br />
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60<br />
SceSize size; // Size of this structure<br />
void* pbase; // Base physical address<br />
SceSize psize; // Physical size<br />
} SceKernelPhyMemInfo;<br />
<br />
// as of FW 0.931-0.990, pindex must be one of these values: 1 PhyPartKernel, 8 PageVenezia, 9 PageVIP<br />
#define SCE_KERNEL_PHYMEMPART_KERNEL_INDEX 1<br />
#define SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX 6<br />
#define SCE_KERNEL_PAGE_VENEZIA_INDEX 8<br />
#define SCE_KERNEL_PAGE_VIP_INDEX 9<br />
<br />
SceInt32 sceKernelGetPhyMemInfoForDriver(SceUInt32 pindex, SceKernelPhyMemInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelPartialAllocMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x16713BE8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Allocates PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[FREE|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialAllocMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 opCheck);<br />
</source><br />
<br />
=== sceKernelPartialFreeMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8C43B052<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Unmaps and frees PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialFreeMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);<br />
</source><br />
<br />
=== sceKernelPartialMapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x13805CA8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Maps PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|FREE|ALLOCNOMAP|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialMapMemBlockForDriver (SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);<br />
</source><br />
<br />
=== sceKernelPartialRemapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4C584B29<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Remaps PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] op - SCE_KERNEL_MEMBLOCK_PARTIAL_OP_[REMAP_RO|REMAP_RW] | SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED_RW|MAPPED_RO|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialRemapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 op);<br />
</source><br />
<br />
=== sceKernelPartialUnmapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6C76AD89<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Unmaps PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialUnmapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);<br />
</source><br />
<br />
=== sceKernelGetMemBlockProcessForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x1EFC96EA<br />
|}<br />
<br />
<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source><br />
<br />
=== sceKernelMemBlockToPARangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x64DBE472<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemBlockGetVirPageForDriver.<br />
<br />
Gets a single PARange from the memblock. Returns an error if the memblock has more than one PARange.<br />
<br />
<source lang="c">int sceKernelMemBlockToPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelMemBlockToPAVectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x987EE587<br />
|}<br />
<br />
<source lang="c">int sceKernelMemBlockToPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelCreateHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9328E0E8<br />
|}<br />
<br />
The heap pool is thread safe.<br />
<br />
has list "SCE_KERNEL_HEAP_HAS_HEAPCB".<br />
<br />
<source lang="C"><br />
// pOpt can be NULL<br />
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);<br />
</source><br />
<br />
=== sceKernelDeleteHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xD6437637<br />
|}<br />
<br />
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source><br />
<br />
=== sceKernelVerifyHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC50A9C0D<br />
|}<br />
<br />
<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);</source><br />
<br />
=== sceKernelShrinkHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x856FA2E3<br />
|}<br />
<br />
<source lang="c">int sceKernelShrinkHeapForDriver(SceUID heapid);</source><br />
<br />
=== sceKernelAllocHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x7B4CB60A<br />
|}<br />
<br />
Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.<br />
<br />
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.<br />
<br />
<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source><br />
<br />
=== sceKernelAllocUncacheHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7750CEA7<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryFromGlobalHeapForDriver.<br />
<br />
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uncache heap.<br />
<br />
<source lang="c">void* sceKernelAllocUncacheHeapMemoryForDriver(SceSize size);</source><br />
<br />
=== sceKernelAllocUncacheHeapMemoryWithOptionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x0B4ED16A<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver.<br />
<br />
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uncache heap.<br />
<br />
<source lang="c">void* sceKernelAllocUncacheHeapMemoryWithOptionForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelAllocHeapMemoryWithOptForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB415B5A8<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.<br />
<br />
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.<br />
<br />
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelAllocHeapMemoryWithOptionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x49D4DD9B<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.<br />
<br />
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.<br />
<br />
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelFreeHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3EBCE343<br />
|}<br />
<br />
Temp name was sceKernelMemPoolFreeForDriver.<br />
<br />
<source lang="c">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source><br />
<br />
=== sceKernelFreeUncacheHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFB817A59<br />
|}<br />
<br />
Temp name was sceKernelFreeHeapMemoryFromGlobalHeapForDriver.<br />
<br />
<source lang="c">int sceKernelFreeUncacheHeapMemoryForDriver(void *ptr);</source><br />
<br />
=== sceKernelCountFillValueFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBDA6E42B<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock32UserForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValueFromUserForDriver(unsigned int *ptr, int value, int byte_size);</source><br />
<br />
=== sceKernelCountFillValueFromUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8334454F<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock32UserForPidForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValueFromUserProcForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);</source><br />
<br />
=== sceKernelCountFillValue64FromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.120.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0xBB3B02C2<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock64UserForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValue64FromUserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source><br />
<br />
=== sceKernelCountFillValue64FromUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.120.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0xE83855FD<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock64UserForPidForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValue64FromUserProcForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source><br />
<br />
=== sceKernelVAtoPAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x8D160E65<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrForDriver.<br />
<br />
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.<br />
<br />
Returns <0 on error, values >=0 indicate success.<br />
<br />
<source lang="c">int sceKernelVAtoPAForDriver(ScePVoid pVA, SceUIntPtr *pPA);</source><br />
<br />
=== sceKernelVAtoPABySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x65419BD3<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.<br />
<br />
<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source><br />
<br />
=== sceKernelProcVAtoPAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.120.011 || 0xC51934BD<br />
|-<br />
| 2.500.071-3.740.011 || not present<br />
|}<br />
<br />
<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelProcModeVAtoPAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x61A67D32<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrForPidForDriver.<br />
<br />
<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, SceUInt32 mode, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelVARangeToPAVectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE68BEEBD<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrListForDriver.<br />
<br />
This function writes into <code>pVector->output_buffer</code> an array of <code>vRange</code> that encompasses the block of memory specified in the input. <code>pVector->ret_count</code> will contain the number of entries written. If <code>pVector->output_buffer</code> is null, it will just write the count.<br />
<br />
<source lang="c">int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelVARangeToPAVectorBySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x08A8A7E8<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetPaddrListForLargePageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPAVectorBySWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelVARangeToPAVectorByHWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x16844CE6<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrListForSmallPageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPAVectorByHWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelVARangeToPARangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0xAE36C775<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrPairForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelVARangeToPARangeBySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x32257A24<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetPaddrPairForLargePageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPARangeBySWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelVARangeToPARangeByHWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xB3575090<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetPaddrPairForSmallPageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPARangeByHWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelIsAccessibleRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9C78064C<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockForDriver.<br />
<br />
Also exported as [[#sceKernelIsAccessibleRangeForDebugger]].<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="c">int sceKernelIsAccessibleRangeForDriver(SceUInt32 permission_type, const void *pVA, SceSize len);</source><br />
<br />
=== sceKernelIsAccessibleRangeProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9F6E45E3<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockForPidForDriver.<br />
<br />
Also exported as [[#sceKernelIsAccessibleRangeProcForDebugger]].<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="C">int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 permission_type, const void *pVA, SceSize len);</source><br />
<br />
=== sceKernelIsEqualAccessibleRangeProcBySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xF4AD89D8<br />
|}<br />
<br />
Temp name was sceKernelProcIsPAWithinSameSection, sceKernelIsPaddrWithinSameSectionForUidForDriver.<br />
<br />
<source lang="C">int sceKernelIsEqualAccessibleRangeProcBySWForDriver(SceUID pid, int permission_type, void *pVA, SceSize len);</source><br />
<br />
=== sceKernelGetDebugPADramRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xC9928F5E<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetUnknownValidPhysAddressSpaceForDriver.<br />
<br />
<source lang="C">int sceKernelGetDebugPADramRangeForDriver(SceUIntPtr *address, SceSize *length);</source><br />
<br />
=== sceKernelIsVAWithinDebugPADramRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xA7C0D1FC<br />
|}<br />
<br />
This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver.<br />
<br />
<source lang="C">int sceKernelIsVAWithinDebugPADramRangeForDriver(const void *pVA);</source><br />
<br />
=== sceKernelUserMapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x278BC201<br />
|}<br />
<br />
Temp name was sceKernelMapUserBlockDefaultTypeForDriver.<br />
<br />
Assigns type 0.<br />
<br />
<source lang="C">SceUID sceKernelUserMapForDriver(const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source><br />
<br />
=== sceKernelProcUserMapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.000-3.740.011 || 0x0091D74D<br />
|}<br />
<br />
Temp name was sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly the real name.<br />
<br />
Assigns type 0.<br />
<br />
<source lang="C">SceUID sceKernelProcUserMapForDriver(SceUID pid, const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source><br />
<br />
=== sceKernelUserMapWithFlagsForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.030-1.060.031 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x7D4F8B5F<br />
|}<br />
<br />
Temp name was sceKernelMapUserBlockForDriver.<br />
<br />
Permission is either "1" for read only, no execute or "2"/"3" for read write, no execute. Type is either 0, 1, or 17 and affects the block type. 0 is default. This will allocate kernel memory starting at kernel_page. To get the same memory as the user pointer, add the kernel_offset. kernel_size is how much is allocated.<br />
<br />
<source lang="c"><br />
// this signature is for FW 1.50-1.69<br />
int sceKernelUserMapWithFlagsForDriver(SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);<br />
<br />
// this signature is for FW 3.60 - it now allows to give a name<br />
int sceKernelUserMapWithFlagsForDriver(char *name, SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);<br />
</source><br />
<br />
=== sceKernelUserUnmapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x00575B00<br />
|}<br />
<br />
Temp name was sceKernelMemBlockReleaseForDriver.<br />
<br />
<source lang="c">int sceKernelUserUnmapForDriver(SceUID uid);</source><br />
<br />
=== sceKernelUnlockRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x75C70DE0<br />
|}<br />
<br />
Temp name was sceKernelMemRangeReleaseForDriver.<br />
<br />
<source lang="c">int sceKernelUnlockRangeForDriver(void *addr, SceSize size);</source><br />
<br />
=== sceKernelUnlockRangeProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA8525B06<br />
|}<br />
<br />
Temp name was sceKernelMemRangeReleaseForPidForDriver.<br />
<br />
<source lang="c">int sceKernelUnlockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source><br />
<br />
=== sceKernelUnlockRangeWithModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x22CBE925<br />
|}<br />
<br />
Temp name was sceKernelMemRangeReleaseWithPermForDriver, sceKernelUnlockRangeWithPermForDriver.<br />
<br />
Decreases references to pages.<br />
<br />
<source lang="c">int sceKernelUnlockRangeWithModeForDriver(SceKernelLockMode mode, void *addr, SceSize size);</source><br />
<br />
=== sceKernelLockRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x59A4402F<br />
|}<br />
<br />
Temp name was sceKernelMemRangeRetainForDriver.<br />
<br />
<source lang="c">int sceKernelLockRangeForDriver(void *addr, SceSize size);</source><br />
<br />
=== sceKernelLockRangeProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x659586BF<br />
|}<br />
<br />
Temp name was sceKernelMemRangeRetainForPidForDriver.<br />
<br />
<source lang="c">int sceKernelLockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source><br />
<br />
=== sceKernelLockRangeWithModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBC0A1D60<br />
|}<br />
<br />
Temp name was sceKernelMemRangeRetainWithPermForDriver, sceKernelLockRangeWithPermForDriver.<br />
<br />
Increases references to pages.<br />
<br />
<source lang="c">int sceKernelLockRangeWithModeForDriver(SceKernelLockMode mode, const void *addr, SceSize size);</source><br />
<br />
=== sceKernelReadUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xE08F3967<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6D88EF8A<br />
|}<br />
<br />
Temp name was sceKernelMemcpyKernelToUserForDriver.<br />
<br />
Copies <code>size</code> bytes from a kernel buffer to a user buffer. Writes to <code>uaddr</code> are performed using <code>strt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserForDriver(void *uaddr, const void *kaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6B825479<br />
|}<br />
<br />
Temp name was sceKernelMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserForDriver.<br />
<br />
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyToUserForDriver|sceKernelCopyToUser]].<br />
<br />
<source lang="c">SceInt32 sceKernelProcCopyToUserForDriver(ScePID pid, void *uaddr, const void *kaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcDomainForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.69 || 0x571D2739<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelRoMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserRoForDriver.<br />
<br />
Same as [[SceSysmem#sceKernelCopyToUserProcForDriver|sceKernelCopyToUserProc]], but sets DACR to 0xFFFFFFFF (ignore access permission bits in page table) before the copy then restores it. Use this function instead of sceKernelCopyToUserProc if you need to write data to read-only pages.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserProcDomainForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBC996A7A<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToKernelForDriver.<br />
<br />
Copies <code>size</code> bytes from a user buffer to a kernel buffer. Reads from <code>uaddr</code> are performed using <code>ldrt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyFromUserForDriver(void *kaddr, const void *uaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyFromUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.60 || 0x605275F8<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToKernelForPidForDriver, sceKernelProcCopyFromUserForDriver.<br />
<br />
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUser]].<br />
<br />
<source lang="c">SceInt32 sceKernelCopyFromUserProcForDriver(SceUID pid, void *dst, void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyFromToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x1BD44DD5<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToUserForDriver, sceKernelUserCopyForDriver.<br />
<br />
<source lang="C">int sceKernelCopyFromToUserForDriver(void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyFromToUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x8E086C33<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToUserForPidForDriver, sceKernelProcUserCopyForDriver.<br />
<br />
<source lang="c">int sceKernelCopyFromToUserProcForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelUserStrnlenForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present (in ForKernel)<br />
|-<br />
| 0.940-0.990 || 0xFF06898A<br />
|-<br />
| 1.50-3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelStrnlenFromUserForDriver.<br />
<br />
<source lang="C">SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelStrnlenUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0xB429D419<br />
|}<br />
<br />
<source lang="c">SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelProcStrnlenUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x9929EB07<br />
|}<br />
<br />
<source lang="c">SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelProcUserStrcpyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0xEBCB3970<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);</source><br />
<br />
=== sceKernelStrncpyFromUserSpecialForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0x7440BCDA<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source><br />
<br />
=== sceKernelStrncpyToUserSpecialForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0x369355F1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source><br />
<br />
=== sceKernelUserStrncpyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present. Present but not exported.<br />
|-<br />
| 0.940-0.990 || 0xE6D5EFE4<br />
|-<br />
| 1.50-3.60 || not present<br />
|}<br />
<br />
Returns 0 on success.<br />
<br />
<source lang="C">int sceKernelUserStrncpyForDriver(char *dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelStrncpyFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0xDB3EC244<br />
|}<br />
<br />
Temp name was sceKernelStrncpyUserToKernelForDriver.<br />
<br />
<source lang="c">int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelProcStrncpyFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x75AAF178<br />
|}<br />
<br />
Temp name was sceKernelStrncpyUserForPidForDriver.<br />
<br />
<source lang="c">int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelStrncpyToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x80BD6FEB<br />
|}<br />
<br />
Temp name was sceKernelStrncpyKernelToUserForDriver.<br />
<br />
<source lang="c">int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelProcStrncpyToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0xFED82F2D<br />
|}<br />
<br />
Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.<br />
<br />
<source lang="c">int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source><br />
<br />
== SceSysmemForDebugger ==<br />
<br />
This library was removed on FW 1.80.<br />
<br />
=== sceKernelPhysicalAddressSpaceStartForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x6AE2188F<br />
|-<br />
| 1.691-3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelPhysicalAddressSpaceStartForDebugger(void);</source><br />
<br />
=== sceKernelGetPhysicalAddressSpaceForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xE8905626<br />
|-<br />
| 1.691-3.60 || not present<br />
|}<br />
<br />
In FW 0.931, it calls sceKernelPhysicalAddressSpaceStartForDebugger.<br />
<br />
<source lang="C">void *sceKernelGetPhysicalAddressSpaceForDebugger(void);</source><br />
<br />
=== sceKernelIsAccessibleRangeProcForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-1.692 || 0x01DFC193<br />
|-<br />
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeProcForDriver]].<br />
|}<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="C">int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source><br />
<br />
=== sceKernelIsAccessibleRangeForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-1.692 || 0xD027761F<br />
|-<br />
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeForDriver]].<br />
|}<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="C">int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);</source><br />
<br />
== SceSysmem ==<br />
<br />
The SceSysmem library is responsible for both low-level and high-level memory management. There are functions for allocating raw blocks of memory (similar to Linux <code>sbrk</code>) as well as functions for maintaining a heap-like structure (similar to <code>malloc</code>) for kernel, however [[SceLibKernel]] implements a proper heap and that is used for user code.<br />
<br />
=== sceKernelMapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.69 || 0x7B763A21<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelRemapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.69 || 0x3B29E0F5<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelPartialMapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.69 || 0xC0A59868<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelUnmapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.69 || 0xEE30D976<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source><br />
<br />
=== sceKernelPartialUnmapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.69 || 0xCA99929B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelGetMemBlockInfoByRange ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 0.996-3.60 || 0x006F3DB4<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* @brief Get memory block informaton by virtual address range<br />
<br />
* @param[in] vbase base address<br />
* @param[in] vsize size<br />
* @param[inout] pInfo information structure<br />
*/<br />
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetMemBlockInfoByAddr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4010AD65<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* @brief Get memory block information.<br />
*<br />
* Get information about a memory block.<br />
* @param[in] vbase Base address<br />
* @param[inout] pInfo Information structure<br />
*/<br />
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetSubbudgetInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.69-3.60 || 0x832B4A65<br />
|}<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_SUBBUDGET_ID_MAIN (0)<br />
#define SCE_KERNEL_SUBBUDGET_ID_CDLG (1)<br />
<br />
typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60<br />
int size; // Size of this structure<br />
SceUInt32 totalSize;<br />
SceUInt32 freeSize;<br />
} SceKernelSubbudgetInfo;<br />
<br />
/**<br />
* Get the subbudget info<br />
*<br />
* @param[in] subbudget - The subbudget ID <br />
* @param[out] pInfo - The subbudget info<br />
*<br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelGetSubbudgetInfo(SceInt subbudget, SceKernelSubbudgetInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetFreeMemorySize ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x87CC580B<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Get free memory size<br />
*/<br />
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);<br />
</source><br />
<br />
=== sceKernelOpenMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8EB8DFBB<br />
|}<br />
<br />
<source lang="c"><br />
// on FW <= 1.691, flags is not used<br />
SceUID sceKernelOpenMemBlock(const char *name, int flags);<br />
</source><br />
<br />
=== sceKernelFindMemBlockByAddr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA33B99D1<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* Find memory block by virtual range (base address and size)<br />
* If size == 0, API returns a memory block which contains 'start'<br />
* If size > 0, API returns a memory block just fit range [start, start + size].<br />
* @param[in] vaddr base address<br />
* @param[in] size address size<br />
* @retval >=SCE_OK block id<br />
* @retval <SCE_OK error<br />
*/<br />
SceUID sceKernelFindMemBlockByAddr(void *vaddr, SceSize size);<br />
</source><br />
<br />
=== sceKernelFreeMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA91E15EE<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* Free memory block.<br />
*<br />
* @param[in] uid block uid<br />
* @retval SCE_OK Success<br />
* @retval <SCE_OK Error code<br />
*/<br />
int sceKernelFreeMemBlock(SceUID uid);<br />
</source><br />
<br />
=== sceKernelFreeMemBlockForVM ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4EA13FEA<br />
|}<br />
<br />
<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source><br />
<br />
=== sceKernelCloseMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB680E3A0<br />
|}<br />
<br />
<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source><br />
<br />
=== sceKernelGetMemBlockBase ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.996-3.60 || 0xB8EF5818<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Get mapped base address of memory block.<br />
*<br />
* Get base address of memory block.<br />
* @param[in] uid block id<br />
* @param[out] ppBase base address of memory block<br />
* @retval SCE_OK success<br />
* @retval <SCE_OK Error<br />
*/<br />
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);<br />
</source><br />
<br />
=== sceKernelAllocMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB9D5EBDE<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* Reserve a new memory block.<br />
*<br />
* The memory types that can be specified for type are as follows.<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW<br />
*<br />
* Allocate a memory block.<br />
*<br />
* @param[in] name Memory block name<br />
* @param[in] vsize Memory block virtual size<br />
* @param[in] flags Options<br />
* @retval id UID of memory block<br />
* @retval <SCE_OK Error code<br />
*/<br />
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);<br />
</source><br />
<br />
=== sceKernelAllocUnmapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEC636BCB<br />
|}<br />
<br />
<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source><br />
<br />
=== sceKernelOpenVMDomain ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x9CA3EB2B<br />
|}<br />
<br />
<source lang="c">int sceKernelOpenVMDomain();</source><br />
<br />
=== sceKernelSyncVMDomain ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x19D2A81A<br />
|}<br />
<br />
<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source><br />
<br />
=== sceKernelCloseVMDomain ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD6CA56CA<br />
|}<br />
<br />
<source lang="c">int sceKernelCloseVMDomain();</source><br />
<br />
=== sceKernelAllocMemBlockForVM ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE2D7E137<br />
|}<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source><br />
<br />
=== sceKernelCheckModelCapability ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.570.011 || 0x0144FBD9<br />
|}<br />
<br />
Only bits 7 and 10 are supported.<br />
<br />
Returns 0x80020005 if <code>bit</code> is not supported.<br />
<br />
On success, returns SCE_TRUE if the model has capability, else SCE_FALSE.<br />
<br />
<source lang="c">int sceKernelCheckModelCapability(int bit);</source><br />
<br />
=== sceKernelGetModelForCDialog ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA2CB322F<br />
|}<br />
<br />
<source lang="c">int sceKernelGetModelForCDialog();</source><br />
<br />
=== sceKernelGetModel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD0D4F729<br />
|}<br />
<br />
<source lang="c">int sceKernelGetModel();</source><br />
<br />
=== sceKernelIsPSVitaTV ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1453A5E5<br />
|}<br />
<br />
<source lang="c">int sceKernelIsPSVitaTV();</source><br />
<br />
== SceDipsw ==<br />
<br />
=== sceKernelCheckDipsw ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1C783FB2<br />
|}<br />
<br />
=== sceKernelClearDipsw ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x800EDCC1<br />
|}<br />
<br />
=== sceKernelSetDipsw ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x817053D4<br />
|}<br />
<br />
== SceDipswForDriver ==<br />
<br />
=== sceKernelCheckDipswForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xA98FC2FD<br />
|}<br />
<br />
<source lang="C">int sceKernelCheckDipswForDriver(int no);</source><br />
<br />
=== sceKernelClearDipswForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xF1F3E9FE<br />
|}<br />
<br />
<source lang="C">void sceKernelClearDipswForDriver(int no);</source><br />
<br />
=== sceKernelSetDipswForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x82E45FBF<br />
|}<br />
<br />
<source lang="C">void sceKernelSetDipswForDriver(int no);</source><br />
<br />
=== sceKernelGetDipswInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xB2AD48BE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
All it does is:<br />
<source lang="C">return *(int *)(dipsw_addr + 4 * info_id);</source><br />
<br />
info_id possible values:<br />
* 0: CP timestamp 1<br />
* 1: CP Version, CP Board ID<br />
* 2: CP timestamp 2<br />
* 3: ASLR Seed<br />
<br />
See [[KBL Param#DIP Switches]].<br />
<br />
<source lang="C">int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);</source><br />
<br />
== SceUartForKernel ==<br />
<br />
=== sceKernelUartChStartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xA9C74212<br />
|}<br />
<br />
Temp name was sceKernelUartInitForKernel, sceUartInitForKernel.<br />
<br />
It initializes the clock generator registers for the UART <code>channel</code>. See [[UART Registers]]. The default baud rate is 115200 for channels 0-5 and 250000 for channel 6.<br />
<br />
<source lang="C"><br />
// channel: 0-6<br />
int sceKernelUartChStartForKernel(SceUInt32 channel);<br />
</source><br />
<br />
=== sceKernelUartReadAvailableForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x38DB7629<br />
|}<br />
<br />
Temp name was sceUartReadAvailableForKernel.<br />
<br />
Returns the number of words available to read from the read FIFO.<br />
<br />
<source lang="c">int sceKernelUartReadAvailableForKernel(int channel);</source><br />
<br />
=== sceKernelUartReadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9BBF1255<br />
|}<br />
<br />
Temp name was sceUartReadForKernel.<br />
<br />
<source lang="c">int sceKernelUartReadForKernel(int channel);</source><br />
<br />
=== sceKernelUartWriteForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x41973874<br />
|}<br />
<br />
Temp name was sceUartWriteForKernel.<br />
<br />
<source lang="c">int sceKernelUartWriteForKernel(int channel, char c);</source><br />
<br />
=== sceKernelUartPutcharForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xAF243C6A<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="c">int sceKernelUartPutcharForKernel(char c);</source><br />
<br />
== SceCpu ==<br />
<br />
=== sceKernelCpuId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x2704CFEE<br />
|}<br />
<br />
Returns the CPU ID of the current core.<br />
<br />
<source lang="c">SceUInt sceKernelCpuId(void);</source><br />
<br />
== SceCpuForKernel ==<br />
<br />
=== sceKernelSendEventForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x45885327<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">void sceKernelSendEventForKernel(void);</source><br />
<br />
=== sceKernelWaitForEventForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xD2629465<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">void sceKernelWaitForEventForKernel(void);</source><br />
<br />
=== sceKernelPrintCpuModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xDC99515C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelTlsKernelSetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x7A180AA4<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// thread_index must be < 8<br />
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);<br />
</source><br />
<br />
=== sceKernelTlsKernelGetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x28E080BC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// thread_index must be < 8<br />
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);<br />
</source><br />
<br />
=== sceKernelRoundupDCacheLineForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xED512F50<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls the function previously registered by [[SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel]].<br />
<br />
<source lang="C">int sceKernelRoundupDCacheLineForKernel(int a1);</source><br />
<br />
=== sceKernelSetRoundupDCacheLineFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x66C3AA93<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Uses CTR and CTR-DMINLINE to determine which function to return.<br />
<br />
<source lang="C">(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);</source><br />
<br />
=== sceKernelReadUser8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x942B92C3<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);</source><br />
<br />
=== sceKernelReadUser16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || maybe present<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);</source><br />
<br />
=== sceKernelReadUser32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x6091086F<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);</source><br />
<br />
=== sceKernelWriteUser8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x13B7B151<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);</source><br />
<br />
=== sceKernelWriteUser16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || maybe present<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);</source><br />
<br />
=== sceKernelWriteUser32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x101894E0<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);</source><br />
<br />
=== sceKernelVMRead8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xA2F0FE9D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);</source><br />
<br />
=== sceKernelVMRead16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xF31D4D10<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);</source><br />
<br />
=== sceKernelVMRead32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x316574B1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);</source><br />
<br />
=== sceKernelVMWrite8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xA3C65664<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);</source><br />
<br />
=== sceKernelVMWrite16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xBF38A460<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);</source><br />
<br />
=== sceKernelVMWrite32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x04D129B2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);</source><br />
<br />
=== sceKernelMMUIsValidMapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4891F923<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);</source><br />
<br />
=== sceKernelMMUIsValidUnmapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x60EA8433<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);</source><br />
<br />
=== sceKernelMMUL1GetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x9D346F87<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Parses a L1PT for information about a specific entry. Pass the address of the L1PT in <code>l1pt</code>. Used by [[SceSysmem#sceKernelAddressSpaceGetMMUL1InfoForKernel|sceKernelAddressSpaceGetMMUL1InfoForKernel]].<br />
<br />
<source lang="C">SceInt32 sceKernelMMUL1GetInfoForKernel(void* l1pt, const void *addr, SceKernelMMUL1Info *pInfo);</source><br />
<br />
=== sceKernelMMUL2GetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x247629A7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);</source><br />
<br />
=== sceKernelMMUMapSectionsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x868B471A<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUMapSupersectionsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x0D9DA15F<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUMapSmallPagesForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xB953E022<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUMapSmallPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xCC7C16F8<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);</source><br />
<br />
=== sceKernelMMUMapLargePagesForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x78D32D38<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUUnmapSectionsWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xFC657FD1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUUnmapSupersectionsWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x0E4D29C6<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUUnmapSmallPagesWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x11EBA8CE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUUnmapLargePagesWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x44319918<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUL1VAtoPABySWForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x8E4ECF17<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelMMUSetL2PageTableForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xAECA0820<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);</source><br />
<br />
=== sceKernelMMUUnsetL2PageTableForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xCB519DF3<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);</source><br />
<br />
=== SceCpuForKernel_CA4124DE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xCA4124DE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Returns 1, 2 or 6 based on some page/section properties.<br />
<br />
<source lang="C">int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelMMUGetContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x211B89DA<br />
|-<br />
| 1.03-3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelCpuSaveContextForKernel.<br />
<br />
<source lang="C">int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);</source><br />
<br />
=== sceKernelMMUChangeContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x0A4F0FB9<br />
|-<br />
| 1.03-3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelCpuRestoreContextForKernel.<br />
<br />
<source lang="C">int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);</source><br />
<br />
=== sceKernelMMUVAtoPAWithModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x67343A07<br />
|}<br />
<br />
Temp name was sceKernelCpuGetPaddrWithMaskForKernel.<br />
<br />
mode (maskPAR) is usually 0x33, sometimes 2.<br />
<br />
<source lang="c">int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);</source><br />
<br />
=== sceKernelMMUCheckRangeWithModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xCCDA3B8C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Return 0 if all pages are valid, < 0 else.<br />
<br />
<source lang="C">int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);</source><br />
<br />
=== sceKernelMMUVAtoPAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2A46E800<br />
|}<br />
<br />
Temp name was sceKernelCpuGetPaddrForKernel.<br />
<br />
Uses mode (maskPAR) 0x33.<br />
<br />
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.<br />
<br />
Returns <0 on error, values >=0 indicate success.<br />
<br />
<source lang="c">int sceKernelMMUVAtoPAForKernel(void *pVA, void **pPA);</source><br />
<br />
=== sceKernelCpuGetCONTEXTIDRForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5B6B3274<br />
|}<br />
<br />
<source lang="C"><br />
return (SceUInt8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)<br />
</source><br />
<br />
<source lang="C">SceUInt8 sceKernelCpuGetCONTEXTIDRForKernel(void);</source><br />
<br />
=== sceKernelCpuUpdateSCTLRForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x04008CF7<br />
|}<br />
<br />
<source lang="C"><br />
int result;<br />
result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)<br />
__mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)<br />
return result;<br />
</source><br />
<br />
<source lang="C">void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)</source><br />
<br />
=== sceKernelCpuBranchPredictorInvalidateAllISForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1BB2BB8D<br />
|}<br />
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)</source><br />
<br />
=== sceKernelCpuBranchPredictorInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4C4C7D6B<br />
|}<br />
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all</source><br />
<br />
=== sceKernelDcacheCleanInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || 0x85A27F98<br />
|}<br />
<br />
Flushes PLE then cleans and invalidates L1 Dcache and L2 cache in this order.<br />
<br />
<source lang="C">void sceKernelDcacheCleanInvalidateAllForKernel(void);</source><br />
<br />
=== sceKernelL1DcacheInvalidateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x470EAE1E<br />
|}<br />
<br />
Temp name was sceKernelCpuDcacheInvalidateMVACForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheInvalidateForKernel(void* addr); // DCIMVAC, Data cache invalidate by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x583F30D1<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateMVACRangeForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheCleanInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6BA2E51C<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel, sceKernelDcacheWritebackInvalidateRangeForKernel.<br />
<br />
<source lang="C"><br />
// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)<br />
void sceKernelL1DcacheCleanInvalidateRangeForKernel(const void *addr, unsigned int size);<br />
</source><br />
<br />
=== sceKernelL1DcacheInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2F3BF020<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateSWForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheInvalidateAllForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)</source><br />
<br />
=== sceKernelL1DcacheCleanAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x73A30DB2<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheCleanSWForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanAllForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)</source><br />
<br />
=== sceKernelL1DcacheCleanInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x76DAB4D0<br />
|}<br />
<br />
Guessed name was sceKernelCpuDcacheCleanInvalidateSWForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanInvalidateAllForKernel(void);</source><br />
<br />
=== sceKernelL1DcacheCleanForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF7159B55<br />
|}<br />
<br />
Temp name was sceKernelCpuDcacheCleanMVACForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanForKernel(void* addr); // DCCMVAC, Data cache clean by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheCleanRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xC5C1EE4E<br />
|}<br />
<br />
Guessed name was sceKernelCpuDcacheCleanMVACRangeForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheCleanInvalidateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC8E8C9E9<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanInvalidateForKernel(void *start); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)</source><br />
<br />
=== sceKernelL1IcacheInvalidateEntireAllCoreForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x264DA250<br />
|-<br />
| 3.65 || 0x803C84BF<br />
|}<br />
<br />
Guessed name was sceKernelCpuIcacheInvalidateAllUISForKernel.<br />
<br />
Invalidates the L1 Icache for all cores.<br />
<br />
<source lang="C">void sceKernelL1IcacheInvalidateEntireAllCoreForKernel(void);</source><br />
<br />
=== sceKernelL1IcacheInvalidateEntireForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAEE0B489<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuIcacheInvalidateAllUForKernel.<br />
<br />
Invalidates the entire L1 Icache of this core.<br />
<br />
<source lang="C">void sceKernelL1IcacheInvalidateEntireForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)</source><br />
<br />
=== sceKernelL1IcacheInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF4C7F578<br />
|}<br />
<br />
Temp name was sceKernelCpuIcacheInvalidateRangeForKernel, sceKernelCpuIcacheInvalidateMVAURange.<br />
<br />
Invalidates a range in L1 Icache of this core.<br />
<br />
<source lang="C"><br />
// ICIMVAU, Instruction cache invalidate by MVA (PoU)<br />
void sceKernelL1IcacheInvalidateRangeForKernel(void *start, SceSize size);<br />
</source><br />
<br />
=== sceKernelIcacheInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x19F17BD0<br />
|-<br />
| 3.65-3.68 || 0x73E895EA<br />
|}<br />
<br />
Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.<br />
<br />
Cleans and invalidates range in L2 cache, then in L1 Icache of core.<br />
<br />
<source lang="c">int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);</source><br />
<br />
=== sceKernelPleFlushRequestForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD0D85FF8<br />
|}<br />
<br />
Temp name was sceKernelCpuPreloadEngineKillForKernel.<br />
<br />
*NSACR (Non-Secure Access Control Register)<br />
*Test bit NS access to the Preload Engine resources<br />
*[>] PLEFF (Preload Engine FIFO flush operation)<br />
*[>] PLEKC (Preload Engine kill channel operation)<br />
*[<] PLEASR (Preload Engine Activity Status Register)<br />
<br />
<source lang="c">void sceKernelPleFlushRequestForKernel(void);</source><br />
<br />
=== sceKernelDomainTextMemcpyForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8C683DEC<br />
|-<br />
| 3.63-3.65 || not present. Removed from library.<br />
|}<br />
<br />
Temp name was sceKernelCpuUnrestrictedMemcpyForKernel.<br />
<br />
Unrestricted memcpy by first setting the <code>DACR</code> register to <code>0xFFFF0000</code> then doing a memcpy.<br />
<br />
In FW 0.931, <code>DACR</code> is set to <code>0xFFFFFFFF</code> instead and interrupts are disabled for the operation.<br />
<br />
<source lang="c">int sceKernelDomainTextMemcpyForKernel(void *dest, const void *src, SceSize len);</source><br />
<br />
=== sceKernelMMUGetMemoryTypeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9B8173F4<br />
|}<br />
<br />
Return value can be:<br />
* 2<br />
* 8<br />
* 0x40<br />
* 0x80<br />
* 0xD0<br />
* 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)<br />
<br />
<source lang="c">int sceKernelMMUGetMemoryTypeForKernel(void *vaddr);</source><br />
<br />
=== sceKernelCorelockUnlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA5C9DBBA<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.<br />
<br />
<source lang="c"><br />
typedef struct SceKernelCorelockContext {<br />
int lock;<br />
int16_t core_count;<br />
int16_t last_wait_core;<br />
} SceKernelCorelockContext;<br />
<br />
void sceKernelCorelockUnlockForKernel(SceKernelCorelockContext *pCtx);<br />
</source><br />
<br />
=== sceKernelCorelockLockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9D72DD1B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">void sceKernelCorelockLockForKernel(SceKernelCorelockContext *pCtx, int core);</source><br />
<br />
=== sceKernelCorelockInitializeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x4CD4D921<br />
|-<br />
| 3.65 || 0xA65F6F14<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelCorelockInitializeForKernel(SceKernelCorelockContext *pCtx);</source><br />
<br />
=== SceCpuForKernel_43CC6E20 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x43CC6E20<br />
|}<br />
<br />
DACR off<br />
<br />
Does some memory copies between the args.<br />
<br />
<source lang="c">int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);</source><br />
<br />
=== sceKernelDomainTextBzeroIntForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x76EB0DD4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceCpuUnrestrictedBzeroIntForKernel.<br />
<br />
DACR off<br />
<br />
<source lang="c">int sceKernelDomainTextBzeroIntForKernel(int *addr);</source><br />
<br />
=== SceCpuForKernel_337473B5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x337473B5<br />
|}<br />
<br />
DACR off<br />
<br />
If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.<br />
<br />
<source lang="C">int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);</source><br />
<br />
=== sceKernelAtomicSubIfGreater64ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x37FBFD12<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);</source><br />
<br />
=== sceKernelAtomicLimit64ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6190A018<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicLimit64ForKernel(unsigned long long *result, int limit);</source><br />
<br />
=== sceKernelAtomicAdd32AndGet64InRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD8A7216C<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);</source><br />
<br />
=== sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD37AABE5<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);</source><br />
<br />
=== sceKernelAtomicGet32AndSet64ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x4553FBDE<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="c">int sceKernelAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);</source><br />
<br />
=== sceKernelAtomicGet32AndSet64_2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x7FB4E7AC<br />
|}<br />
<br />
Exact same code as SceCpuForKernel_4553FBDE.<br />
<br />
DACR is not disabled<br />
<br />
<source lang="c">int sceKernelAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);</source><br />
<br />
=== sceKernelAtomicDecIfLowPositive32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8510FA52<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="c">int sceKernelAtomicDecIfLowPositive32ForKernel(unsigned int *addr);</source><br />
<br />
=== sceKernelAtomicIncrementHighwaterCounterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.610.011 || 0x5F64E5ED<br />
|-<br />
| 3.630.011-3.740.011 || 0x9DA58A9E<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuAtomicHiLoAlgorithmForKernel.<br />
<br />
Atomically increments a highwater counter.<br />
<br />
Highwater counters are 32-bit values holding a <code>current</code> count in the low 16 bits, and a <code>highwater</code> count in the high 16 bits.<br />
<br />
This routine increments the <code>current</code> count, and the <code>highwater</code> count if the new <code>current</code> value is higher than <code>highwater</code>.<br />
<br />
DACR is not disabled.<br />
<br />
Returns the value of the counter after the increment.<br />
<br />
<source lang="C">SceUInt32 sceKernelAtomicIncrementHighwaterCounterForKernel(SceUInt32 *pCounter);</source><br />
<br />
=== sceKernelAtomicAddAndGetPositive32InRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.610.011 || 0x98E91C1C<br />
|-<br />
| 3.630.011-3.740.011 || 0x8F40D0FD<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
DACR is not disabled<br />
<br />
If val is negative, returns 2 and does not override val.<br />
<br />
<source lang="C">int sceKernelAtomicAddAndGetPositive32InRangeForKernel(int* val, int add_val, int limit);</source><br />
<br />
=== SceCpuForKernel_6C7E7B57 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6C7E7B57<br />
|}<br />
<br />
Set TTBR lower value (0x4A).<br />
<br />
<source lang="c">int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);</source><br />
<br />
=== SceCpuForKernel_AED8F8D7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xAED8F8D7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Initialize TTBR.<br />
<br />
<source lang="C">int SceCpuForKernel_AED8F8D7(const void *ttbr);</source><br />
<br />
=== sceKernelGetVmaccessRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.610.011 || 0x9A3281C0<br />
|-<br />
| 3.630.011-3.740.011 || 0xC32687D0<br />
|}<br />
<br />
Returns the start and end address of the Virtual Memory access range. Functions such as [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUserForDriver]] (i.e. kernel<->usermode transfer routines) are located in this range. All functions in the Virtual Memory access range run in ARM mode not in Thumb mode.<br />
<br />
See [[SceExcpmgr|the SceExcpmgr page]] for more information about how the values returned by this function are used.<br />
<br />
Note that the Virtual Memory access range excludes the endpoint. <code>*pRangeEnd</code> is not considered part of the range however <code>*pRangeStart</code> is.<br />
<br />
<source lang="C"><br />
// 0.931.010<br />
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);<br />
<br />
// 0.940-0.990<br />
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pOldModelRangeStart, SceUIntPtr *pOldModelRangeEnd, SceUIntPtr *pNewModelRangeStart, SceUIntPtr *pNewModelRangeEnd)<br />
<br />
// 3.600.011-3.740.011<br />
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);<br />
</source><br />
<br />
=== SceCpuForKernel_9CB82EB0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9CB82EB0<br />
|}<br />
<br />
<source lang="C"><br />
return;<br />
</source><br />
<br />
<source lang="c">int SceCpuForKernel_9CB82EB0(void);</source><br />
<br />
== SceCpuForDriver ==<br />
<br />
=== SceCpuForDriver_9A9D9C94 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-0.996.090 || 0x9A9D9C94<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
=== SceCpuForDriver_A2E3E4EB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-0.996.090 || 0xA2E3E4EB<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
=== sceKernelRoundupDCacheLine3ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0xF0849812<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelRoundupDCacheLine3ForDriver(int a1);</source><br />
<br />
=== sceKernelAbortForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0x6DCA6903<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">void sceKernelAbortForDriver(void);</source><br />
<br />
=== sceKernelCpuIdForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x5E4D5DE1<br />
|}<br />
<br />
Returns the CPU ID of the current core.<br />
<br />
<source lang="c">int sceKernelCpuIdForDriver(void);</source><br />
<br />
=== sceKernelAtomicAddAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1E850481<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicAddAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x59F74E94<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicAddAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x5F6A8743<br />
|}<br />
<br />
Adds <code>val</code> to <code>*addr</code> atomically, and returns the result.<br />
<br />
<source lang="c">unsigned int sceKernelAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicAddAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4E459A03<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicAddUnless8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5CC62CEC<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);</source><br />
<br />
=== sceKernelAtomicAddUnless16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0F84AFE9<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);</source><br />
<br />
=== sceKernelAtomicAddUnless32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1F157DC3<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);</source><br />
<br />
=== sceKernelAtomicAddUnless64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x06CCFA4B<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicAndAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x32B62B1A<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicAndAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB281D52A<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicAndAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDF899E4B<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicAndAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD18E7B54<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicClearAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8E538AB5<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicClearAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6B050D7C<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicClearAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78C1F148<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicClearAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2149CD4C<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicClearMask8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1B3336B0<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicClearMask16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1BE58599<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicClearMask32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4AE1BCC0<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicClearMask64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x55760309<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicCompareAndSet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3627F4E0<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);</source><br />
<br />
=== sceKernelAtomicCompareAndSet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6F63F56D<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);</source><br />
<br />
=== sceKernelAtomicCompareAndSet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCDA96E81<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);</source><br />
<br />
=== sceKernelAtomicCompareAndSet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4B527009<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicDecIfPositive8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x45153D4E<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicDecIfPositive8ForDriver(unsigned char *addr);</source><br />
<br />
=== sceKernelAtomicDecIfPositive16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9A693F5B<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicDecIfPositive16ForDriver(unsigned short *addr);</source><br />
<br />
=== sceKernelAtomicDecIfPositive32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2A71B03C<br />
|}<br />
<br />
This is a guessed name. Official name might be sceKernelAddressSpaceReleaseForDriver.<br />
<br />
<source lang="c">unsigned int sceKernelAtomicDecIfPositive32ForDriver(unsigned int* addr);</source><br />
<br />
=== sceKernelAtomicDecIfPositive64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x267D0B33<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicDecIfPositive64ForDriver(unsigned long long *addr);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndAdd8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFCDCD4DE<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndAdd16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x225DF91A<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndAdd32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x341B6E81<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndAdd64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x043FD446<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndAnd8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD8E675C0<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);</source><br />
<br />
=== sceKernelAtomicGetAndAnd16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4A820BC5<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndAnd32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x10EB35EB<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndAnd64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x18A17E07<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndClear8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x382D1466<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndClear16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8E9C086D<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndClear32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE36F3A46<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndClear64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x88BA6002<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndOr8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBDF6F8E4<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);</source><br />
<br />
=== sceKernelAtomicGetAndOr16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x004F09D1<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndOr32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2A40BB93<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndOr64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCB73D6D5<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndSet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x29599FC8<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndSet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x085532C8<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndSet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0EE04C03<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndSet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD2DEE625<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);</source><br />
<br />
=== sceKernelAtomicGetAndSub8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7B43D0D7<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndSub16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3EE9B5B8<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndSub32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF891CF2A<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndSub64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA7585370<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndXor8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBAF47F7B<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndXor16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x711801E6<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndXor32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x77E34309<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndXor64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE212ECAD<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicOrAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5D515F1B<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicOrAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xADD39B84<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicOrAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBC248C30<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicOrAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3E218AF7<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicSet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0836537E<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicSet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x532CA3E8<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicSet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3168BC57<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicSet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC381CE8C<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicSetIfGreaterGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC3868071<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicSetIfGreaterGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x875B094D<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicSetIfGreaterGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x26F71995<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicSubAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEB085370<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicSubAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x515682C9<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicSubAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA4884C4E<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicSubAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB5F8919C<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicXorAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x03887992<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);</source><br />
<br />
=== sceKernelAtomicXorAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x646003D6<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicXorAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4244BE65<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicXorAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x692C51B3<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelDcacheInvalidateRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x02796361<br />
|}<br />
<br />
Temp name was sceKernelDcacheInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheInvalidateRangeForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheInvalidateRangeForL2WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x614C6698<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelDcacheInvalidateRange_0x10ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheInvalidateRangeForL2WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheInvalidateRangeForL1WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8B4C26DF<br />
|}<br />
<br />
Temp name was sceKernelDcacheInvalidateRange_0x20ForDriver, sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheInvalidateRangeForL1WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanInvalidateRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x364E68A4<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver, sceKernelDcacheCleanInvalidateRange_0x10ForDriver.<br />
<br />
Also have another name "sceKernelDcacheCleanInvalidateRangeForL2WBWAForDriver" in 0.990.<br />
<br />
<source lang="c">int sceKernelDcacheCleanInvalidateRangeForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xE551F99B<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanInvalidateRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver(const void *start, SceSize);</source><br />
<br />
=== sceKernelDcacheCleanRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x103872A5<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanRangeForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanRangeForL2WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.350.011 || 0x2A5344B7<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanRange_0x10ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanRangeForL2WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanRangeForL1WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9CB9F0CE<br />
|}<br />
<br />
Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelDcacheCleanRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanRangeForL1WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== SceCpuForDriver_E813EBB2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE813EBB2<br />
|}<br />
<br />
Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.<br />
<br />
<source lang="C"><br />
#define SceL2CacheReg 0x1A002000<br />
__dsb();<br />
*(int *)(SceL2CacheReg + 0x730) = 0;<br />
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )<br />
;<br />
__dmb();<br />
</source><br />
<br />
<source lang="c">int SceCpuForDriver_E813EBB2(void);</source><br />
<br />
=== sceKernelIsUncacheAddressInTmpFsGameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x337CBDF3<br />
|}<br />
<br />
Temp name was sceKernelCpuIsVaddrMappedForDriver.<br />
<br />
<source lang="C"><br />
uint32_t vaddr_memory_type = sceKernelMMUGetMemoryTypeForKernel(vaddr);<br />
if (vaddr_memory_type != 8) {<br />
if (vaddr_memory_type <= 8) {<br />
if (vaddr_memory_type != 2)<br />
return 0;<br />
} else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)<br />
return 0;<br />
}<br />
return 1;<br />
</source><br />
<br />
<source lang="C">SceBool sceKernelIsUncacheAddressInTmpFsGameForDriver(void *address);</source><br />
<br />
=== sceKernelCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x821FC0EE<br />
|}<br />
<br />
Temp name was sceKernelCpuDisableInterruptsForDriver.<br />
<br />
Disables IRQ (FIQ are not disabled, but they're routed to Secure state anyways...) and returns previous interrupt bit status (either 0 or 0x80).<br />
<br />
<source lang="c"><br />
//Return CPSR.I and disable IRQ.<br />
SceKernelIntrStatus sceKernelCpuSuspendIntrForDriver(void);<br />
</source><br />
<br />
=== sceKernelCpuResumeIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xF5BAD43B<br />
|}<br />
<br />
Temp name was sceKernelCpuEnableInterruptsForDriver.<br />
<br />
Restore previous IRQ state. Pass the return value of the previous call to [[SceSysmem#sceKernelCpuSuspendIntrForDriver|sceKernelCpuSuspendIntrForDriver]].<br />
<br />
<source lang="c"><br />
//Enable IRQ if prev_state & 0x80.<br />
SceKernelIntrStatus sceKernelCpuResumeIntrForDriver(SceKernelIntrStatus prev_state);<br />
</source><br />
<br />
<hr><br />
'''Spinlock functions'''<br />
<br />
The following functions implement a simple mutal exclusion mechanism using atomic operation (LDREX/STREX). Spinlocks are owned by a single thread or CPU at a time. Unlike other lock/sync objects of the kernel, spinlocks can be used under any context. Use spinlocks if the data to protect may be accessed from an IRQ or exception handler.<br />
<br />
There are two version of the Spinlock functions: normal functions do not change the CPU state, while the <code>SuspendIntr</code> functions ensure the CPU cannot be interrupted while the lock is held.<br />
<br />
The same type of function must be used to lock and unlock a spinlock: for example, '''calling <code>sceKernelSpinlockLowLockCpuResumeIntr</code> followed by <code>sceKernelSpinlockLowUnlock</code> is an invalid usage of this API'''.<br />
<br />
Spinlocks can take two values: <code>0</code> means the spinlock is unlocked, and <code>1</code> means the spinlock is locked.<br />
<br />
<source lang="c"><br />
//Unofficial names<br />
typedef int SceKernelSpinlock;<br />
typedef int SceKernelRWSpinlock;<br />
typedef int SceKernelIntrStatus;<br />
<br />
//Sample usage:<br />
void function(Object* object) {<br />
sceKernelSpinlockLowLock(&object->lock);<br />
/* ... work on object ... */<br />
sceKernelSpinlockUnlock(&object->lock);<br />
}<br />
<br />
void trylock_function(Object* object) {<br />
int res = sceKernelSpinlockLowTrylock(&object->lock);<br />
if (res >= 0) {<br />
/* ... work on object ... */<br />
}<br />
}<br />
<br />
void uninterruptible_function(Object* object) {<br />
SceKernelIntrStatus status = sceKernelSpinlockLowLockCpuSuspendIntr(&object->lock);<br />
/* ... work on object ... */<br />
/* interrupts are disabled here */<br />
sceKernelSpinlockUnlock(&object->lock, status);<br />
}<br />
<br />
void uninterruptible_trylock_function(Object* object) {<br />
SceKernelIntrStatus status = sceKernelSpinlockLowTrylockCpuSuspendIntr(&object->lock);<br />
if (status >= 0) {<br />
/* ... work on object ... */<br />
/* interrupts are disabled here */<br />
sceKernelSpinlockLowUnlockCpuResumeIntr(&object->lock, status);<br />
}<br />
}<br />
</source><br />
<br />
=== sceKernelSpinlockLowLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xBF82DEB2<br />
|}<br />
<br />
Temp name was sceKernelCpuLockStoreLRForDriver.<br />
<br />
Acquires a spinlock.<br />
<br />
<source lang="c">void sceKernelSpinlockLowLockForDriver(SceKernelSpinlock *pLock);</source><br />
<br />
=== sceKernelSpinlockLowTrylockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x5AC9D394<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTryLockStoreLRForDriver, sceKernelSpinlockLowTryLockForDriver.<br />
<br />
Attempts to acquire a spinlock.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval SCE_OK if the spinlock is acquired<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
int sceKernelSpinlockLowTrylockForDriver(SceKernelSpinlock *pLock);<br />
</source><br />
<br />
=== sceKernelSpinlockLowUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xD6ED0C46<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockStoreLRForDriver.<br />
<br />
Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockForDriver|sceKernelSpinlockLowLockForDriver]] or [[SceSysmem#sceKernelSpinlockLowTrylockForDriver|sceKernelSpinlockLowTrylockForDriver]].<br />
<br />
<source lang="c">void sceKernelSpinlockLowUnlockForDriver(SceKernelSpinlock *pLock);</source><br />
<br />
=== sceKernelSpinlockLowLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD32ACE9E<br />
|}<br />
<br />
Temp name was sceKernelCpuSuspendIntrForDriver, sceKernelCpuLockSuspendIntrStoreLRForDriver.<br />
<br />
Acquires a spinlock and suspend interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @return An opaque value describing the interrupt state<br />
*/<br />
SceKernelIntrStatus sceKernelSpinlockLowLockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);<br />
</source><br />
<br />
=== sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x27C0B340<br />
|}<br />
<br />
Temp name was sceKernelCpuTryLockSuspendIntrStoreLRForDriver.<br />
<br />
Attempts to acquire a spinlock. If successfully acquired, suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
SceKernelIntrStatus sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);<br />
</source><br />
<br />
=== sceKernelSpinlockLowUnlockCpuResumeIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x7BB9D5DF<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockResumeIntrStoreLRForDriver, sceKernelCpuResumeIntrForDriver.<br />
<br />
Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockCpuSuspendIntrForDriver|sceKernelSpinlockLowLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver|sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver]] and resumes interrupts if necessary.<br />
<br />
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.<br />
<br />
<source lang="c">void sceKernelSpinlockLowUnlockCpuResumeIntrForDriver(SceKernelSpinlock *pLock, SceKernelIntrStatus prev_state);<br />
</source><br />
<br />
<hr><br />
'''RW Spinlock functions'''<br />
<br />
The following functions implement RW spinlocks. This variant of the spinlock allows multiple threads/CPUs to access data at the same time as long as only reads are performed. When acquired for writing, a single thread at a time can access the data and is thus free to modify it. Like regular spinlocks, the RW spinlocks can be used under any context. Use RW spinlocks if the data to protect may be accessed from an IRQ or exception handler.<br />
<br />
Like for regular spinlocks, all RWSpinlock functions are available in a normal and <code>SuspendIntr</code> version. Additionally, every function exists in <code>Read</code> and <code>Write</code> variants, depending on whether the caller wants to read or write to the object protected by the lock.<br />
<br />
Like for regular spinlocks, the same type of function must be used to lock and unlock a RW spinlock.<br />
'''Calling <code>sceKernelRWSpinlockLowReadLock</code> followed by <code>sceKernelRWSpinlockLowWriteUnlock</code> is an invalid usage of this API'''. '''Calling <code>sceKernelRWSpinlockLowReadLockCpuSuspendIntr</code> followed by <code>sceKernelRWSpinlockLowReadUnlockCpu</code> is also an invalid usage of this API'''.<br />
<br />
RW Spinlocks can take three kind of values: <code>0</code> means the spinlock is unlocked, <code>-0x80000000</code> means the spinlock is write-locked, and a positive value <code>x</code> means that <code>x</code> readers have read-locked the spinlock.<br />
<br />
=== sceKernelRWSpinlockLowReadLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCAC9AE80<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuSpinLockStoreLRForDriver.<br />
<br />
Acquires a RW spinlock for reading data. '''Modifying the data protected by the spinlock is not allowed'''.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowReadLockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowTryReadLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x093925BD<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTrySpinLockStoreLRForDriver.<br />
<br />
Attempts to acquire a RW spinlock for reading data.<br />
<br />
'''Even if the spinlock is acquired, modifying the data protected by the spinlock is not allowed'''.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval SCE_OK if the spinlock is acquired<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
int sceKernelRWSpinlockLowTryReadLockForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowReadUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF5FD5676<br />
|}<br />
<br />
Temp name was sceKernelCpuSpinUnlockStoreLRForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockForDriver|sceKernelRWSpinlockLowReadLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockForDriver|sceKernelRWSpinlockLowTryReadLockForDriver]].<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowReadUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowWriteLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3F42B434<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuLockStoreFlagForDriver.<br />
<br />
Acquires a RW spinlock for writing data.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowWriteLockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowTryWriteLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4F7790B4<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTryLockStoreFlagForDriver.<br />
<br />
Attempts to acquire a RW spinlock for writing data.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval SCE_OK if the spinlock is acquired<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
int sceKernelRWSpinlockLowTryWriteLockForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowWriteUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCB8ABDF0<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockStoreFlagForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockForDriver|sceKernelRWSpinlockLowWriteLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockForDriver|sceKernelRWSpinlockLowTryWriteLockForDriver]].<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowWriteUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowReadLockCpuSuspendIntr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xEC53D007<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuSpinLockSuspendIntrStoreLRForDriver, sceKernelCpuSpinLockIrqSaveForDriver.<br />
<br />
Acquires a RW spinlock for reading data and suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @return An opaque value describing the interrupt state<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF02467D1<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver.<br />
<br />
Attempts to acquire a RW spinlock for reading data. If successfully acquired, suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x740A0750<br />
|}<br />
<br />
Temp name was sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver, sceKernelCpuSpinLockIrqRestoreForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.<br />
<br />
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source><br />
<br />
=== sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4C38CE4D<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuLockSuspendIntrStoreFlagForDriver.<br />
<br />
Acquires a RW spinlock for writing data and suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @return An opaque value describing the interrupt state<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDE6482C6<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTryLockSuspendIntrStoreFlagForDriver.<br />
<br />
Attempts to acquire a RW spinlock for writing data. If successfully acquired, suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9EC91017<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockResumeIntrStoreFlagForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.<br />
<br />
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source><br />
<br />
== SceSysclibForKernel ==<br />
<br />
This library was removed on FW 1.80.<br />
<br />
=== __prnt ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-1.50 || 0xE38E7605<br />
|-<br />
| 1.80-3.60 || not present. Moved to ForDriver.<br />
|}<br />
<br />
This is a guessed name. from PSP.<br />
<br />
=== SceSysclibForKernel_F7E34376 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.50 || 0xF7E34376<br />
|}<br />
<br />
=== SceSysclibForKernel_FA746181 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0xFA746181<br />
|}<br />
<br />
return a1 * (- 0x6e19295b) - 0x6e19295b;<br />
<br />
In SceSysmem, it is used internally to modify a global variable, like a multiplication hash function would do.<br />
<br />
<source lang="C">int SceSysclibForKernel_FA746181(int a1);</source><br />
<br />
== SceSysclibForDriver ==<br />
<br />
The C standard library for use in kernel only. Usermode has access to [[SceLibKernel]], which confusingly is usermode only.<br />
<br />
Includes standard string functions (no insecure variants like <code>strcpy</code>).<br />
<br />
=== memset2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.69 || 0x502B000D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sortof_vsnprintf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x589BAF6B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
=== sortof_vsnprintf_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x658EA38E<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
=== SceSysclibForDriver_33388DBC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x33388DBC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calculates xor of a1 and a2, then does some calculation with a3.<br />
<br />
=== SceSysclibForDriver_72429909 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x72429909<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== SceSysclibForDriver_32373DF7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x32373DF7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Helper for strtol in base 10.<br />
<br />
<source lang="C">int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);</source><br />
<br />
=== __aeabi_idiv ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2518CD9E<br />
|}<br />
<br />
=== __aeabi_idivmod ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAC86B4BA<br />
|}<br />
<br />
=== __aeabi_lcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x709077A1<br />
|}<br />
<br />
=== __aeabi_lmul ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFEE5E751<br />
|}<br />
<br />
=== __aeabi_uidiv ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA9FF1205<br />
|}<br />
<br />
=== __aeabi_uidivmod ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA46CB7DE<br />
|}<br />
<br />
=== __aeabi_ldivmod ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7554AB04<br />
|}<br />
<br />
=== __aeabi_uldivmod ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9D148CDE<br />
|}<br />
<br />
Returns the 64-bit quotient of the division of dividend by divisor.<br />
<br />
Used for example to convert [[SceRtc]] ticks to a simpler format (divide by time unit in ms) or to compute the number of storage device blocks in [[SceSdstor]] (divide by block size).<br />
<br />
<source lang="C"><br />
// ex: __aeabi_uldivmod(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000, 0);<br />
SceUInt64 __aeabi_uldivmod(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);<br />
</source><br />
<br />
=== __aeabi_ulcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFE900DE8<br />
|}<br />
<br />
=== __aeabi_llsr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xE46C47E6<br />
|}<br />
<br />
=== __aeabi_llsl ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x72D31F9D<br />
|}<br />
<br />
=== __aeabi_lasr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1D89F6C0<br />
|}<br />
<br />
Temp name was rshift.<br />
<br />
=== __memcpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8A0B0815<br />
|}<br />
<br />
=== __memmove_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x35DBB110<br />
|}<br />
<br />
=== __memset_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1A30BB28<br />
|}<br />
<br />
=== __stack_chk_fail ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0xB997493D<br />
|}<br />
<br />
=== __stack_chk_guard ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x99EEBD1F<br />
|}<br />
<br />
This is a variable.<br />
<br />
=== __strlcat_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x224BE33F<br />
|}<br />
<br />
=== __strlcpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCF86EA38<br />
|}<br />
<br />
=== __strncat_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x33EE298B<br />
|}<br />
<br />
=== __strncpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x96268C53<br />
|}<br />
<br />
=== __snprintf_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7DBE7007<br />
|}<br />
<br />
=== __vsnprintf_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xCBF64DF6<br />
|}<br />
<br />
=== __prnt ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present. Present in ForKernel.<br />
|-<br />
| 3.60 || 0xE38E7605<br />
|}<br />
<br />
This is a guessed name. from PSP.<br />
<br />
<source lang="C">void __prnt(void (* cb)(void *argp, int ch), void *argp, const char *fmt, va_list list);</source><br />
<br />
Supported formats:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Format !! Description<br />
|-<br />
| \x20 || maybe space fill<br />
|-<br />
| # || unknown<br />
|-<br />
| * || unknown<br />
|-<br />
| - || Left align<br />
|-<br />
| + || unknown<br />
|-<br />
| . || unknown<br />
|-<br />
| 0 || Padding number and Enter zero padding<br />
|-<br />
| 1~9 || Padding number<br />
|-<br />
| D || unknown (maybe with long?)<br />
|-<br />
| L || unknown (maybe with long?)<br />
|-<br />
| O || unknown (maybe with long?)<br />
|-<br />
| U || unknown (maybe with long?)<br />
|-<br />
| X || print hex number as uppercase<br />
|-<br />
| c || print char<br />
|-<br />
| d || print decimal number<br />
|-<br />
| h || unknown<br />
|-<br />
| l || long<br />
|-<br />
| o || unknown<br />
|-<br />
| p || print pointer as lowercase<br />
|-<br />
| s || print strings<br />
|-<br />
| u || unsigned number<br />
|-<br />
| x || print hex number as lowercase<br />
|}<br />
<br />
=== vsnprintf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x3DDBE2E1<br />
|}<br />
<br />
<source lang="C">int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);</source><br />
<br />
=== get_ctype_table ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x0614B013<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== look_ctype_table ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCDF7F155<br />
|}<br />
<br />
<source lang="C"><br />
typedef enum SceCTypeFlag {<br />
SCE_CTYPE_NONE = 0,<br />
SCE_CTYPE_UPPERCASE = 1,<br />
SCE_CTYPE_LOWERCASE = 2,<br />
SCE_CTYPE_NUMBER = 4,<br />
SCE_CTYPE_CONTROL = 8,<br />
SCE_CTYPE_SYMBOL = 0x10,<br />
SCE_CTYPE_INVISIBLE = 0x20,<br />
SCE_CTYPE_HEX_CASE = 0x40<br />
} SceCTypeFlag;<br />
<br />
char look_ctype_table(char ch);<br />
</source><br />
<br />
=== memchr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x60DAEA30<br />
|}<br />
<br />
=== timingsafe_memcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB5A4D745<br />
|}<br />
<br />
timing constant memcmp<br />
<br />
=== memcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF939E83D<br />
|}<br />
<br />
=== memcpy ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x40C88316<br />
|}<br />
<br />
=== memmove ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0x6CC9C1A1<br />
|}<br />
<br />
On FW 1.69, this seems to be implemented incorrectly.<br />
<br />
=== memset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x0AB9BF5C<br />
|}<br />
<br />
=== snprintf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xAE7A8981<br />
|}<br />
<br />
=== strchr ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0x38463759<br />
|}<br />
<br />
=== strcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x0B33BC43<br />
|}<br />
<br />
=== strlcat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x12504E09<br />
|}<br />
<br />
=== strlcpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7FB4EBEC<br />
|}<br />
<br />
=== strlen ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xCFC6A9AC<br />
|}<br />
<br />
=== strncat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xA1D1C32C<br />
|}<br />
<br />
<source lang="C">char *strncat(char *s1, const char *s2, size_t n);</source><br />
<br />
=== strncmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x12CEE649<br />
|}<br />
<br />
<source lang="C">int strncmp(const char *s0, const char *s1, int n);</source><br />
<br />
=== strncpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6D286146<br />
|}<br />
<br />
=== strncpy_s ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.60 || 0xFE39AEAC<br />
|}<br />
<br />
=== strnlen ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xCD4BD884<br />
|}<br />
<br />
=== strrchr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x7F0E0835<br />
|}<br />
<br />
=== strstr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1304A69D<br />
|}<br />
<br />
=== strtol ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xAB77C5AA<br />
|}<br />
<br />
=== strtoll ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x87AAAFA2<br />
|}<br />
<br />
=== strtoul ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4E5042DA<br />
|}<br />
<br />
=== tolower ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0021DAF9<br />
|}<br />
<br />
<source lang="C">char tolower(char ch);</source><br />
<br />
=== toupper ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA685DCB1<br />
|}<br />
<br />
<source lang="C">char toupper(char ch);</source><br />
<br />
=== __strcpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x545DA5FD<br />
|}<br />
<br />
Copy a string, with buffer overflow checking.<br />
<br />
<source lang="C">char * __strcpy_chk(char * dest, const char * src, size_t destlen);</source><br />
<br />
=== __strcat_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xDE4666F0<br />
|}<br />
<br />
Concatenate two strings, with buffer overflow checking.<br />
<br />
<source lang="C">char *__strcat_chk(char *dest, const char *src, SceSize destlen);</source><br />
<br />
== SceSysrootForKernel ==<br />
<br />
=== sceKernelSysrootSWBkptGetOriginalOpcodeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9CFF80F9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[#sceKernelSysrootSWBkptGetOriginalOpcodeForDriver]].<br />
<br />
=== sceKernelSysrootSetGetPrxDebugFlagFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-2.060.011 || 0xE635DFCC<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the function called by [[#sceKernelSysrootGetPrxDebugFlagForKernel]] which is also the fallback function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].<br />
<br />
This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_26458702]].<br />
<br />
<source lang="C">int sceKernelSysrootSetGetPrxDebugFlagFuncForKernel(void *func);</source>3999F917<br />
<br />
=== sceKernelSysrootGetPrxDebugFlagForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x73522F65<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetGetPrxDebugFlagFuncForKernel]] on System Software version < 2.100.081 and by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]] on System Software version >= 2.100.081.<br />
<br />
<source lang="C">int sceKernelSysrootGetPrxDebugFlagForKernel(SceUID pid, SceUInt32 *pFlag);</source><br />
<br />
=== SceSysrootForKernel_5E7ECC37 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-2.060.011 || 0x5E7ECC37<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_5C86E49B]].<br />
<br />
This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].<br />
<br />
<source lang="C">int SceSysrootForKernel_5E7ECC37(void *func);</source><br />
<br />
=== SceSysrootForKernel_5C86E49B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x5C86E49B<br />
|}<br />
<br />
Calls the handler stored in SceSysrootDbgpHandler at offset 0x10 and registered by [[#SceSysrootForKernel_5E7ECC37]] or [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].<br />
<br />
=== sceKernelSysrootSetProcessDebugSuspendFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.010.031 || 0x4337841F<br />
|-<br />
| 3.10-3.740.011 || 0x4337841F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the function called by [[#sceKernelSysrootProcessDebugSuspendForKernel]].<br />
<br />
This function has been removed since System Software version 3.10 because its feature is already provided by [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
<source lang="C">int sceKernelSysrootSetProcessDebugSuspendFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootProcessDebugSuspendForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x1247A825<br />
|}<br />
<br />
This is a guessed name. Official name might be as well sceKernelProcessDebugSuspendForKernel.<br />
<br />
Calls the function registered by either [[#sceKernelSysrootSetProcessDebugSuspendFuncForKernel]] or [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
<source lang="C">int sceKernelSysrootProcessDebugSuspendForKernel(SceUID pid, int status);</source><br />
<br />
=== SceSysrootForKernel_150DBA2B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.360.011 || 0x150DBA2B<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
=== SceSysrootForKernel_273EAE53 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.360.011 || 0x273EAE53<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
=== sceKernelSysrootIsKernelProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.360.011 || 0xE0FC42C3<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceBool sceKernelSysrootIsKernelProcessForKernel(void);</source><br />
<br />
=== sceKernelSysrootRegisterKPLSForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.70 || 0x23BEAF6B<br />
|-<br />
| 1.800.071-3.740.011 || not present<br />
|}<br />
<br />
=== SceSysrootForKernel_571E5B79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x571E5B79<br />
|}<br />
<br />
See [[#SceSysrootForDriver_571E5B79]].<br />
<br />
=== sceKernelSysrootRegisterDbgpHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x3999F917<br />
|}<br />
<br />
Registers a debug process handler.<br />
<br />
<source lang="C">int sceKernelSysrootRegisterDbgpHandlerForKernel(SceSysrootDbgpHandler *handler);</source><br />
<br />
=== sceKernelSysrootSetGetIntrMMUContextFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x611F17A4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the function called by [[#sceKernelSysrootGetIntrMMUContextForKernel]].<br />
<br />
<source lang="C">int sceKernelSysrootSetGetIntrMMUContextFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootGetIntrMMUContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x118657C6<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetGetIntrMMUContextFuncForKernel]].<br />
<br />
Return value is officially named <code>pIntrMMUContext</code>. "Intr" likely stands for "interrupt" or for "internal".<br />
<br />
Used in [[SceExcpmgr]].<br />
<br />
<source lang="C">SceKernelMMUContext* sceKernelSysrootGetIntrMMUContextForKernel(void);</source><br />
<br />
=== SceSysrootForKernel_081F2C20 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 1.60-1.69 || 0x081F2C20<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Registers sceKernelGetProcessId_2 from [[SceKernelThreadMgr]].<br />
<br />
<source lang="C">int SceSysrootForKernel_081F2C20(void *func);</source><br />
<br />
=== SceSysrootForKernel_C5EAF5F7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC5EAF5F7<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_47724459]].<br />
<br />
<source lang="C">int SceSysrootForKernel_C5EAF5F7(void *func);</source><br />
<br />
=== SceSysrootForKernel_47724459 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x47724459<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForKernel_C5EAF5F7]].<br />
<br />
=== SceSysrootForKernel_8747D415 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8747D415<br />
|}<br />
<br />
Registers the function used by [[#SceSysrootForKernel_B27B7530]].<br />
<br />
<source lang="C">int SceSysrootForKernel_8747D415(void *func);</source><br />
<br />
=== SceSysrootForKernel_B27B7530 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB27B7530<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForKernel_8747D415]].<br />
<br />
Used by [[SceKernelBusError]].<br />
<br />
=== SceSysrootForKernel_82FC6405 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x82FC6405<br />
|}<br />
<br />
Registers the function used by [[#SceSysrootForKernel_CD4B84F7]].<br />
<br />
Used by [[SceKernelBusError]].<br />
<br />
<source lang="C">int SceSysrootForKernel_82FC6405(void *func);</source><br />
<br />
=== SceSysrootForKernel_CD4B84F7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCD4B84F7<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForKernel_82FC6405]].<br />
<br />
Used by [[SceKernelBusError]].<br />
<br />
=== SceSysrootForKernel_733C243E ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x733C243E<br />
|}<br />
<br />
Registers many Sysroot [[SceProcessmgr]] callbacks.<br />
<br />
<source lang="C">int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);</source><br />
<br />
=== SceSysrootForKernel_7334F1E8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7334F1E8<br />
|}<br />
<br />
Calls [[SceProcessmgr#SceProcessmgrForKernel_C77C2085]] function registered by [[#SceSysrootForKernel_733C243E]].<br />
<br />
<source lang="C">int SceSysrootForKernel_7334F1E8(SceUID pid);</source><br />
<br />
=== SceSysrootForKernel_D29BCA77 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xD29BCA77<br />
|}<br />
<br />
Registers many Sysroot [[SceProcessmgr]] callbacks.<br />
<br />
<source lang="C">int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);</source><br />
<br />
=== SceSysrootForKernel_DD7821AA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xDD7821AA<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_340575CB]].<br />
<br />
<source lang="C">int SceSysrootForKernel_DD7821AA(void *func);</source><br />
<br />
=== SceSysrootForKernel_340575CB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x340575CB<br />
|}<br />
<br />
Return some PID.<br />
<br />
<source lang="C">SceUID SceSysrootForKernel_340575CB(void);</source><br />
<br />
=== sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xBE1EF51C<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootCheckRemapCodeForUserForKernel]].<br />
<br />
<source lang="C">int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootCheckRemapCodeForUserForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF8769E86<br />
|}<br />
<br />
=== sceKernelSysrootAllocCurrentProcessHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2F75C1DC<br />
|}<br />
<br />
<source lang="C">void *sceKernelSysrootAllocCurrentProcessHeapForKernel(SceSize size);</source><br />
<br />
=== sceKernelSysrootCorelockUnlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xAE55B7CC<br />
|}<br />
<br />
Calls [[#SceCpuForKernel_A5C9DBBA]].<br />
<br />
<source lang="C">void sceKernelSysrootCorelockUnlockForKernel(void);</source><br />
<br />
=== SceSysrootForKernel_21F5790B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x21F5790B<br />
|}<br />
<br />
Registers a function related to kernel panic.<br />
<br />
<source lang="C">int SceSysrootForKernel_21F5790B(void *func);</source><br />
<br />
=== SceSysrootForKernel_0DF574A9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x0DF574A9<br />
|}<br />
<br />
Calls the function related to kernel panic registered by [[#SceSysrootForKernel_21F5790B]].<br />
<br />
<source lang="C">int SceSysrootForKernel_0DF574A9(void);</source><br />
<br />
=== SceSysrootForKernel_2D6B2A79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2D6B2A79<br />
|}<br />
<br />
Registers a function related to kernel panic, called by [[#SceSysrootForKernel_CC7A0E63]].<br />
<br />
=== SceSysrootForKernel_CC7A0E63 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCC7A0E63<br />
|}<br />
<br />
Calls a function related to kernel panic, registered by [[#SceSysrootForKernel_2D6B2A79]].<br />
<br />
<source lang="C"><br />
// type: 1: kernel_assertion_or_panic, 3: kernel_exception<br />
// size: must be <= 0x1000<br />
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2<br />
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);<br />
</source><br />
<br />
=== SceSysrootForKernel_1D84C4D4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x1D84C4D4<br />
|}<br />
<br />
Get module name, fingerprint and base from address.<br />
<br />
<source lang="C">int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);</source><br />
<br />
=== SceSysrootForKernel_5B5EBFB1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x5B5EBFB1<br />
|}<br />
<br />
Registers pointer to SceLT5 used by [[#SceSysrootForKernel_E20F6FC8]].<br />
<br />
<source lang="C">int SceSysrootForKernel_5B5EBFB1(uint a1);</source><br />
<br />
=== SceSysrootForKernel_41636522 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x41636522<br />
|}<br />
<br />
Returns current SceLT5 value pointed by pointer registered using [[#SceSysrootForKernel_E20F6FC8]]. Long/low (64bit) time in microseconds. It is about "awake" uptime from system boot.<br />
<br />
<source lang="C">uint64_t SceSysrootForKernel_41636522(void);</source><br />
<br />
=== SceSysrootForKernel_E20F6FC8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xE20F6FC8<br />
|}<br />
<br />
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".<br />
<br />
Used by SceDebug Kernel Exceptions handlers.<br />
<br />
<source lang="C">uint64_t SceSysrootForKernel_E20F6FC8(void);</source><br />
<br />
=== SceSysrootForKernel_1D8DB3A5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x1D8DB3A5<br />
|}<br />
<br />
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".<br />
<br />
Returns 0 on success, 0x80020006 if pTime is a NULL pointer.<br />
<br />
<source lang="C">int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);</source><br />
<br />
=== sceKernelSysrootCorelockLockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8E4B61F1<br />
|}<br />
<br />
Calls [[#SceCpuForKernel_9D72DD1B]].<br />
<br />
<source lang="C">int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);</source><br />
<br />
=== SceSysrootForKernel_06182D59 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x06182D59<br />
|}<br />
<br />
Reimplementation:<br />
<source lang="C"><br />
int SceSysrootForKernel_06182D59(int idx) {<br />
return *(uint32_t *)(pSysroot + 0x20) + (idx << 0x5);<br />
}<br />
</source><br />
<br />
<source lang="C">int SceSysrootForKernel_06182D59(int idx);</source><br />
<br />
=== SceSysrootForKernel_7385CADE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x7385CADE<br />
|}<br />
<br />
Get current syscall's PID.<br />
<br />
<source lang="C"><br />
// Returns KERNEL_PID if the function has not been set<br />
SceUID SceSysrootForKernel_7385CADE(void);<br />
</source><br />
<br />
=== SceSysrootForKernel_D441DC34 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0xD441DC34<br />
|}<br />
<br />
Calls a callback registered by [[#SceSysrootForKernel_26458702]], related to syscall frame printing on kernel panic.<br />
<br />
=== sceKernelSysrootGetSysrootClassItemsizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xEEB867C0<br />
|}<br />
<br />
This is a guessed name. Derived from get_SceKernelSysrootClass_itemsize.<br />
<br />
On System Software version 0.990, returns hardcoded value 0x470.<br />
<br />
On System Software version 3.200.010, returns hardcoded value 0x440.<br />
<br />
On System Software version 3.600.011, returns hardcoded value 0x41C.<br />
<br />
<source lang="C">SceSize sceKernelSysrootGetSysrootClassItemsizeForKernel(void);</source><br />
<br />
=== sceKernelGetSysrootClassObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x085C2BCB<br />
|}<br />
<br />
This is a guessed name. Derived from get_SceKernelSysrootClass_object.<br />
<br />
<source lang="C">SceKernelObject *sceKernelGetSysrootClassObjectForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetLibraryDBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xCD70C9D7<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(0x10005)]] in 3.60<br />
<br />
<source lang="C"><br />
// size is 0x34-bytes on FW 2.00<br />
void *sceKernelSysrootGetLibraryDBForKernel(void *pSysroot);<br />
</source><br />
<br />
=== sceKernelSysrootSetLibraryDBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xCB58A0F4<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Maybe sets a pointer to the library stub structure. See [[Modules]].<br />
<br />
<source lang="C"><br />
// size is 0x34-bytes on FW 2.00<br />
int sceKernelSysrootSetLibraryDBForKernel(void *pSysroot, void *pLibDb);<br />
</source><br />
<br />
=== sceKernelSysrootGetProcessLibraryDBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xF1037820<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(pid)]] in System Software version 3.600.011.<br />
<br />
The return value of this function is an integer on error, but returns a pointer to LibraryDB on success.<br />
<br />
<source lang="C"><br />
// size is 0x34-bytes on FW 2.00<br />
int sceKernelSysrootGetProcessLibraryDBForKernel(SceUID pid);<br />
</source><br />
<br />
=== sceKernelSysrootAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || 0xB0149E69<br />
|-<br />
| 3.500.011-3.740.011 || Not present<br />
|}<br />
<br />
Allocates memory from the "Sysroot heap". The Sysroot heap is located after <code>SceSysroot</code> structure and consumes the rest of the page. Allocations from this "heap" are permanent and cannot be returned - there is no <code>sceKernelSysrootFreeForKernel</code>.<br />
<br />
Usage of this function is not recommended because of the lack of a "free" function. Use [[SceSysmem#sceKernelAllocForKernel]] instead.<br />
<br />
<source lang="C">void *sceKernelSysrootAllocForKernel(SceSize size);</source><br />
<br />
=== sceKernelSysrootSetStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xA84676E3<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
! status !! description<br />
|-<br />
| 3 || Global malloc heap initialization completed.<br />
|-<br />
| 4 || Start initialization for load the module<br />
|-<br />
| 0x10 || Initialization to load the module is complete<br />
|-<br />
| 0x100 || First process create<br />
|-<br />
| 0x1000 || Kernel boot completed.<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetStatusForKernel(SceUInt32 status);</source><br />
<br />
=== sceKernelSysrootGetProcessCBExitDeleteThreadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xBBFD2E3C<br />
|}<br />
<br />
=== sceKernelSysrootGetCurrentProcessCBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9991B1AF<br />
|}<br />
<br />
=== sceKernelSysrootGetCurrentThreadAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x73601453<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);</source><br />
<br />
=== sceKernelSysrootGetCurrentTimeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x4FCFA359<br />
|}<br />
<br />
<source lang="C">SceRtcTick *sceKernelSysrootGetCurrentTimeForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSystemTimeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.692.000 || 0xE0D41319<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)</source><br />
<br />
=== sceKernelSysrootGetSystemTimeLowForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.692.000 || 0x2464329D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetSystemTimeLowForKernel(void);</source><br />
<br />
=== sceKernelSysrootAssertSysrootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.692.000 || 0x1B7F150F<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).<br />
<br />
<source lang="C">int sceKernelSysrootAssertSysrootForKernel(void *sysroot);</source><br />
<br />
=== sceKernelSysrootSetVbaseResetVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x0F2F2B4E<br />
|}<br />
<br />
=== sceKernelSysrootThreadMgrStartAfterProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x0EB5D7CD<br />
|}<br />
<br />
=== sceKernelSysrootGetCurrentProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.996.090 || 0x5B7570C5<br />
|}<br />
<br />
Return the current process id.<br />
<br />
<source lang="C">SceUID sceKernelSysrootGetCurrentProcessForKernel(void);</source><br />
<br />
=== sceKernelSysrootTrapThreadAfterSyscallForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x9139E22B<br />
|}<br />
<br />
Calls a callback registered by [[#SceSysrootForKernel_26458702]].<br />
<br />
Prints syscall_critical_usage.<br />
<br />
=== sceKernelSysrootReturnFromExcpToThreadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xDADFF828<br />
|}<br />
<br />
Used in [[SceExcpmgr]].<br />
<br />
<source lang="C">int sceKernelSysrootReturnFromExcpToThreadForKernel(void);</source><br />
<br />
=== sceKernelSysrootBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xCC893F37<br />
|}<br />
<br />
See also [[SceKernelModulemgr#SceBacktraceForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);</source><br />
<br />
=== sceKernelSysrootPrintBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x491CE8DF<br />
|}<br />
<br />
See also [[SceKernelModulemgr#SceBacktraceForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);</source><br />
<br />
=== sceKernelSysrootRegisterBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.010.031 || 0x1C307A31<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="c">int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());</source><br />
<br />
=== sceKernelSysrootGetSharedMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xC8C8C321<br />
|}<br />
<br />
=== sceKernelSysrootSetSharedMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xFBB91741<br />
|}<br />
<br />
=== sceKernelSysrootGetUIDEntryHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x88DE85EF<br />
|}<br />
<br />
Temp name was sceKernelSysrootGetPUIDEntryHeapForKernel.<br />
<br />
Gets the UID Entry Heap of the process.<br />
<br />
Kernel process's UID entry heap is the GUIDEntryHeap. All other process' UID entry heaps are PUID heaps.<br />
<br />
<source lang="C">int sceKernelSysrootGetUIDEntryHeapForKernel(SceUID pid, void **entryHeap);</source><br />
<br />
=== sceKernelSysrootGetStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x5C426B19<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetStatusForKernel(void);</source><br />
<br />
=== sceKernelSysrootIofilemgrStartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF6A6D205<br />
|}<br />
<br />
=== SceSysrootForKernel_F9FB9A2A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xF9FB9A2A<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].<br />
<br />
This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
<source lang="C">int SceSysrootForKernel_F9FB9A2A(void *func);</source><br />
<br />
=== sceKernelSysrootGetCurrentAddressSpaceCBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0x63EBB05B<br />
|}<br />
<br />
Gets the current Address Space's control block via TPIDRPRW.<br />
<br />
This function calls a callback registered by [[#SceSysrootForKernel_F9FB9A2A]] on System Software version < 2.10 and by [[#SceSysrootForKernel_D29BCA77]] on System Software version >= 2.10, if it was registered, else a fallback callback. The fallback callback is registered by [[#SceSysrootForKernel_E635DFCC]] on System Software version < 2.10 and by [[#SceSysrootForKernel_26458702]] on System Software version >= 2.10.<br />
<br />
<source lang="C">SceUIDAddressSpaceObject *sceKernelSysrootGetCurrentAddressSpaceCBForKernel(void);</source><br />
<br />
=== SceSysrootForKernel_BF82931F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0xBF82931F<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_2BE874EF]].<br />
<br />
No usage seen on CEX OS. Maybe used in DEX/TOOL OS.<br />
<br />
<source lang="C">int SceSysrootForKernel_BF82931F(int maybe_app_id, void *pOut);</source><br />
<br />
=== SceSysrootForKernel_6D111FA7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x6D111FA7<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_3B19B06B]].<br />
<br />
Used only in [[SceCoredump]].<br />
<br />
<source lang="C">int SceSysrootForKernel_6D111FA7(int maybe_app_id, void *pOut);</source><br />
<br />
=== SceSysrootForKernel_2A03DFA1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2A03DFA1<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_70AD47A9]].<br />
<br />
Used only in [[SceCoredump]].<br />
<br />
<source lang="C"><br />
// pOut: A buffer of at least 0xF8 bytes<br />
int SceSysrootForKernel_2A03DFA1(void *pOut);<br />
</source><br />
<br />
=== sceKernelSysrootAppMgrSpawnProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3ACACD22<br />
|}<br />
<br />
=== sceKernelSysrootGetCachedSecureModuleInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF10AB792<br />
|}<br />
<br />
Temp name was sceKernelSysrootGetSmSelfInfoForKernel.<br />
<br />
{| class="wikitable"<br />
! Index !! SM SELF location<br />
|-<br />
| 0 || os0:sm/gcauthmgr_sm.self<br />
|-<br />
| 1 || os0:sm/rmauth_sm.self<br />
|-<br />
| 2 || os0:sm/encdec_w_portability_sm.self<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetCachedSecureModuleForKernel(SceCachedSecureModule id, SceCachedSecureModuleInfo *pInfo);</source><br />
<br />
=== sceKernelSysrootGetProcessSelfAuthInfoForKernel ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x4F0A4066<br />
|}<br />
<br />
Temp name was sceSysrootGetSelfAuthInfoForKernel.<br />
<br />
<source lang="C">int sceKernelSysrootGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *pSelfAuthInfo);</source><br />
<br />
=== sceKernelSysrootGetProcessTitleIdForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEC3124A3<br />
|}<br />
<br />
Temp name was sceSysrootGetProcessTitleIdForPidForKernel.<br />
<br />
<source lang="C">int sceKernelSysrootGetProcessTitleIdForKernel(SceUID pid, char *title_id, SceSize len);</source><br />
<br />
=== sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xB39CD708<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootGetFunctionNameByNIDForKernel]].<br />
<br />
<source lang="c">int sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootGetFunctionNameByNIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x0B79E220<br />
|}<br />
<br />
Mirror of [[SceSysLibTrace#sceNidsymtblGetFunctionNameByNIDForDriver]].<br />
<br />
<source lang="c">int sceKernelSysrootGetFunctionNameByNIDForKernel(SceNID funcnid, const char **name);</source><br />
<br />
=== SceSysrootForKernel_26458702 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x26458702<br />
|}<br />
<br />
Registers some callbacks for example the fallback callback called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].<br />
<br />
=== SceSysrootForKernel_B171CC2D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xB171CC2D<br />
|}<br />
<br />
Register some ModuleMgr handlers.<br />
<br />
Used by [[SceKernelModulemgr]].<br />
<br />
<source lang="C">int SceSysrootForKernel_B171CC2D(SceSysrootModulemgrHandlers *pHandlers);</source><br />
<br />
=== sceKernelSysrootGetProcessSyscallInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFF9F80FF<br />
|}<br />
<br />
<source lang="c">int sceKernelSysrootGetProcessSyscallInfoForKernel(SceUID pid, const void *PC, SceSyscallInfo *pInfo);</source><br />
<br />
=== sceKernelSysrootGetVbaseResetVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCC85905B<br />
|}<br />
<br />
Returns the exception vectors base address. The address of the exception vectors for the CPU <code>i</code> is: <code>sceKernelSysrootGetVbaseResetVectorForKernel() + 0x40 * i</code>.<br />
<br />
<source lang="C">void *sceKernelSysrootGetVbaseResetVectorForKernel(void);</source><br />
<br />
=== sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x71DB83A2<br />
|}<br />
<br />
Registers [[SceSblPostSsMgr#sceSblLicMgrGetLicenseStatusForDriver]].<br />
<br />
<source lang="c">int sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel(int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)());</source><br />
<br />
=== sceKernelSysrootLicMgrGetLicenseStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x377895EB<br />
|}<br />
<br />
Called by [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel|sceSblAuthMgrAuthHeaderForKernel]] before Cmep request.<br />
<br />
<source lang="C">int sceKernelSysrootLicMgrGetLicenseStatusForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSysrootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x3E455842<br />
|}<br />
<br />
Temp name was sceKernelGetSysbaseForKernel.<br />
<br />
Returns pointer to SceUIDSysrootObject in SceSysmem.<br />
<br />
<source lang="C">SceUIDSysrootObject *sceKernelSysrootGetSysrootForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetKblParamForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x9DB56D1F<br />
|}<br />
<br />
Temp name was sceKernelGetSysrootBufferForKernel, sceSysrootGetSysrootBufferForKernel.<br />
<br />
Returns pointer to [[KBL Param]].<br />
<br />
<source lang="C">SceKblParam *sceKernelSysrootGetKblParamForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSoCRevisionForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xD3872270<br />
|}<br />
<br />
return pSysroot->soc_revision;<br />
<br />
<source lang="C">int sceKernelSysrootGetSoCRevisionForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetPervasiveUnkDwordForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xFFD6E24D<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns value initially read from physical address 0xE3100004 (ScePervasiveMisc + 0x4).<br />
<br />
return pSysroot->pervasive_unk_dword;<br />
<br />
<source lang="C">int sceKernelSysrootGetPervasiveUnkDwordForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetKermitRevisionForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x403B509E<br />
|}<br />
<br />
return pSysroot->kermit_revision;<br />
<br />
Used by [[SceKernelBusError]], [[SceSysStateMgr]].<br />
<br />
<source lang="C"><br />
// Return value is 0x1FFFF-masked, at least on recent System Software versions.<br />
SceUInt32 sceKernelSysrootGetKermitRevisionForKernel(void);<br />
</source><br />
<br />
=== sceKernelSysrootGetErnieSleepFactorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0xAB3CC7D0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[KBL Param#Sleep Factor]].<br />
<br />
return kbl_param->sleep_factor;<br />
<br />
<source lang="C">int sceKernelSysrootGetErnieSleepFactorForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetErnieWakeupFactorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2F97041A<br />
|}<br />
<br />
This is the official name. Temp name was sceSysrootGetWakeupFactorForKernel.<br />
<br />
See [[KBL Param#Wakeup Factor]].<br />
<br />
return kbl_param->wakeup_factor;<br />
<br />
<source lang="C">int sceKernelSysrootGetErnieWakeupFactorForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSessionIdForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.740.011 || 0x84783B71<br />
|}<br />
<br />
Writes kbl_param->session_id to buffer.<br />
<br />
pSessionId buffer size is 0x10 bytes.<br />
<br />
<source lang="C">int sceKernelSysrootGetSessionIdForKernel(char *pSessionId);</source><br />
<br />
=== sceKernelSysrootIsExternalBootModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x89D19090<br />
|}<br />
<br />
return *(int *)(kbl_param->boot_type_indicator_1) & 1;<br />
<br />
<source lang="C">int sceKernelSysrootIsExternalBootModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsSomeBootModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x7B7F8171<br />
|}<br />
<br />
This is a guessed name. A possible name is sceKernelIsAllowSdCardFromMgmt.<br />
<br />
Used by [[SceSdif]], [[SceExfatfs]].<br />
<br />
[[SceExfatfs]] will mount sd0: instead of gro0:/grw0: when this function returns SCE_TRUE.<br />
<br />
return (*(int *)(kbl_param->boot_type_indicator_1) >> 19) & 1;<br />
<br />
Returns true if boot_type_indicator_1 has flag 0x80000 ?sd mode? - (Mgmt bit 1)<br />
<br />
<source lang="C">int sceKernelSysrootIsSomeBootModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsExternalBootMode2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x7918D44E<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootIsSomeBootMode2ForKernel. A possible name is sceKernelIsAllowFwCheckSkip.<br />
<br />
return kbl_param->boot_type_indicator_1[2] & 1;<br />
<br />
Return true if boot_type_indicator_1 has flag 0x10000 but it seems to be never set in external (release) second_loader. It allows to bypass current fw version check for module loading.<br />
<br />
<source lang="C">int sceKernelSysrootIsExternalBootMode2ForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUartModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xAE7A8F1D<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootIsSomeModeForKernel.<br />
<br />
Returns true if (kbl_param->boot_flags[1] != 0xFF).<br />
<br />
Used to check if UART must be initialized or not.<br />
<br />
<source lang="C">int sceKernelSysrootIsUartModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsSafeModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x834439A7<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsSafeModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUpdateModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xB0E1FC67<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsUpdateModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsBsodRebootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4373AC96<br />
|}<br />
<br />
return ((pKblParam->wakeup_factor) & 0x7Fu) == 0x17;<br />
<br />
<source lang="C">int sceKernelSysrootIsBsodRebootForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUsbEnumWakeupForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x79C9AE10<br />
|}<br />
<br />
<source lang="C"><br />
if ( *(int *)(kbl_param->unk_C0) & 0x90000 )<br />
return 1;<br />
else<br />
return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) == 0xF;<br />
</source><br />
<br />
<source lang="C">int sceKernelSysrootIsUsbEnumWakeupForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUnknownRebootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE4EA1960<br />
|}<br />
<br />
return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) <= 1;<br />
<br />
<source lang="C">int sceKernelSysrootIsUnknownRebootForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsManufacturingModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0x55392965<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootUseExternalStorageForKernel.<br />
<br />
When returns true it allows loading sd0:psp2config.skprx.<br />
<br />
Returns true when Manufacturing Mode flag is set:<br />
<br />
return (*(int *)(kbl_param->boot_type_indicator_1) >> 2) & 1;<br />
<br />
<source lang="C">int sceKernelSysrootIsManufacturingModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootUseInternalStorageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x50FE3B4D<br />
|}<br />
<br />
Returns true when use internal storage flag is not set:<br />
<br />
return *(char *)(kbl_param->boot_flags[5]) & 1 ^ 1;<br />
<br />
<source lang="C">int sceKernelSysrootUseInternalStorageForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetThreadAccessLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x20009397<br />
|}<br />
<br />
Calls int (__cdecl *GetThreadAccessLevel)(); // 0x344 on 3.60<br />
<br />
<source lang="c">int sceKernelSysrootGetThreadAccessLevelForKernel(void);</source><br />
<br />
=== sceKernelSysrootAllocRemoteProcessHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD351EBC8<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryForKernel.<br />
<br />
Same as <code>sceKernelAllocHeapMemoryWithOptForDriver</code> but does set <code>pid</code> to 0x1000B.<br />
<br />
Checks that pid is 0x10013 or 0x10005 (kernel).<br />
<br />
<source lang="C">void* sceKernelSysrootAllocRemoteProcessHeapForKernel(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelSysrootGetModulePrivateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x37EC12BB<br />
|}<br />
<br />
data : 3: system memory (0xDC-bytes), 7: some process data (?-bytes), 9: kbl module cb (0xAC-bytes)<br />
<br />
<source lang="C">void *sceKernelSysrootGetModulePrivateForKernel(int idx);</source><br />
<br />
=== sceKernelSysrootSetModulePrivateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x7A7E7C0C<br />
|}<br />
<br />
<source lang="C">void sceKernelSysrootSetModulePrivateForKernel(int idx, void *data);</source><br />
<br />
=== sceKernelSysrootSetSysrootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x36916C30<br />
|}<br />
<br />
<source lang="C">void sceKernelSysrootSetSysrootForKernel(SceUID sysroot_uid);</source><br />
<br />
=== sceKernelSysrootProcessmgrStart2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.011-3.740.011 || 0x62E8F511<br />
|}<br />
<br />
=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0x256B2394<br />
|}<br />
<br />
<source lang="C">sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel(SceUID pid, SceUID modid, SceUInt32 stopReason, SceUInt64 time);</source><br />
<br />
=== sceKernelSysrootSetIsUserModeThreadFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || 0x5BD911A8<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].<br />
<br />
<source lang="C">int sceKernelSysrootSetIsUserModeThreadFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootIsUserModeThreadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.011-3.740.011 || 0x7FC7A163<br />
|}<br />
<br />
=== sceKernelSysrootGetSecureStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x0A63CA5E<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
return *(uint *)some_buf->field_0x28 & 1;<br />
<br />
<source lang="C">int sceKernelSysrootGetSecureStatusForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsSecureStateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x3193DAB2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
return (*(uint *)some_buf->field_0x28 ^ 1) & 1;<br />
<br />
<source lang="C">SceBool sceKernelSysrootIsSecureStateForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsColdBootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xD7198963<br />
|}<br />
<br />
return (*(uint *)some_buf->field_0x28 & 10; // FW 3.60 in IDA PRO<br />
<br />
return ((*(uint *)some_buf->field_0x28 ^ 0x10) << 0x1b) >> 0x1f; // FW 0.940 in Ghidra<br />
<br />
<source lang="C">int sceKernelSysrootIsColdBootForKernel(void);</source><br />
<br />
== SceSysrootForDriver ==<br />
<br />
=== SceSysrootForDriver_6219CC14 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x6219CC14<br />
|}<br />
<br />
Used in [[SceUlobjMgr#SceUlobjMgrForDriver_332F2E58]].<br />
<br />
<source lang="C">int SceSysrootForDriver_6219CC14(int a1, int a2, int a3, int a4, int a5);</source><br />
<br />
=== SceSysrootForDriver_F804F761 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xF804F761<br />
|}<br />
<br />
Official name might be sceKernelSysrootHasSDCardSupportForDriver.<br />
<br />
This function always returns <code>SCE_FALSE</code> on some release System Software versions, for example 3.500.000 and 3.600.011.<br />
<br />
Used in [[SceSdstor]] and [[SceVshBridge#vshSdGetCardInfo]].<br />
<br />
If this function returns <code>SCE_TRUE</code>, then <code>[[SceSdif#get_sd_context_part_validate_sd]](1)</code> is called.<br />
<br />
<source lang="C">SceBool SceSysrootForDriver_F804F761(void);</source><br />
<br />
=== sceKernelSysrootSetVipRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA6A0A038<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootSetVipRpcDebugFuncForDriver(SceKernelSysrootVipRpcDebugFunc func);</source><br />
<br />
=== sceKernelSysrootClearVipRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0ECD711E<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootClearVipRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelSysrootGetVipRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x483EF108<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelSysrootVipRpcDebugFunc sceKernelSysrootGetVipRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelSysrootSetVeneziaRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x47F19DD3<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootSetVeneziaRpcDebugFuncForDriver(SceKernelSysrootVeneziaRpcDebugFunc func);</source><br />
<br />
=== sceKernelSysrootClearVeneziaRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5B106EB3<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootClearVeneziaRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelSysrootGetVeneziaRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x49843C16<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelSysrootVeneziaRpcDebugFunc sceKernelSysrootGetVeneziaRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelApiDeclareErrorMsgForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x8CD02748<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeRawForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x8A760856<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeInt32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0xD86BD6DC<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeUInt32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x6E0BC27C<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeInt64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x08B8F1D0<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeUInt64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60-3.65 || 0x2A5DBD38<br />
|}<br />
<br />
Sets a value to 3.<br />
<br />
<source lang="C">void sceKernelApiDeclareTypeUInt64ForDriver(void);</source><br />
<br />
=== sceKernelSysrootGetTimebaseClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0xBFD8F2A2<br />
|}<br />
<br />
Calls a function registered by [[#SceSysrootForDriver_C94C76FA]].<br />
<br />
Used by [[SceGpuEs4]], only on DevKit.<br />
<br />
<source lang="C">SceUInt32 sceKernelSysrootGetTimebaseClockFrequencyForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_C94C76FA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0xC94C76FA<br />
|}<br />
<br />
Registers some Sysroot functions related to clock frequency.<br />
<br />
<source lang="C">int SceSysrootForDriver_C94C76FA(SceSysrootForDriver_C94C76FA_struct *pParam);</source><br />
<br />
=== SceSysrootForDriver_2BE874EF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x2BE874EF<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_BF82931F]].<br />
<br />
Used only in [[SceAppMgr]].<br />
<br />
<source lang="C">int SceSysrootForDriver_2BE874EF(void *func);</source><br />
<br />
=== SceSysrootForDriver_3B19B06B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x3B19B06B<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_6D111FA7]].<br />
<br />
Used only in [[SceAppMgr]].<br />
<br />
<source lang="C">int SceSysrootForDriver_3B19B06B(void *func);</source><br />
<br />
=== SceSysrootForDriver_70AD47A9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x70AD47A9<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_2A03DFA1]].<br />
<br />
Used only in [[SceAppMgr]].<br />
<br />
<source lang="C">int SceSysrootForDriver_70AD47A9(void *func);</source><br />
<br />
=== SceSysrootForDriver_AA770EF7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0xAA770EF7<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForDriver_591BB490]].<br />
<br />
The function is registered from [[SceTty2uart]] only if [[KBL Param|DIP Switch]] 211 is set.<br />
<br />
<source lang="C">int SceSysrootForDriver_AA770EF7(void *func);</source><br />
<br />
=== SceSysrootForDriver_591BB490 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x591BB490<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_AA770EF7]].<br />
<br />
Gets tty2uart information into a 0x1000-sized buffer, similarly to [[#sceKernelGetTtyInfoForDriver]]. Returns some size, maybe size of the written tty2uart buffer.<br />
<br />
Used only in [[SceCoredump]].<br />
<br />
<source lang="C"><br />
// size: usually 0x1000<br />
int SceSysrootForDriver_591BB490(int magic_or_size, void *pBuf, SceSize size);<br />
</source><br />
<br />
=== SceSysrootForDriver_C5EAF5F7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xC5EAF5F7<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForDriver_47724459]].<br />
<br />
<source lang="C">int SceSysrootForDriver_C5EAF5F7(void *func);</source><br />
<br />
=== SceSysrootForDriver_47724459 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x47724459<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_C5EAF5F7]].<br />
<br />
=== SceSysrootForDriver_D4457D4F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xD4457D4F<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForDriver_40F28DC6]].<br />
<br />
<source lang="C">int SceSysrootForDriver_D4457D4F(void *func);</source><br />
<br />
=== SceSysrootForDriver_40F28DC6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x40F28DC6<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_D4457D4F]].<br />
<br />
=== sceKernelSysrootGetCompiledSdkVersionByPidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xCAE820B2<br />
|}<br />
<br />
Temp name was sceKernelGetProcessHeapIDForDriver.<br />
<br />
Calls a callback registered by [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
Used in [[SceKernelModulemgr]] functions that load modules, for example [[SceKernelModulemgr#sceKernelStartModuleForPidForKernel]].<br />
<br />
<source lang="C">int sceKernelSysrootGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);</source><br />
<br />
=== SceSysrootForDriver_8747D415 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8747D415<br />
|}<br />
<br />
Used by [[SceDeci4pSDfMgr]].<br />
<br />
Registers the function called by [[#SceSysrootForDriver_B27B7530]].<br />
<br />
<source lang="C">int SceSysrootForDriver_8747D415(void *func);</source><br />
<br />
=== SceSysrootForDriver_B27B7530 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB27B7530<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_8747D415]].<br />
<br />
=== sceKernelSysrootSetGetBuserrorDataFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x82FC6405<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the function called by [[#sceKernelSysrootGetBuserrorDataForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSetGetBuserrorDataFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootGetBuserrorDataForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCD4B84F7<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetGetBuserrorDataFuncForDriver]].<br />
<br />
=== SceSysrootForDriver_FF2DD7AB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFF2DD7AB<br />
|}<br />
<br />
Registers something.<br />
<br />
<source lang="C"><br />
typedef struct SceSysrootForDriver_FF2DD7AB_struct { // size is 0x1C on FW 3.60<br />
SceSize size; // Size of this structure<br />
char unk_4[0x18];<br />
} SceSysrootForDriver_FF2DD7AB_struct;<br />
<br />
int SceSysrootForDriver_FF2DD7AB(SceSysrootForDriver_FF2DD7AB_struct *pData);<br />
</source><br />
<br />
=== SceSysrootForDriver_3AE319DA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3AE319DA<br />
|}<br />
<br />
Used by [[SceSyscon]].<br />
<br />
Get something registered by [[#SceSysrootForDriver_FF2DD7AB]].<br />
<br />
<source lang="C">int SceSysrootForDriver_3AE319DA(void);</source><br />
<br />
=== sceKernelSysrootGetHardwareFlagsForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x46E72428<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootIsAuCodecIcConexantForDriver.<br />
<br />
Writes kbl_param->hardware_flags to buffer.<br />
<br />
pFlags buffer size is 0x10 bytes.<br />
<br />
<source lang="C">int sceKernelSysrootGetHardwareFlagsForDriver(void *pFlags);</source><br />
<br />
=== sceKernelSysrootGetHardwareInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x930B1342<br />
|}<br />
<br />
return kbl_param->hardware_info;<br />
<br />
<source lang="C">int sceKernelSysrootGetHardwareInfoForDriver(void);</source><br />
<br />
=== sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE541959B<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9421B223<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver(void);</source><br />
<br />
=== sceKernelSysrootSDfCtlSetBootParameterForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7AAC4EE7<br />
|}<br />
<br />
<source lang="C"><br />
// bootparam max size is 0x80 bytes<br />
int sceKernelSysrootSDfCtlSetBootParameterForDriver(const char *bootparam);<br />
</source><br />
<br />
=== sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x35875119<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootUtMgrGetTrilithiumBufferForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootUtMgrGetTrilithiumBufferForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.180.011-3.740.011 || 0xD75D4F37<br />
|}<br />
<br />
Used in [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel]] to overwrite fSELF authinfo.<br />
<br />
Returns 0 on success, 0x800f1a02 on error.<br />
<br />
<source lang="C">int sceKernelSysrootUtMgrGetTrilithiumBufferForDriver(SceUtokenDecrypted *buffer);</source><br />
<br />
=== sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xA12C9950<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver]].<br />
<br />
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].<br />
<br />
<source lang="C">int sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x56D85EB0<br />
|}<br />
<br />
Used by [[SceSblACMgr]].<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetSceSblPostSsMgrForDriver_56D85EB0FuncForDriver]].<br />
<br />
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].<br />
<br />
=== sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0xE25D2FD5<br />
|}<br />
<br />
Registers the functions called by [[#sceKernelSysrootSblUtMgrHasUNK1FlagForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootSblUtMgrHasUNK1FlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x26AA237C<br />
|}<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSblUtMgrHasUNK1FlagForDriver(void);</source><br />
<br />
=== sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE2E88E3E<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootSblUtMgrHasUNK2FlagForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootsceSetSblUtMgrHasUNK2FlagFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootSblUtMgrHasUNK2FlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE2515A08<br />
|}<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver]].<br />
<br />
Used by [[SceSblACMgr#sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSblUtMgrHasUNK2FlagForDriver(void);</source><br />
<br />
=== sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xEE5D6CE9<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootUtMgrHasNpTestFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xA43599E9<br />
|}<br />
<br />
<source lang="c">int sceKernelSysrootUtMgrHasNpTestFlagForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_2D6B2A79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2D6B2A79<br />
|}<br />
<br />
Registers a function related to kernel panic, called by [[#SceSysrootForDriver_CC7A0E63]] or [[#SceSysrootForKernel_CC7A0E63]].<br />
<br />
=== SceSysrootForDriver_CC7A0E63 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCC7A0E63<br />
|}<br />
<br />
Calls a function related to kernel panic, registered by [[#SceSysrootForDriver_2D6B2A79]] or [[#SceSysrootForKernel_2D6B2A79]].<br />
<br />
<source lang="C"><br />
// type: 1: kernel_assertion_or_panic, 3: kernel_exception<br />
// size: must be <= 0x1000<br />
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2<br />
int SceSysrootForDriver_CC7A0E63(int type, SceSize size, const char *pBuf);<br />
</source><br />
<br />
=== sceKernelSysrootDisableAutoClockDownForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0xEE934615<br />
|}<br />
<br />
Derived from [[SceVshBridge#vshKernelDisableAutoClockDown]].<br />
<br />
return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0x10);<br />
<br />
Adds 0x10 from a SceSysmem global variable and returns it.<br />
<br />
<source lang="C">int sceKernelSysrootDisableAutoClockDownForDriver(void);</source><br />
<br />
=== sceKernelSysrootEnableAutoClockDownForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0xEEF091A7<br />
|}<br />
<br />
Derived from [[SceVshBridge#vshKernelEnableAutoClockDown]].<br />
<br />
return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0xfffffff0);<br />
<br />
Subtracts 0x10 from a SceSysmem global variable and returns it.<br />
<br />
Used by SceCompat, ScePower, SceKernelDmacMgr, SceSblAuthMgr, SceSblSmschedProxy, SceSblSsSmComm.<br />
<br />
<source lang="C">int sceKernelSysrootEnableAutoClockDownForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_6050A467 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6050A467<br />
|}<br />
<br />
Debug related. Returns an error when called because there is no handler set for retail.<br />
<br />
<source lang="C">int SceSysrootForDriver_6050A467(SceUID pid);</source><br />
<br />
=== SceSysrootForDriver_F4340469 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF4340469<br />
|}<br />
<br />
Coredump related. Called during process load. Something is same as in [[#SceSysrootForDriver_6050A467]].<br />
<br />
<source lang="C">int SceSysrootForDriver_F4340469(int something, SceUID pid, ...);</source><br />
<br />
=== sceKernelSysrootRegisterCoredumpTriggerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xDD473B05<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootRegisterCoredumpTriggerForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootCoredumpTriggerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCD8CD242<br />
|}<br />
<br />
Used by [[SceDeci4pDbgp]].<br />
<br />
<source lang="C">int sceKernelSysrootCoredumpTriggerForDriver(int a1, int a2, int a3, SceCoredumpForDriver_A7D214A7_Opt *pOpt);</source><br />
<br />
=== sceKernelSysrootRegisterCoredumpCancelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x400B9793<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootRegisterCoredumpCancelForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootCoredumpCancelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x80FBC69D<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootCoredumpCancelForDriver(int a1);</source><br />
<br />
=== sceKernelSysrootSetProcessHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x0F07C3FC<br />
|}<br />
<br />
Registers some handlers.<br />
<br />
<source lang="C">int sceKernelSysrootSetProcessHandlerForDriver(SceSysrootProcessHandler *pHandler);</source><br />
<br />
=== sceKernelSysrootClearProcessHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x5A7FFDC1<br />
|}<br />
<br />
<source lang="C">void sceKernelSysrootClearProcessHandlerForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_421EFC96 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.692 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x421EFC96<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's on_process_created.<br />
<br />
Used only by [[SceAppMgr]] and called on process creation.<br />
<br />
Hooked to make it return 0 (success) for example in:<br />
* [https://github.com/henkaku/henkaku/blob/master/payload/payload.c#L423 HENkaku payload by Team Molecule]<br />
* [https://github.com/TheOfficialFloW/update365/blob/2d175c3d2cb6618ba048aee5776acace68ac4493/installer/src/kernel.c#L1058 update365 by TheFloW]<br />
<br />
<source lang="C">int SceSysrootForDriver_421EFC96(int maybe_pid, int maybe_modid, int a3);</source><br />
<br />
=== sceKernelSysrootSWBkptGetOriginalOpcodeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9CFF80F9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelSysrootSWBkptGetOriginalOpcodeForDriver(SceUID pid, void *address, SceUInt32 *opcode);</source><br />
<br />
=== SceSysrootForDriver_571E5B79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x571E5B79<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's unk_4.<br />
<br />
=== SceSysrootForDriver_51F9C118 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x51F9C118<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's unk_18.<br />
<br />
Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].<br />
<br />
<source lang="C"><br />
// a3: second argument of SceProcessmgrForKernel_8729DE79<br />
int SceSysrootForDriver_51F9C118(SceUID pid, SceUID modid, int a3, void* maybe_process_info, SceUInt64 time);<br />
</source><br />
<br />
=== SceSysrootForDriver_582616EC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x582616EC<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's unk_24.<br />
<br />
Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].<br />
<br />
<source lang="C"><br />
// a3: second argument of SceProcessmgrForKernel_8729DE79<br />
int SceSysrootForDriver_582616EC(SceUID pid, SceUID modid, int a3);<br />
</source><br />
<br />
=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x256B2394<br />
|}<br />
<br />
=== sceKernelSysrootGetShellPidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x05093E7B<br />
|}<br />
<br />
<source lang="C">SceUID sceKernelSysrootGetShellPidForDriver(void);</source><br />
<br />
=== sceKernelSysrootAppMgrSpawnProcessForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3ACACD22<br />
|}<br />
<br />
=== sceKernelSysrootInformUpdateStartedForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9A486846<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootInformUpdateStartedForDriver(int number1, int number2, const char *str, SceSize len);</source><br />
<br />
=== sceKernelSysrootInformUpdateOngoingForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9EC02A41<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootInformUpdateOngoingForDriver(int number1, int number2);</source><br />
<br />
=== sceKernelSysrootInformUpdateFinishedForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x217B2871<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootInformUpdateFinishedForDriver(int number, const char *str, SceSize len);</source><br />
<br />
=== sceKernelSysrootSetSwInfoIntForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x631141E2<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSwInfoIntForDriver(char *str, SceSize len, SceUInt32 number);</source><br />
<br />
=== sceKernelSysrootSetSwInfoStrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x17DD213C<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSwInfoStrForDriver(char *str1, SceSize len1, char *str2, SceSize len2);</source><br />
<br />
=== sceKernelSysrootSetSwInfoBinForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9E96D990<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSwInfoBinForDriver(char *str1, SceSize size1, char *str2, SceSize size2);</source><br />
<br />
=== sceKernelSysrootSetGetSystemSwVersionFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3276086B<br />
|}<br />
<br />
Temp name was sceKernelSysrootSetSystemSwVersionForDriver.<br />
<br />
Used by [[SceSblUpdateMgr]].<br />
<br />
<source lang="c">void sceKernelSysrootSetGetSystemSwVersionFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootGetSystemSwVersionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x67AAB627<br />
|}<br />
<br />
Returns System Software version as int from SceSysmem memory. For exemple: 0x0365000 on 3.65.<br />
<br />
<source lang="c">int sceKernelSysrootGetSystemSwVersionForDriver(void);</source><br />
<br />
=== sceKernelSysrootIsSafeModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x834439A7<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsSafeModeForDriver(void);</source><br />
<br />
=== sceKernelSysrootIsUpdateModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB0E1FC67<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsUpdateModeForDriver(void);</source><br />
<br />
=== sceKernelSysrootGetModelInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x4D98B15B<br />
|}<br />
<br />
This is a guessed name, based on "sysroot->model_info".<br />
<br />
Returns sysroot->model_info.<br />
<br />
Used only in [[SceProcessmgr]] initializeBudget() on module start. According to model_info, ScePhyMemPartShell is allocated with different parameters.<br />
<br />
<source lang="C">SceUInt32 sceKernelSysrootGetModelInfoForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_ED688AEE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xED688AEE<br />
|}<br />
<br />
Registers the callback called by [[#SceSysrootForDriver_F404026C]].<br />
<br />
<source lang="C">SceSysrootForDriver_ED688AEE(void* cb);</source><br />
<br />
=== SceSysrootForDriver_F404026C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xF404026C<br />
|}<br />
<br />
Calls the callback registered by [[#SceSysrootForDriver_ED688AEE]].<br />
<br />
=== sceKernelSysrootCheckModelCapabilityForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x8AA268D6<br />
|}<br />
<br />
This is an official name. Name derived from [[#sceKernelSysrootCheckModelCapability]].<br />
<br />
Each model capability corresponds to a bit in a Sysroot field derived from Syscon [[KBL_Param#Hardware_Info|Hardware Info]] and [[KBL_Param#Hardware_Info_2|Hardware Info 2]].<br />
<br />
Model capabilities:<br />
* 0: unknown<br />
* 1: Multi-controllers support<br />
* 2: unknown<br />
* 4: unknown<br />
* 5: unknown<br />
* 6: unknown<br />
* 7: unknown, ?OLED display?<br />
* 8: unknown, ?LCD display?<br />
* 9: unknown, set on almost all models<br />
* 10: unknown<br />
* 11: SD card support<br />
* 12: unknown<br />
* 13: unknown<br />
<br />
{| class="wikitable"<br />
|-<br />
! Case !! Model !! Model capabilities (raw) !! Model capabilities (bits set)<br />
|-<br />
| ErnieHwInfo & 0xFF0000 <= 0x410000 / Unknown Model || 0x10100 || 0x604 || 2, 9, 10<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x510000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x600000 || 0x10150 || 0x604 || 2, 9, 10<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x700000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x720000 || 0x20110 || 0x232 || 1, 4, 5, 9<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x800000 || 0x10200 || 0x604 || 2, 9, 10<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x820000 || 0x10220 || 0x604 || 2, 9, 10<br />
|-<br />
| PDEL-10xx in PS TV Emulation mode || 0x20101 || 0x252 || 1, 4, 6, 9<br />
|-<br />
| (ErnieHwInfo2 & 0x9 == 0) && PSTV or PSTVEmu || - || 0x80 || 7<br />
|-<br />
| ErnieHwInfo2 & 0x9 != 0 || - || 0x100 || 8<br />
|-<br />
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 != 0) || - || 0x1000 || 12<br />
|-<br />
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 == 0) || - || & ~0x1000 || UNSET 12<br />
|-<br />
| ErnieHwInfo2 & 0x200 != 0 || - || 0x2000 || 13<br />
|}<br />
<br />
Used in [[SceCtrl]], [[SceSdstor]], [[SceUsbEtherRtl]] and [[SceVshBridge]].<br />
<br />
<source lang="C">int sceKernelSysrootCheckModelCapabilityForDriver(int capability);</source><br />
<br />
=== sceKernelSysrootGetSyscallFrameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x44EA3197<br />
|}<br />
<br />
<source lang="C">SceSyscallFrame *sceKernelSysrootGetSyscallFrameForDriver(void);</source><br />
<br />
=== sceKernelSysrootRegisterInitCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x778D0966<br />
|}<br />
<br />
<source lang="C"><br />
// idx: 0-8<br />
// idx 8: func = ScePower/SceMsif functions<br />
int sceKernelSysrootRegisterInitCallbackForDriver(const void *func, SceUInt32 idx, SceUInt32 arg, SceUInt32 *ret);<br />
</source><br />
<br />
=== sceKernelSysrootInvokeInitCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x93CD44CD<br />
|}<br />
<br />
<source lang="C"><br />
// idx: 0-8, 5: disable NSKBL, more...?<br />
int sceKernelSysrootInvokeInitCallbackForDriver(int idx);<br />
</source><br />
<br />
=== sceKernelSysrootInvokeInitCallbackExForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 0.990-3.60 || 0x7C2C10E2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
// idx: 0-8, 5: disable NSKBL, more...?<br />
// unk: argument passed to the init callback<br />
int sceKernelSysrootInvokeInitCallbackExForDriver(int idx, int unk);<br />
</source><br />
<br />
== SceKernelUtilsForDriver ==<br />
<br />
=== sceAesDecrypt1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD8678061<br />
|}<br />
<br />
Perform normal AES decrypt.<br />
<br />
<source lang="c">int sceAesDecrypt1ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesDecrypt2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE39CD272<br />
|}<br />
<br />
Perform AES decrypt using encryption round key.<br />
<br />
<source lang="c">int sceAesDecrypt2ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesEncrypt1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC2A61770<br />
|}<br />
<br />
Perform AES encrypt. There are two functions that are the same on 1.69.<br />
<br />
<source lang="c">int sceAesEncrypt1ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesEncrypt2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x302947B6<br />
|}<br />
<br />
Perform AES encrypt. Similar to sceAesEncrypt1ForDriver.<br />
<br />
<source lang="c">int sceAesEncrypt2ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesInit1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xF12B6451<br />
|}<br />
<br />
This sets up the AES engine. <code>ctx</code> is a 0x3C0 byte buffer (on FW 1.69). <code>blocksize</code> and <code>keysize</code> values are in bits. 128/196/256 are supported values.<br />
<br />
last arg to subroutine is 0<br />
<br />
<source lang="c">int sceAesInit1ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source><br />
<br />
=== sceAesInit2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEDA97D6D<br />
|}<br />
<br />
last arg to subroutine is 1<br />
<br />
<source lang="c">int sceAesInit2ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source><br />
<br />
=== sceAesInit3ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x72408E29<br />
|}<br />
<br />
last arg to subroutine is 2<br />
<br />
<source lang="c">int sceAesInit3ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source><br />
<br />
=== SceKernelUtilsForDriver_C76A7685 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC76A7685<br />
|}<br />
<br />
Looks like it relates to AES InvMixColumns.<br />
<br />
=== SceKernelUtilsForDriver_60ED6EA9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x60ED6EA9<br />
|}<br />
<br />
Equivalent to AES getSBox32Value<br />
<br />
=== sceDeflateDecompressForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8AF1FAD4<br />
|}<br />
<br />
=== sceDeflateDecompressPartialForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3D74CCDF<br />
|}<br />
<br />
=== sceGzipDecompressForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x367EE3DF<br />
|}<br />
<br />
=== sceGzipGetCommentForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCD3AE08F<br />
|}<br />
<br />
=== sceGzipGetCompressedDataForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x63619124<br />
|}<br />
<br />
=== sceGzipGetInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFFC6A10F<br />
|}<br />
<br />
=== sceGzipGetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF901FD3E<br />
|}<br />
<br />
=== sceGzipIsValidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD8FAEFD4<br />
|}<br />
<br />
=== sceHmacSha1DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x29A28957<br />
|}<br />
<br />
<source lang="C">int sceHmacSha1DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source><br />
<br />
=== sceHmacSha224DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7F2A7B99<br />
|}<br />
<br />
<source lang="C">int sceHmacSha224DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source><br />
<br />
=== sceHmacSha256DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x83EFA1CC<br />
|}<br />
<br />
<source lang="C">int sceHmacSha256DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source><br />
<br />
=== sceMt19937GlobalInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD428CC2A<br />
|}<br />
<br />
cp_timestamp_2 is gotten from SceKblParam.<br />
<br />
<source lang="C">int sceMt19937GlobalInitForDriver(uint32_t cp_timestamp_2);</source><br />
<br />
=== sceMt19937GlobalUIntInRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x875B2A1C<br />
|}<br />
<br />
Temp name was sceMt19937GlobalUninitForDriver.<br />
<br />
<source lang="C"><br />
// Both the address and size must be aligned on four bytes.<br />
int sceMt19937GlobalUIntInRangeForDriver(void *pBase, SceSize length);<br />
</source><br />
<br />
=== sceMt19937InitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4C9A5730<br />
|}<br />
<br />
=== sceMt19937UIntForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x92AEDFBC<br />
|}<br />
<br />
=== sceSfmt19937FillArray32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2B30548B<br />
|}<br />
<br />
=== sceSfmt19937FillArray64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x49B41540<br />
|}<br />
<br />
=== sceSfmt19937GenRand32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBBE4701A<br />
|}<br />
<br />
=== sceSfmt19937GenRand64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x45DEAAD6<br />
|}<br />
<br />
=== sceSfmt19937InitByArrayForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x33AE1203<br />
|}<br />
<br />
=== sceSfmt19937InitGenRandForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAB48C3CA<br />
|}<br />
<br />
=== sceSha1BlockInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE4390FFA<br />
|}<br />
<br />
<source lang="C">int sceSha1BlockInitForDriver(void* ctx);</source><br />
<br />
=== sceSha1BlockResultForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x48F24106<br />
|}<br />
<br />
<source lang="C">int sceSha1BlockResultForDriver(void* ctx, void *digest);</source><br />
<br />
=== sceSha1BlockUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x478A6F3C<br />
|}<br />
<br />
<source lang="C">int sceSha1BlockUpdateForDriver(void* ctx, const void *data, int size);</source><br />
<br />
=== sceSha1DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x87DC7F2F<br />
|}<br />
<br />
<source lang="C">int sceSha1DigestForDriver(const void *data, int size, void *digest);</source><br />
<br />
=== sceSha224BlockInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC762EA6D<br />
|}<br />
<br />
<source lang="C">int sceSha224BlockInitForDriver(void* ctx);</source><br />
<br />
=== sceSha224BlockResultForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFBF2A442<br />
|}<br />
<br />
<source lang="C">int sceSha224BlockResultForDriver(void* ctx, void *digest);</source><br />
<br />
=== sceSha224BlockUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7556E611<br />
|}<br />
<br />
<source lang="C">int sceSha224BlockUpdateForDriver(void* ctx, const void *data, int size);</source><br />
<br />
=== sceSha224DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9EA9D4DC<br />
|}<br />
<br />
<source lang="C">int sceSha224DigestForDriver(const void *data, int size, void *digest);</source><br />
<br />
=== sceSha256BlockInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD909FA2C<br />
|}<br />
<br />
<source lang="C">int sceSha256BlockInitForDriver(void* ctx);</source><br />
<br />
=== sceSha256BlockResultForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4899CD4B<br />
|}<br />
<br />
<source lang="C">int sceSha256BlockResultForDriver(void* ctx, void *digest);</source><br />
<br />
=== sceSha256BlockUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x236A9097<br />
|}<br />
<br />
<source lang="C">int sceSha256BlockUpdateForDriver(void* ctx, const void *data, int size);</source><br />
<br />
=== sceSha256DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xA773A6A8<br />
|}<br />
<br />
<source lang="C">int sceSha256DigestForDriver(const void *data, SceSize size, void *digest);</source><br />
<br />
=== sceZlibDecompressForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x900148DB<br />
|}<br />
<br />
=== sceZlibGetCompressedDataForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x01EB6C45<br />
|}<br />
<br />
=== sceZlibGetInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5B9BCD75<br />
|}<br />
<br />
=== sceXorshift128ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x335AF34D<br />
|}<br />
<br />
Similar implementation as [https://github.com/RIOT-OS/RIOT/blob/master/sys/random/xorshift.c#L41 xorshift128].<br />
<br />
<source lang="C">int sceXorshift128ForDriver(SceUInt32 *state);</source><br />
<br />
=== SceKernelUtilsForDriver_B55C69B7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB55C69B7<br />
|}<br />
<br />
If buffer is full of zeroes, then each of the four dwords of buffer are set to 1. Always success and always return 0.<br />
<br />
Used in [[SceProcessmgr]].<br />
<br />
<source lang="C">int SceKernelUtilsForDriver_B55C69B7(SceUInt32 *buffer);</source><br />
<br />
== SceZlibForDriver ==<br />
<br />
This library was moved to [[SceSblPostSsMgr#SceZlibForDriver]] on FW 1.800.071.<br />
<br />
[http://www.zlib.net/ zlib] compression library.<br />
<br />
=== zlibVersion ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x517BC5F7<br />
|}<br />
<br />
<source lang="C">const char *zlibVersion(void);</source><br />
<br />
=== inflateInit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x81D0667B<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_723495A5|alias]].<br />
<br />
<source lang="C">int inflateInit(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_723495A5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x723495A5<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_723495A5(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== inflateInit2_ ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x0BDDF66A<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_21A03034|alias]].<br />
<br />
<source lang="C">int inflateInit2_(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_21A03034 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x21A03034<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_21A03034(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source><br />
<br />
=== inflateInit_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x44DA19D2<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_B03E109B|alias]].<br />
<br />
<source lang="C">int inflateInit_2(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_B03E109B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xB03E109B<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_B03E109B(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== inflateInit2_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xA1E7E8B3<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_AC2F8437|alias]].<br />
<br />
<source lang="C">int inflateInit2_2(SceZlibStream *strm, int a2, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_AC2F8437 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xAC2F8437<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_AC2F8437(SceZlibStream *strm, int a2, const char *version, int stream_size);</source><br />
<br />
=== inflate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xD4A85178<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E4F34A68|alias]].<br />
<br />
<source lang="C">int inflate(SceZlibStream *strm, int flush);</source><br />
<br />
=== SceZlibForDriver_E4F34A68 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xE4F34A68<br />
|}<br />
<br />
=== inflateSetDictionary ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x7B16DBD6<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_00561385|alias]].<br />
<br />
<source lang="C">int inflateSetDictionary(SceZlibStream *strm, const void *dictionary, int dictLength);</source><br />
<br />
=== SceZlibForDriver_00561385 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x00561385<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_00561385(SceZlibStream *strm, const void *dictionary, int dictLength);</source><br />
<br />
=== inflateEnd ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x9030BAE4<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_134E91EA|alias]].<br />
<br />
<source lang="C">int inflateEnd(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_134E91EA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x134E91EA<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_134E91EA(SceZlibStream *strm);</source><br />
<br />
=== inflateCopy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x4C27A382<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_89B30588|alias]].<br />
<br />
<source lang="C">int inflateCopy(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== SceZlibForDriver_89B30588 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x89B30588<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_89B30588(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== inflateSyncPoint ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x4CB63BCD<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_834CC4A2|alias]].<br />
<br />
<source lang="C">int inflateSyncPoint(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_834CC4A2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x834CC4A2<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_834CC4A2(SceZlibStream *strm);</source><br />
<br />
=== deflate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xE859D60F<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_5B718E55|alias]].<br />
<br />
<source lang="C">int deflate(SceZlibStream *strm, int flush);</source><br />
<br />
=== SceZlibForDriver_5B718E55 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010-3.60 || 0x5B718E55<br />
|}<br />
<br />
Used by [[SceCoredump]].<br />
<br />
<source lang="C">int SceZlibForDriver_5B718E55(SceZlibStream *strm, int flush);</source><br />
<br />
=== deflateReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x68CFEA45<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_211D25F5|alias]].<br />
<br />
This function could be deflateResetKeep.<br />
<br />
<source lang="C">int deflateReset(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_211D25F5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x211D25F5<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_211D25F5(SceZlibStream *strm);</source><br />
<br />
=== crc32 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xE0CE06C0<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_3370B9AD|alias]].<br />
<br />
<source lang="C">unsigned long crc32(unsigned long crc, const unsigned char *buf, z_size_t len);</source><br />
<br />
=== SceZlibForDriver_3370B9AD ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3370B9AD<br />
|}<br />
<br />
<source lang="C">unsigned long SceZlibForDriver_3370B9AD(unsigned long crc, const unsigned char *buf, z_size_t len);</source><br />
<br />
=== adler32 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x98619620<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_7E823337|alias]].<br />
<br />
=== SceZlibForDriver_7E823337 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7E823337<br />
|}<br />
<br />
=== deflateInit2_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x20A122F8<br />
|}<br />
<br />
May be an initialization function.<br />
<br />
Used by [[SceCoredump]].<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_BE5CE88A|alias]].<br />
<br />
<source lang="C">int deflateInit2_2(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_BE5CE88A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xBE5CE88A<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_BE5CE88A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
=== deflateEnd ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5492B3F2<br />
|}<br />
<br />
Used by [[SceCoredump]].<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_A5D70E95|alias]].<br />
<br />
<source lang="C">int deflateEnd(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_A5D70E95 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xA5D70E95<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_A5D70E95(SceZlibStream *strm);</source><br />
<br />
=== deflateInit_ ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x25F28DA7<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_520CAA7F|alias]].<br />
<br />
<source lang="C">int deflateInit_(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_520CAA7F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x520CAA7F<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_520CAA7F(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_05F712FE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x05F712FE<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_67A085C4|alias]].<br />
<br />
=== SceZlibForDriver_67A085C4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x67A085C4<br />
|}<br />
<br />
=== SceZlibForDriver_0FA805A3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x0FA805A3<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_1C344E27|alias]].<br />
<br />
<source lang="C">int SceZlibForDriver_0FA805A3(SceZlibStream *strm, int a2, SceUInt16 a3);</source><br />
<br />
=== SceZlibForDriver_1C344E27 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x1C344E27<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_1C344E27(SceZlibStream *strm, int a2, SceUInt16 a3);</source><br />
<br />
=== deflateCopy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x1E135CC1<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_3252D28C|alias]].<br />
<br />
<source lang="C">int deflateCopy(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== SceZlibForDriver_3252D28C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3252D28C<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_3252D28C(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== SceZlibForDriver_35E0108C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x35E0108C<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E2DF5A8B|alias]].<br />
<br />
<source lang="C">int SceZlibForDriver_35E0108C(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_E2DF5A8B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE2DF5A8B<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_E2DF5A8B(SceZlibStream *strm);</source><br />
<br />
=== zError ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3B4466F4<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_3F33F55F|alias]].<br />
<br />
<source lang="C">const char *zError(int err);</source><br />
<br />
=== SceZlibForDriver_3F33F55F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3F33F55F<br />
|}<br />
<br />
<source lang="C">const char *SceZlibForDriver_3F33F55F(int err);</source><br />
<br />
=== inflateReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x408311E8<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_EEC6D267|alias]].<br />
<br />
<source lang="C">int inflateReset(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_EEC6D267 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xEEC6D267<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_EEC6D267(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_4EE6C080 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x4EE6C080<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_93168F72|alias]].<br />
<br />
=== SceZlibForDriver_93168F72 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x93168F72<br />
|}<br />
<br />
=== SceZlibForDriver_5377643A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x5377643A<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_7C40CC39|alias]].<br />
<br />
=== SceZlibForDriver_7C40CC39 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7C40CC39<br />
|}<br />
<br />
=== deflateInit_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x5A0078D6<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_AD23EEBB|alias]].<br />
<br />
<source lang="C">int deflateInit_2(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_AD23EEBB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xAD23EEBB<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_AD23EEBB(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_6ED5B677 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x6ED5B677<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_7993ADAB|alias]].<br />
<br />
=== SceZlibForDriver_7993ADAB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7993ADAB<br />
|}<br />
<br />
=== SceZlibForDriver_7048F14C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7048F14C<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E323828B|alias]].<br />
<br />
=== SceZlibForDriver_E323828B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE323828B<br />
|}<br />
<br />
=== SceZlibForDriver_82167CD9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x82167CD9<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E94663DD|alias]].<br />
<br />
=== SceZlibForDriver_E94663DD ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE94663DD<br />
|}<br />
<br />
=== SceZlibForDriver_86FF6C8B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x86FF6C8B<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_904AA7AE|alias]].<br />
<br />
=== SceZlibForDriver_904AA7AE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x904AA7AE<br />
|}<br />
<br />
=== SceZlibForDriver_89A13883 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x89A13883<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_D9BDC778|alias]].<br />
<br />
=== SceZlibForDriver_D9BDC778 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xD9BDC778<br />
|}<br />
<br />
=== SceZlibForDriver_938F34FA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x938F34FA<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_BC022D38|alias]].<br />
<br />
=== SceZlibForDriver_BC022D38 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xBC022D38<br />
|}<br />
<br />
=== deflateInit2_ ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE6EB524C<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_F2D8FC1A|alias]].<br />
<br />
<source lang="C">int deflateInit2_(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_F2D8FC1A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xF2D8FC1A<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_F2D8FC1A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
== SceKernelSuspendForDriver ==<br />
<br />
Used to register handlers for handling suspend/resume related events.<br />
<br />
=== sceKernelLockSuspendForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4DF40893<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just before starting a process.<br />
<br />
Called just before NVS write.<br />
<br />
<source lang="C">int sceKernelLockSuspendForDriver(SceUInt32 a1);</source><br />
<br />
=== sceKernelUnlockSuspendForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2BB92967<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just after starting a process.<br />
<br />
Called just after NVS write.<br />
<br />
<source lang="C">int sceKernelUnlockSuspendForDriver(SceUInt32 a1);</source><br />
<br />
=== sceKernelLockSuspendProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x254525F8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceKernelPowerLockForDriver.<br />
<br />
Used in [[SceProcessmgr#sceKernelPowerLock]].<br />
<br />
<source lang="C">int sceKernelPowerLockForDriver(SceUInt32 a1);</source><br />
<br />
=== sceKernelUnlockSuspendProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x230495ED<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceKernelPowerUnlockForDriver.<br />
<br />
Used in [[SceProcessmgr#sceKernelPowerUnlock]].<br />
<br />
<source lang="C">int sceKernelPowerUnlockForDriver(SceUInt32 a1);</source><br />
<br />
=== SceKernelSuspendForDriver_FE2118BD ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xFE2118BD<br />
|}<br />
<br />
=== sceKernelPowerSetIdleCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE677B343<br />
|}<br />
<br />
This is guessed name.<br />
<br />
=== SceKernelSuspendForDriver_B4B13615 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xB4B13615<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_AEA9440D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xAEA9440D<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_81D9E41C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x81D9E41C<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_6A503956 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x6A503956<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_250ACD90 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x250ACD90<br />
|}<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_250ACD90(const SceKernelSuspendPowerCallback *pPowerCallback);</source><br />
<br />
=== SceKernelSuspendForDriver_0A6CA124 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x0A6CA124<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_0106C0F0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x0106C0F0<br />
|}<br />
<br />
=== sceKernelRegisterSysEventHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x04C05D10<br />
|}<br />
<br />
Temp name was sceKernelSuspendRegisterCallbackForDriver.<br />
<br />
Registers a function for handling suspend/resume. <code>resume</code> is 0 if we are currently suspending and 1 if we are currently resuming. <code>opt</code> is passed from the registration. Registration adds an entry to a linked list and returns the block id for the new entry.<br />
<br />
Returns the suspend_handler_id.<br />
<br />
<source lang="C"><br />
typedef int (* SceKernelSysEventHandler)(int resume, int event, void *param, void *argp);<br />
<br />
SceUID sceKernelRegisterSysEventHandlerForDriver(const char *name, SceKernelSysEventHandler handler, void *argp);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_CE7A2207 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xCE7A2207<br />
|}<br />
<br />
Registers a handler for a suspend event.<br />
<br />
<source lang="c"><br />
// idx: ex: 0x15<br />
// args: can be 0<br />
SceUID SceKernelSuspendForDriver_CE7A2207(SceUInt idx, void *handler, void *args);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_105C5752 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x105C5752<br />
|}<br />
<br />
Registers a handler for a resume event.<br />
<br />
<source lang="c"><br />
// idx: ex: 0x15<br />
// args: can be 0<br />
SceUID SceKernelSuspendForDriver_105C5752(SceUInt idx, void *handler, void *args);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_D4958E6F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xD4958E6F<br />
|}<br />
<br />
Dispatch handler registered by [[#SceKernelSuspendForDriver_CE7A2207]].<br />
<br />
<source lang="c">SceUID SceKernelSuspendForDriver_D4958E6F(void *args);</source><br />
<br />
=== sceKernelUnregisterSysEventHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xDD61D621<br />
|}<br />
<br />
Call with the id returned from <code>suspend_register_handler</code> to remove the entry from the linked list and free the memory.<br />
<br />
<source lang="c">int sceKernelUnregisterSysEventHandlerForDriver(SceUID id);</source><br />
<br />
=== sceKernelSysEventDispatchForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xD4622EA8<br />
|}<br />
<br />
This function goes through the linked list and calls each handler. If <code>ppFailed</code> is set, then the first handler that returns a negative value stops the call chain and returns the block id of the handler that broke the chain. Otherwise, this function invokes each handler and returns 0.<br />
<br />
<source lang="C"><br />
typedef struct _SceKernelSysEventDispatchSuspendParam {<br />
SceSize size;<br />
SceUInt32 unk_0x04;<br />
SceUInt32 unk_0x08;<br />
SceUInt32 unk_0x0C;<br />
void *pSuspendContextBuffer;<br />
SceUInt32 unk_0x14;<br />
} SceKernelSysEventDispatchSuspendParam;<br />
<br />
typedef struct _SceKernelSysEventDispatchResumeParam {<br />
SceSize size;<br />
SceUInt32 unk_0x04;<br />
} SceKernelSysEventDispatchResumeParam;<br />
<br />
int sceKernelSysEventDispatchForDriver(SceUInt32 resume, SceUInt32 eventid, void *param, void **ppFailed);<br />
</source><br />
<br />
=== sceKernelPowerTickForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE0489831<br />
|}<br />
<br />
Cancel specified idle timers to prevent entering in power save processing.<br />
<br />
Returns 0 on success.<br />
<br />
<source lang="c"><br />
typedef enum SceKernelPowerTickType {<br />
/** Cancel all timers */<br />
SCE_KERNEL_POWER_TICK_DEFAULT = 0,<br />
/** Cancel automatic suspension timer */<br />
SCE_KERNEL_POWER_TICK_DISABLE_AUTO_SUSPEND = 1,<br />
/** Cancel OLED-off timer */<br />
SCE_KERNEL_POWER_TICK_DISABLE_OLED_OFF = 4,<br />
/** Cancel OLED dimming timer */<br />
SCE_KERNEL_POWER_TICK_DISABLE_OLED_DIMMING = 6<br />
} SceKernelPowerTickType;<br />
<br />
int sceKernelPowerTickForDriver(int type);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_1FA2F8F1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x1FA2F8F1<br />
|}<br />
<br />
Calls a power handler.<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_1FA2F8F1(int a1, int a2);</source><br />
<br />
=== SceKernelSuspendForDriver_F2B07167 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xF2B07167<br />
|}<br />
<br />
Registers a global variable used by [[#sceKernelPowerTickForDriver]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_F2B07167(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_B5C58EE8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xB5C58EE8<br />
|}<br />
<br />
Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_B5C58EE8(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_D6124071 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xD6124071<br />
|}<br />
<br />
Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_D6124071(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_0DE3CC02 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0x0DE3CC02<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_2BB92967]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_0DE3CC02(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_4E5A3A23 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0x4E5A3A23<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_4E5A3A23(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_C00826AC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xC00826AC<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_C00826AC(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_8B3F02B8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0x8B3F02B8<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_1FA2F8F1]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_8B3F02B8(int a1);</source><br />
<br />
== SceQafMgrForDriver ==<br />
<br />
Provides many device permission checks including running app privilege checks, debugging enabled checks, and so on.<br />
<br />
=== SceQafMgrForDriver_41E04800 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4F20A014<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== SceQafMgrForDriver_082A4FC2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x082A4FC2<br />
|}<br />
<br />
Temp name was sceSblQafMgrIsAllowHost0AccessForDriver. A potential name could be sceSblQafMgrIsAllowRemoteLoadForDriver.<br />
<br />
Used by [[SceSblFwLoader#sceSblFwLoaderLockForDriver|sceSblFwLoaderLockForDriver]], [[SceKernelModulemgr]], [[SceSysStateMgr]] and [[SceSblPostSsMgr]].<br />
<br />
Used by [[SceSblPostSsMgr#sceSblSpsfoMgrOpenForDriver|sceSblSpsfoMgrOpenForDriver]].<br />
<br />
When this flag is set, it allows for example to load some files from host0:, for example SPSFO and psp2config.skprx.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xE) & 1)<br />
int SceQafMgrForDriver_082A4FC2(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowGameDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x694D1096<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only used by [[SceSblACMgr]].<br />
<br />
Might be something like sceSblQafMgrIsAllowUserAppDebug.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xB) & 4)<br />
int sceSblQafMgrIsAllowGameDebugForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_0E588747 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x0E588747<br />
|}<br />
<br />
Only used by [[SceRegistryMgr]].<br />
<br />
Returns true if the PSVita is an "Internal system".<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int SceQafMgrForDriver_0E588747(void);<br />
</source><br />
<br />
=== SceSblQafMgrForDriver_4BC1883F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x4BC1883F<br />
|}<br />
<br />
Like a sceSblQafMgrIsAllowPSPEmuDevelopmentForDriver.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int SceSblQafMgrForDriver_4BC1883F(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowSystemAppDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xCAD47130<br />
|}<br />
<br />
Used by [[SceDeci4pDtracep]] and [[SceSblACMgr]].<br />
<br />
If it returns false, syscalls debug trace printf is disabled.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int sceSblQafMgrIsAllowSystemAppDebugForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowKernelDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x382C71E8<br />
|}<br />
<br />
Used by [[SceKernelModulemgr]], [[SceExcpmgr]], [[SceCrashDump]], [[SceHdmi]], [[SceKernelBlueScreenOfDeath]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 1)<br />
int sceSblQafMgrIsAllowKernelDebugForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowQAUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x3CB55F98<br />
|}<br />
<br />
Only used by [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int sceSblQafMgrIsAllowQAUpdateForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowForceUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8C423C18<br />
|}<br />
<br />
Only used by [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 2)<br />
int sceSblQafMgrIsAllowForceUpdateForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_52B4E164 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x52B4E164<br />
|}<br />
<br />
Only used by [[SceWlanBt]] and [[SceEnumWakeUp]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 1)<br />
int SceQafMgrForDriver_52B4E164(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_883E9465 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x883E9465<br />
|}<br />
<br />
Temp name was sceSblQafMgrIsAllowDecryptedBootConfigLoadForDriver.<br />
<br />
Used by [[SceSysStateMgr]] only.<br />
<br />
Allows loading psp2config.skprx as plaintext format.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xE) & 1)<br />
int SceQafMgrForDriver_883E9465(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_B9770A13 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xB9770A13<br />
|}<br />
<br />
Needed to be enabled to work with DIPSW 251 (Enable "dummytty0:"). Needed by [[SceSysStateMgr]] to allow loading <code>host0:psp2config.rpath</code>.<br />
<br />
Used by [[SceKernelModulemgr]] and [[SceSysmodule]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int SceQafMgrForDriver_B9770A13(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowRemotePlayDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBFD5E463<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xC) & 2)<br />
int sceSblQafMgrIsAllowRemotePlayDebugForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_E573F124 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xE573F124<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x0) & 0x10)<br />
int SceQafMgrForDriver_E573F124(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowMarlinTestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.03-3.60 || 0x10283EB8<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int sceSblQafMgrIsAllowMarlinTestForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowNearTestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.03-3.60 || 0x9644171D<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int sceSblQafMgrIsAllowNearTestForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_AE033133 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAE033133<br />
|}<br />
<br />
Only used by [[SceNpDrm]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x0) & 0x10)<br />
int SceQafMgrForDriver_AE033133(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_DEC6DF4E ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDEC6DF4E<br />
|}<br />
<br />
Only used by [[SceNpDrm]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int SceQafMgrForDriver_DEC6DF4E(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB7B195B2<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowLoadMagicGateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x36E5312E<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xB) & 0x10)<br />
int sceSblQafMgrIsAllowLoadMagicGateForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowDtcpIpResetForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE8B8F31F<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int sceSblQafMgrIsAllowDtcpIpResetForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowControlIduAutoUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF8BFEE48<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int sceSblQafMgrIsAllowControlIduAutoUpdateForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowKeepCoreFileForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC1EA75C8<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int sceSblQafMgrIsAllowKeepCoreFileForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_70A67A4B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x70A67A4B<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int SceQafMgrForDriver_70A67A4B(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_41E04800 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x41E04800<br />
|}<br />
<br />
Only used by [[SceAppMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xB) & 4)<br />
int SceQafMgrForDriver_41E04800(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_7B14DC45 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7B14DC45<br />
|}<br />
<br />
Only used by [[SceAppMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int SceQafMgrForDriver_7B14DC45(void);<br />
</source><br />
<br />
== ScePmMgrForDriver ==<br />
<br />
=== scePmMgrGetProductModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2AC815A2<br />
|}<br />
<br />
Returns 0 on success, 0x800f0a29 on failure.<br />
<br />
Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].<br />
<br />
result = ((int *)(kbl_param->boot_type_indicator_1) >> 2) & 1; // manufacturing mode flag<br />
<br />
<source lang="C">int scePmMgrGetProductModeForDriver(char* result);</source><br />
<br />
=== scePmMgrIsExternalBootModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBD1F193B<br />
|}<br />
<br />
Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].<br />
<br />
return (int *)(kbl_param->boot_type_indicator_1) & 1; // external boot mode flag<br />
<br />
<source lang="C">int scePmMgrIsExternalBootModeForDriver(void);</source><br />
<br />
== SceSblAIMgrForDriver ==<br />
<br />
=== sceSblAIMgrGetSMIForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x47D9CF13<br />
|}<br />
<br />
SMI means Service / Manufacturing Information.<br />
<br />
SMI is read from SceKblParam->min_fw_version.<br />
<br />
<source lang="C">int sceSblAIMgrGetSMIForDriver(SceUInt32 *pSMI);</source><br />
<br />
=== sceSblAIMgrGetProductCodeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x14345161<br />
|}<br />
<br />
Temp name was sceSblAIMgrGetTargetIdForDriver.<br />
<br />
Product Code = Target Id<br />
<br />
<source lang="C">int sceSblAIMgrGetProductCodeForDriver(void);</source><br />
<br />
=== sceSblAIMgrGetProductSubCodeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB33CEC8F<br />
|}<br />
<br />
Product Sub Code = model revision<br />
<br />
<source lang="C">int sceSblAIMgrGetProductSubCodeForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsTestForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3B638885<br />
|}<br />
<br />
TEST = Internal Test Unit<br />
<br />
Returns true if PsCode Product Code == 0x100.<br />
<br />
<source lang="C">int sceSblAIMgrIsTestForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x274663A0<br />
|}<br />
<br />
TOOL = DevKit<br />
<br />
Returns true if PsCode Product Code == 0x101.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsDEXForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF4B98F66<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x102.<br />
<br />
<source lang="C">int sceSblAIMgrIsDEXForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsCEXForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD78B04A2<br />
|}<br />
<br />
Returns true if PsCode Product Code 0x103-0x111 AND sceSblAIMgrIsSpecialCEXForDriver returns false.<br />
<br />
<source lang="C">int sceSblAIMgrIsCEXForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsVITAForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4273B97B<br />
|}<br />
<br />
Returns sceSblAIMgrIsGenuineVITAForDriver. If the console is a PS TV, it returns false.<br />
<br />
<source lang="C">int sceSblAIMgrIsVITAForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsDolceForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x71608CA3<br />
|}<br />
<br />
Returns sceSblAIMgrIsGenuineDolceForDriver if returns true else returns sceKernelCheckDipswForDriver(0x98).<br />
<br />
<source lang="C">int sceSblAIMgrIsDolceForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsGenuineVITAForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x963CA644<br />
|}<br />
<br />
Returns true if:<br />
*PsCode Product Code <= 0x111 AND sceSblAIMgrIsGenuineDolceForDriver returns false<br />
*sceSblAIMgrIsSpecialCEXForDriver returns true AND HardwareInfo != 0x700000 != 0x720000 != 0x510000<br />
<br />
<source lang="C">int sceSblAIMgrIsGenuineVITAForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsGenuineDolceForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC6E83F34<br />
|}<br />
<br />
<source lang="C">int sceSblAIMgrIsGenuineDolceForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsDiagForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6D5A3FC9<br />
|}<br />
<br />
Temp name was sceSblAIMgrIsSpecialCEXForDriver, sceSblAIMgrIsCEXJpFatForDriver.<br />
<br />
Returns true if PsCode Product Code == 0x103 (Japan), PsCode Product Sub Code == 0x10 (FAT chassis) and PsCode Factory Code == 0x24 (SCE labs).<br />
<br />
<source lang="C">int sceSblAIMgrIsDiagForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolDVT1ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBB9D146B<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 3.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolDVT1ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolRev4ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x37A79140<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 4.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolRev4ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolDVT2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE5E47FF7<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 5.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolDVT2ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsCEXPrototypeRev2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFF5784B9<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 2.<br />
<br />
<source lang="C">int sceSblAIMgrIsCEXPrototypeRev2ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsCEXPrototypeRev7ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x05F79D4A<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 7.<br />
<br />
<source lang="C">int sceSblAIMgrIsCEXPrototypeRev7ForDriver(void);</source><br />
<br />
== SceProcEventForDriver ==<br />
<br />
=== sceKernelUnregisterProcEventHandlerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3DED57CC<br />
|}<br />
<br />
Temp name was sceProcEventDeleteUidForDriver.<br />
<br />
Wrapper to [[SceSysmem#sceGUIDCloseForDriver|sceGUIDCloseForDriver]].<br />
<br />
<source lang="C">int sceKernelUnregisterProcEventHandlerForDriver(int uid);</source><br />
<br />
=== sceKernelRegisterProcEventHandlerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2A43912D<br />
|}<br />
<br />
Temp name was sceProcEventCreateEventForDriver.<br />
<br />
Uses [[SceSysmem#sceKernelCreateEventForDriver|sceKernelCreateEventForDriver]].<br />
<br />
Returns uid.<br />
<br />
<source lang="C"><br />
typedef struct SceProcEventInvokeParam1 {<br />
SceSize size; // SceProcEventInvokeParam1 struct size : 0x10<br />
int unk_0x04;<br />
int unk_0x08;<br />
int unk_0x0C;<br />
} SceProcEventInvokeParam1;<br />
<br />
typedef struct SceProcEventInvokeParam2 {<br />
SceSize size; // SceProcEventInvokeParam2 struct size : 0x14<br />
SceUID pid;<br />
int unk_0x08;<br />
int unk_0x0C;<br />
int unk_0x10;<br />
} SceProcEventInvokeParam2;<br />
<br />
typedef struct SceProcEventHandler {<br />
SceSize size; // SceProcEventHandler struct size : 0x1C<br />
int (* create)(SceUID pid, SceProcEventInvokeParam2 *pParam, void *pCommon);<br />
int (* exit)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon); // current process exit<br />
int (* kill)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon); // by SceShell<br />
int (* suspend)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);<br />
int (* resume)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);<br />
int (* event_notify)(int evtype, int phase, SceProcEventInvokeParam2 *pParam, void *pCommon); //for arbitrary event types<br />
} SceProcEventHandler;<br />
<br />
/***<br />
* Registers a process event handler<br />
*<br />
* @param[in] name - Name of the event handler<br />
* @param[in] pHandler - Pointer to the handler structure<br />
* @param[in] pCommon - Arbitrary data passed to handlers<br />
*<br />
* @return Positive on success, < 0 on error.<br />
* @note Event handler pointers in pHandler may be NULL.<br />
*/<br />
SceUID sceKernelRegisterProcEventHandlerForDriver(const char *name, SceProcEventHandler *pHandler, void *pCommon);<br />
</source><br />
<br />
=== sceKernelInvokeProcEventHandlerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x414CC813<br />
|}<br />
<br />
Walks the list of registered process event handlers and invokes the ones related to the signaled event.<br />
<br />
<source lang="C"><br />
//Event type constants (for evtype parameter)<br />
#define CREATE_EVENT 1 //<! Call create() handlers<br />
#define EXIT_EVENT 2 //<! Call exit() handlers<br />
#define KILL_EVENT 3 //<! Call kill() handlers<br />
#define SUSPEND_EVENT 4 //<! Call suspend() handlers<br />
#define RESUME_EVENT 5 //<! Call resume() handlers<br />
//All other values result in event_notify() handlers being called<br />
<br />
/***<br />
* Invoke process event handlers<br />
*<br />
* @param[in] process - PID of the process for which event happened<br />
* @param[in] evtype - Event type<br />
* @param[in] phase - Unknown<br />
* @param[in] pParam - Pointer to handler parameter<br />
* @param[out] pFailer - Pointer to a variable that receives UID of a failing handler. May be NULL.<br />
* @param[in] stop - GUID of a handler that should stop execution<br />
*<br />
* @return Positive number on success, < 0 on error. <br />
* Corresponds to the last executed handler's return value (or SCE_OK if none were executed).<br />
*<br />
* @note process, pFailer and stop are unofficial argument names<br />
*<br />
* Invocation is performed by walking the list in order (from first to last registered handler):<br />
* - If the GUID of the handler matches the "stop" parameter, the handle is NOT executed and the function returns.<br />
* This can be used to ensure only process event handlers registered before a specific one are executed.<br />
* - If the handler has no function pointer corresponding to the evtype, execution continues with the next handler.<br />
* - If the handler has a function pointer corresponding to the evtype, the function is called with the appropriate<br />
* arguments. If the return value is positive, execution continues with the next handler. If the return value is<br />
* negative, the handler has failed, the GUID of the failing handler is saved in *pFailer if non-NULL and the function<br />
* returns directly.<br />
*/<br />
int sceKernelInvokeProcEventHandlerForDriver(ScePID pid, int evtype, int phase, void* pParam, SceUID *pFailer, SceUID stop);<br />
</source><br />
<br />
== SceDebugLed ==<br />
<br />
=== sceKernelGetGPI ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x14F582CF<br />
|}<br />
<br />
<source lang="C">int sceKernelGetGPI(void);</source><br />
<br />
=== sceKernelSetGPO ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78E702D3<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Output to LED<br />
*<br />
* This sets the content displayed on the DevKit LED.<br />
* @param[in] uiBitd Bit pattern. only low-order 8 bits are valid.<br />
*/<br />
int sceKernelSetGPO(SceUInt32 uiBits);<br />
</source><br />
<br />
=== call_cb74 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2B6EABAD<br />
|}<br />
<br />
<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source><br />
<br />
=== call_cb78 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0E6B9890<br />
|}<br />
<br />
<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source><br />
<br />
== SceDebugLedForDriver ==<br />
<br />
GPI stands for General Purpose Input, and GPO stands for General Purpose Output.<br />
<br />
=== sceKernelGetGPIForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x14F582CF<br />
|}<br />
<br />
Only SceDebugLedForDriver function used by SceCoredump.<br />
<br />
<source lang="C">int sceKernelGetGPIForDriver(void);</source><br />
<br />
=== sceKernelSetGPIForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x51C5325A<br />
|}<br />
<br />
<source lang="C">int sceKernelSetGPIForDriver(int value);</source><br />
<br />
=== sceKernelGetGPOForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3BB289F7<br />
|}<br />
<br />
<source lang="C">int sceKernelGetGPOForDriver(void);</source><br />
<br />
=== sceKernelSetGPOForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78E702D3<br />
|}<br />
<br />
<source lang="C">int sceKernelSetGPOForDriver(SceUInt32 uiBits);</source><br />
<br />
=== sceKernelSetGPOMaskForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x098473B0<br />
|}<br />
<br />
<source lang="C">sceKernelSetGPOMaskForDriver(int a1, int a2);</source><br />
<br />
=== call_cb74 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2B6EABAD<br />
|}<br />
<br />
<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source><br />
<br />
=== set_cb74 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x24173819<br />
|}<br />
<br />
<source lang="C">int set_cb74(void *cb);</source><br />
<br />
=== call_cb78 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0E6B9890<br />
|}<br />
<br />
<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source><br />
<br />
=== set_cb78 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF62154E7<br />
|}<br />
<br />
<source lang="C">int set_cb78(void *cb);</source><br />
<br />
== SceDebugForKernel ==<br />
<br />
=== sceKernelDebugModuleStart2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF624CE22<br />
|}<br />
<br />
<source lang="C">int sceKernelDebugModuleStart2ForKernel(void);</source><br />
<br />
=== sceKernelRegisterKprintfHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x10067B7B<br />
|}<br />
<br />
Temp name was sceDebugSetHandlersForKernel.<br />
<br />
<source lang="c">int sceKernelRegisterKprintfHandlerForKernel(int (* handler)(int unk, const char *format, va_list args), void *argp);</source><br />
<br />
=== sceKernelGetDebugPutcharHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE783518C<br />
|}<br />
<br />
This is guessed name.<br />
<br />
Temp name was sceDebugGetPutcharHandlerForKernel, sceKernelGetDebugPutcharForKernel.<br />
<br />
Returns pointer to current debug putchar handler.<br />
<br />
<source lang="c">void *sceKernelGetDebugPutcharHandlerForKernel(void);</source><br />
<br />
=== sceKernelRegisterDebugPutcharHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE6115A72<br />
|}<br />
<br />
Temp name was sceDebugRegisterPutcharHandlerForKernel, sceKernelRegisterDebugPutcharForKernel.<br />
<br />
Set debug print char handler.<br />
<br />
<source lang="c">int sceKernelRegisterDebugPutcharHandlerForKernel(int (* handler)(void *args, char c), void *args);</source><br />
<br />
=== sceKernelDebugPutcharForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x82D2EDCE<br />
|}<br />
<br />
Temp name was sceDebugPutcharForKernel.<br />
<br />
Print character to uart.<br />
<br />
Return 1.<br />
<br />
<source lang="c">int sceKernelDebugPutcharForKernel(char c);</source><br />
<br />
=== sceKernelTtyPutcharForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x254A4997<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Prints a character to the 0x1000-byte buffer returned by [[SceSysmem#sceKernelGetTtyInfoForDriver]].<br />
<br />
On success, returns printed size (always 1).<br />
<br />
<source lang="c">int sceKernelTtyPutcharForKernel(char c);</source><br />
<br />
=== sceKernelStoppedForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xF1F0C365<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStoppedForKernel(const char *pFile, const char *pFunc, int line);</source><br />
<br />
=== panic_on_kernel_exception ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x082B8D6A<br />
|-<br />
| 3.65 || 0xCCABDD98<br />
|}<br />
<br />
Prints information about a Kernel Exception, ?and certainly calls [[SceCoredump]]?, then calls SceSysrootForKernel_0DF574A9 in an infinite loop.<br />
<br />
This function doesn't return.<br />
<br />
See [[SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel]] for the meaning of excpcode.<br />
<br />
<source lang="C"><br />
// excp_name can be:<br />
// UNDEF - Undefined instruction<br />
// PABT - Prefetch Abort<br />
// DABT - Data Abort<br />
// NEST - Nested? Same excpcode as UNDEF<br />
void panic_on_kernel_exception(SceKernelDebugInfo *dbginfo, SceExcpmgrExceptionContext *excp_ctx, int excpcode, const char *excp_name);<br />
</source><br />
<br />
=== register_unk_handler ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x66D82EC8<br />
|}<br />
<br />
used by [[SceDeci4pSDbgp]].<br />
<br />
handler definition:<br />
<source lang="C">handler(int some_level, void *unk, const void *buf);</source><br />
<br />
<source lang="C">int register_unk_handler(void *handler);</source><br />
<br />
=== sceKernelEnableCrashDumpForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.610.011 || 0xF857CDD6<br />
|-<br />
| 3.630.011-3.740.011 || 0xA465A31A<br />
|}<br />
<br />
This is a guessed name. Temp name was sceDebugDisableInfoDumpForKernel, sceKernelEnableInfoDumpForKernel.<br />
<br />
Returns previous crash dump state.<br />
<br />
<source lang="C">int sceKernelEnableCrashDumpForKernel(SceBool enable);</source><br />
<br />
=== register_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4703ECC4<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source><br />
<br />
=== start_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4C377B11<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Returns 1 if logging has been started successfully, -1 else.<br />
<br />
<source lang="C">int start_logging(int state);</source><br />
<br />
=== stop_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x604F56AE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
If state is not zero, stops logging and return 1, else does nothing and return 0.<br />
<br />
Returns 1 if logging has been stopped, 0 else.<br />
<br />
<source lang="C">int stop_logging(void);</source><br />
<br />
=== refresh_logs ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x04A3046D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int refresh_logs(void);</source><br />
<br />
=== _sceKernelPrintDebugLogForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xEFDE973B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
If a2 is not zero, the current log buffer address is updated, else it is unchanged.<br />
<br />
maxNum is guessed to be either the number of entries or the index of the chosen entry. Entry size is 0x40 bytes.<br />
<br />
Uses sceKernelPrintfLevelForDriver to print.<br />
<br />
<source lang="C">int _sceKernelPrintDebugLogForKernel(int a1, int a2, int maxNum);</source><br />
<br />
=== sceKernelPrintDebugLogForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xBD5D0BB0<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls _sceKernelPrintDebugLogForKernel with maxNum = (log_buf_end - log_buf_start) / 0x40.<br />
<br />
<source lang="C">int sceKernelPrintDebugLogForKernel(int a1, int a2);</source><br />
<br />
=== print_with_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x904FF72D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int print_with_log_buffer(const char *string, SceSize maxlen);</source><br />
<br />
=== sceKernelPrintfCore0ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x2D7380FE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Same as sceKernelPrintfForDriver but only prints if CPU ID is 0.<br />
<br />
<source lang="C">int sceKernelPrintfCore0ForKernel(const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfLevelCore0ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x14241F51<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Same as sceKernelPrintfLevelForDriver but only prints if CPU ID is 0.<br />
<br />
<source lang="C">int sceKernelPrintfLevelCore0ForKernel(int level, const char *fmt, ...);</source><br />
<br />
=== sceKernelSetDebugLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBE2C05A2<br />
|}<br />
<br />
Temp name was sceKernelSetMinimumLogLevelForKernel.<br />
<br />
<source lang="C">SceUInt32 sceKernelSetDebugLevelForKernel(SceUInt32 dbgLevel);</source><br />
<br />
=== sceKernelGetDebugLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xDA6B6770<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelGetMinimumLogLevelForKernel.<br />
<br />
Returns the dbgLevel set by sceKernelSetDebugLevelForKernel.<br />
<br />
<source lang="C">SceUInt32 sceKernelGetDebugLevelForKernel(void);</source><br />
<br />
=== sceKernelSetAssertLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xCE9060F1<br />
|}<br />
<br />
Temp name was sceKernelSetMinimumAssertionLevelForKernel.<br />
<br />
Overrides in memory g_assertLevel set by DIP switches 201 and 202.<br />
<br />
Returns the previous assert level.<br />
<br />
<source lang="C">SceInt32 sceKernelSetAssertLevelForKernel(SceUInt32 assertLevel);</source><br />
<br />
=== sceKernelGetAssertLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x374B7868<br />
|-<br />
| 0.990-3.60 || not present. Present in [[#SceDebugForDriver]].<br />
|}<br />
<br />
Temp name was sceKernelGetMinimumAssertionLevelForKernel.<br />
<br />
Returns g_assertLevel from memory.<br />
<br />
<source lang="C">SceInt32 sceKernelGetAssertLevelForKernel(void);</source><br />
<br />
=== SceDebugForKernel_BEF921A2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60-3.61 || 0xBEF921A2<br />
|-<br />
| 3.63 || 0x5D6F0CFC<br />
|}<br />
<br />
<source lang="C"><br />
// buf size is 0x1000 bytes<br />
// buf_400 size is 0x400 bytes<br />
SceSSize SceDebugForKernel_BEF921A2(void *dst, int cpuId, SceUInt64 time, SceKernelDebugInfo *dbginfo, const void *excp_info_buf_0x400, int excpcode);<br />
</source><br />
<br />
=== add_entry ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x1208240D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// ex: add_entry(0xA1, in_lr, 3, name); in SceSysmem<br />
// ex: add_entry(0xAB, in_lr, 1, uid); in SceSysmem<br />
// ex: add_entry(0xBB, in_lr, 0, param_4); in SceProcessmgr<br />
int add_entry(SceSize maxlen, int a2, int a3, void *log_buffer_start);<br />
</source><br />
<br />
=== add_entry2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x061A4657<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source><br />
<br />
=== sceDebugRegisterBacktraceInternalForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.610.011 || 0xEFF9962B<br />
|-<br />
| 3.630.011-3.740.011 || 0x91E7D24F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a callback for [[SceKernelModulemgr#sceKernelBacktraceInternalForDriver]].<br />
<br />
If callback runs successfully (returns >= 0), value of pNumReturn is used as third argument of PrintBacktrace, else PrintBacktrace is not called at all.<br />
<br />
<source lang="C">int sceDebugRegisterBacktraceInternalForKernel(int (* callback)(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode));</source><br />
<br />
=== sceDebugRegisterPrintBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xB5943011<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a callback for [[SceKernelModulemgr#sceKernelPrintBacktraceForDriver]].<br />
<br />
<source lang="C">int sceDebugRegisterPrintBacktraceForKernel(int (* callback)(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames));</source><br />
<br />
=== sceKernelPrintSyscallFrameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x25E31E18<br />
|-<br />
| 3.65 || 0xBCC8D0B2<br />
|}<br />
<br />
<source lang="C"><br />
// if pSyscallFrame is NULL, it will use the current syscall frame<br />
// pResult is a pointer to a 0x10 bytes buffer and may be NULL<br />
void sceKernelPrintSyscallFrameForKernel(SceUID pid, SceSyscallFrame *pSyscallFrame, SceUInt32 *pResult);<br />
</source><br />
<br />
=== SceDebugForKernel_F1F861CF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.00-3.60 || 0xF1F861CF<br />
|}<br />
<br />
Registers a callback that is called when a crash occur.<br />
<br />
Used by [[SceKernelBlueScreenOfDeath]].<br />
<br />
<source lang="C">int SceDebugForKernel_F1F861CF(void *cb);</source><br />
<br />
=== SceDebugForKernel_1526DD83 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.20 || 0x1526DD83<br />
|}<br />
<br />
Register [[SceSysmem#sceEventLogPutForDriver|sceEventLogPutForDriver]] internal callback.<br />
<br />
== SceDebugForDriver ==<br />
<br />
If AllowKernelDebug QA flag is not set, calls to functions with non-zero SceKernelDebugLevel are ignored.<br />
<br />
=== sceKernelPrintfForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x391B74B7<br />
|}<br />
<br />
Temp name was sceDebugPrintfForDriver.<br />
<br />
<source lang="C">int sceKernelPrintfForDriver(const char *fmt, ...);</source><br />
<br />
=== sceKernelVprintfForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x411C0733<br />
|}<br />
<br />
<source lang="C">int sceKernelVprintfForDriver(const char *fmt, va_list arg);</source><br />
<br />
=== sceKernelPrintfLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1A3F2AA4<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintfLevelForDriver(SceUInt32 level, const char *fmt, ...);</source><br />
<br />
=== sceKernelVprintfLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x611A158B<br />
|}<br />
<br />
<source lang="C">int sceKernelVprintfLevelForDriver(SceUInt32 level, const char *fmt, va_list arg);</source><br />
<br />
=== sceKernelPrintfLevelWithInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xD9703808<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceKernelPrintfLevelWithCtxForDriver.<br />
<br />
<source lang="C">int sceKernelPrintfLevelWithInfoForDriver(SceUInt32 level, int flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfWithInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x02B04343<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceDebugPrintf2ForDriver, sceKernelVprintfLevelWithCtxForDriver.<br />
<br />
<source lang="C">int sceKernelPrintfWithInfoForDriver(SceUInt32 flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);</source><br />
<br />
=== sceKernelAssertForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x35A35322<br />
|}<br />
<br />
Temp name was sceDebugPrintKernelAssertionForDriver.<br />
<br />
Condition 0 can trigger "kernel stopped".<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
// addr is maybe not an argument but the stack pointer got within the function<br />
int sceKernelAssertForDriver(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);<br />
<br />
// 3.60:<br />
int sceKernelAssertForDriver(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelAssertLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFD753E7A<br />
|}<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
int sceKernelAssertLevelForDriver(int level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);<br />
<br />
// 3.60:<br />
int sceKernelAssertLevelForDriver(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelPrintfAssertLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.60 || 0x821A2D59<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceDebugPrintfKernelAssertionForDriver, sceKernelVprintfAssertLevelForDriver.<br />
<br />
<source lang="C"><br />
// 0.990:<br />
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr, const char *fmt, va_list arg);<br />
<br />
// 3.50-3.60:<br />
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *lr, const char *fmt, ...);<br />
</source><br />
<br />
=== sceKernelGetAssertLevelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present. Present in [[#SceDebugForKernel]].<br />
|-<br />
| 0.990-3.60 || 0x374B7868<br />
|}<br />
<br />
Temp name was sceKernelGetMinimumAssertionLevelForDriver.<br />
<br />
Returns g_assertLevel from memory.<br />
<br />
<source lang="C">SceInt32 sceKernelGetAssertLevelForDriver(void);</source><br />
<br />
=== sceKernelPanicForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x391B5B74<br />
|}<br />
<br />
Temp name was sceDebugPrintKernelPanicForDriver.<br />
<br />
<source lang="C">int sceKernelPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr);</source><br />
<br />
=== sceKernelPrintfPanicForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x00CCE39C<br />
|}<br />
<br />
<source lang="C">void sceKernelPrintfPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr, const char *fmt, ...);</source><br />
<br />
=== sceKernelGetDebugTailLogForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x62466B0A<br />
|}<br />
<br />
Temp name was sceKernelGetTtyInfoForDriver.<br />
<br />
Gets tty tail log.<br />
<br />
<source lang="C"><br />
// max bufSize is 0x1000<br />
int sceKernelGetDebugTailLogForDriver(void *pBuf, SceSize bufSize);<br />
</source><br />
<br />
=== _sceEventLogPutForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x95B38C6C<br />
|}<br />
<br />
Derived from [[SceVshBridge#_vshEventLogPut]].<br />
<br />
Calls [[SceSysmem#sceEventLogPutForDriver]] with KERNEL PID and [[SceSysmem#SceSysrootForKernel_D441DC34]] return value as second argument.<br />
<br />
<source lang="C"><br />
// id: 10001 (SceProcessmgr), 20001 (SceWlanBt)<br />
// index: 1, 2, 3, 4, 5 (SceProcessmgr), 1, 2, 3, 4 (SceWlanBt)<br />
// a3: 0 (SceProcessmgr, SceWlanBt)<br />
// bufSize: 0x1C (SceProcessmgr), 4 (SceWlanBt)<br />
// max bufSize is 0x80<br />
int _sceEventLogPutForDriver(int id, int index, int a3, void *pBuf, SceSize bufSize);<br />
</source><br />
<br />
=== sceEventLogPutForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x912CF2BA<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
// max bufSize is 0x80<br />
int sceEventLogPutForDriver(SceUInt32 pid, int a2, int id, int index, int a5, void *pBuf, SceSize bufSize);<br />
</source><br />
<br />
=== sceKernelGetEventLogForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xCC5365D3<br />
|}<br />
<br />
Temp name was sceEventLogGetInfoForDriver.<br />
<br />
Copy by blocks of 0x30 bytes (or maybe 0xC0 bytes).<br />
<br />
<source lang="C"><br />
// max bufSize is 0xC00 (0x40 blocks of size 0x30)<br />
int sceKernelGetEventLogForDriver(SceKernelDebugEventLog *pBuf, SceSize bufSize, SceSize *pReadBlocks);<br />
</source><br />
<br />
== SceSysmemForTZS ==<br />
<br />
=== sceKernelProcModeVAtoPAForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x119B9547<br />
|-<br />
| 0.990-3.73 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelProcModeVAtoPAForTZS(SceUID pid, uint32_t mode, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelAllocPartitionStackMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x69022B7F<br />
|-<br />
| 0.990-3.73 || not present<br />
|}<br />
<br />
=== sceKernelGetPhyPageResetForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x3FEF6B39<br />
|-<br />
| 3.60-3.73 || not present<br />
|}<br />
<br />
=== sceKernelDeleteHeapForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x624454BC<br />
|}<br />
<br />
=== sceKernelCreateHeapForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x56A16D84<br />
|}<br />
<br />
=== sceKernelAllocHeapMemoryWithOptionForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xEA712806<br />
|}<br />
<br />
=== sceKernelAllocHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x473871D8<br />
|}<br />
<br />
=== sceKernelFreeHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x42FB5B12<br />
|}<br />
<br />
=== sceKernelAllocUncacheHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x29DE887D<br />
|}<br />
<br />
=== sceKernelAllocUncacheHeapMemoryWithOptionForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6A3FBAF0<br />
|}<br />
<br />
=== sceKernelFreeUncacheHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2F18E288<br />
|}<br />
<br />
=== sceKernelNameHeapDeleteForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF459D09D<br />
|}<br />
<br />
=== sceKernelNameHeapInsertForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x42AD34AB<br />
|}<br />
<br />
=== sceKernelSetSuspendIntrFuncForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0xB4306D21<br />
|-<br />
| 3.60-3.73 || not present<br />
|}<br />
<br />
=== sceKernelSetResumeIntrFuncForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x418111B0<br />
|-<br />
| 3.60-3.73 || not present<br />
|}<br />
<br />
=== sceKernelAddressSpaceUnmapForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x31273DC7<br />
|}<br />
<br />
=== sceKernelGetMemBlockBaseForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xE1DEDFF4<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Get mapped base address of memory block.<br />
*<br />
* Get base address of memory block.<br />
* @param[in] uid block id<br />
* @param[out] ppBase base address of memory block<br />
* @retval SCE_OK success<br />
* @retval <SCE_OK Error<br />
*/<br />
int sceKernelGetMemBlockBaseForTZS(SceUID uid, void **ppBase);<br />
</source><br />
<br />
=== sceKernelFreeMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x658EACE3<br />
|}<br />
<br />
=== sceKernelAllocMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x402EB970<br />
|}<br />
<br />
<source lang="c"><br />
SceUID sceKernelAllocMemBlockForTZS(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);<br />
</source><br />
<br />
=== sceKernelAllocPartitionMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x0028E26C<br />
|}<br />
<br />
Temp name was sceKernelAllocMemBlockForPidForTZS.<br />
<br />
<source lang="c">SceUID sceKernelAllocPartitionMemBlockForTZS(SceUID pid, const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source><br />
<br />
=== sceKernelVAtoPAForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1DEADF6C<br />
|}<br />
<br />
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>ppPA</code>.<br />
<br />
Returns <0 on error, values >=0 indicate success.<br />
<br />
<source lang="c">int sceKernelVAtoPAForTZS(void *pVA, void **ppPA);</source><br />
<br />
=== sceKernelVARangeToPAVectorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9D43E416<br />
|}<br />
<br />
=== sceKernelCreateAddressSpaceForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x21906368<br />
|-<br />
| 0.990-3.73 || not present<br />
|}<br />
<br />
=== SceSysmemForTZS_038EAEEE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x038EAEEE<br />
|}<br />
<br />
== SceDipswForTZS ==<br />
<br />
=== sceKernelCheckDipswForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xA98FC2FD<br />
|}<br />
<br />
== SceUartForTZS ==<br />
<br />
=== sceUartWriteForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3AFD5E71<br />
|}<br />
<br />
== SceDebugForTZS ==<br />
<br />
=== sceKernelDebugModuleStart2ForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x32E3D4B9<br />
|}<br />
<br />
<source lang="C">int sceKernelDebugModuleStart2ForTZS(void);</source><br />
<br />
=== sceKernelRegisterKprintfHandlerForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x0AD558D5<br />
|}<br />
<br />
<source lang="c">int sceKernelRegisterKprintfHandlerForTZS(int (*kprintf)(const char *fmt, ...), const void *args);</source><br />
<br />
=== sceKernelDebugPutcharForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xD36F27BA<br />
|}<br />
<br />
Print character.<br />
<br />
<source lang="c">int sceKernelDebugPutcharForTZS(char c);</source><br />
<br />
=== sceKernelStoppedForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xCB502FD1<br />
|-<br />
| 1.80 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStoppedForTZS(const char *maybe_pFile, const char *maybe_pFunc, int maybe_line);</source><br />
<br />
=== sceKernelAssertForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2F9B8AA8<br />
|}<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
int sceKernelAssertForTZS(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);<br />
<br />
// 3.60:<br />
int sceKernelAssertForTZS(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelAssertLevelForTZS ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x618F89E6<br />
|}<br />
<br />
<source lang="C"><br />
// 3.60:<br />
int sceKernelAssertLevelForTZS(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelGetAssertLevelForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF851BA4F<br />
|}<br />
<br />
Returns g_assertLevel from memory.<br />
<br />
<source lang="C">SceInt32 sceKernelGetAssertLevelForTZS(void);</source><br />
<br />
=== _sceKernelPrintDebugLogForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4FF6536C<br />
|}<br />
<br />
<source lang="C">int _sceKernelPrintDebugLogForTZS(int a1, int a2, int maxNum);</source><br />
<br />
=== sceKernelPrintDebugLogForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x85BF33E1<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintDebugLogForTZS(int a1, int a2);</source><br />
<br />
=== print_with_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x1FD92289<br />
|}<br />
<br />
<source lang="C">int print_with_log_buffer(const char *msg, SceSize maxlen);</source><br />
<br />
=== sceKernelPrintfForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x1655E0E3<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintfForTZS(const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfLevelForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xC70CBB58<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintfLevelForTZS(int level, const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfCore0ForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x08F8AD70<br />
|}<br />
<br />
Same as sceKernelPrintfForTZS but only prints if CPU ID is 0. <br />
<br />
<source lang="C">int sceKernelPrintfCore0ForTZS(const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfLevelCore0ForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xD4E6A0C0<br />
|}<br />
<br />
Same as sceKernelPrintfLevelForTZS but only prints if CPU ID is 0.<br />
<br />
<source lang="C">int sceKernelPrintfLevelCore0ForTZS(int level, const char *fmt, ...);</source><br />
<br />
=== sceKernelSetMinimumLogLevelForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x898E417E<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Specifies the minimum severity level for the output of logging information.<br />
*<br />
* Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.<br />
*<br />
* @param minimumLogLevel The minimum severity at which debugging messages should be output.<br />
* @retval SCE_OK The operation was completed successfully.<br />
* @retval Negative value Error code<br />
*/<br />
int sceKernelSetMinimumLogLevelForTZS(SceInt32 minimumLogLevel);<br />
</source><br />
<br />
=== register_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xF2A87E96<br />
|}<br />
<br />
<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source><br />
<br />
=== start_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x1FF65E15<br />
|}<br />
<br />
<source lang="C">int start_logging(int state);</source><br />
<br />
=== stop_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x5A35E3E0<br />
|}<br />
<br />
If state is not zero, stops logging and return 1, else does nothing and return 0.<br />
<br />
Returns 1 if logging has been stopped, 0 else.<br />
<br />
<source lang="C">int stop_logging(void);</source><br />
<br />
=== refresh_logs ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x91B41C34<br />
|}<br />
<br />
<source lang="C">int refresh_logs(void);</source><br />
<br />
=== add_entry ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x95E1A80B<br />
|}<br />
<br />
<source lang="C">int add_entry(int a1, int a2, int a3, void *log_buffer_start);</source><br />
<br />
=== add_entry2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x538319EB<br />
|}<br />
<br />
<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source><br />
<br />
=== register_unk_cb ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x3598118B<br />
|}<br />
<br />
The callback has this definition:<br />
<source lang="C"><br />
// unk: 2 or 3<br />
int unk_cb(SceUID pid, void *buf, SceSize size, int *pOut, int unk);<br />
</source><br />
<br />
If unk_cb runs successfully (return >= 0), pOut is used as third argument of unk_cb2, else unk_cb2 is not called at all.<br />
<br />
<source lang="C">int register_unk_cb(void *some_cb);</source><br />
<br />
=== register_unk_cb2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xE844FC5A<br />
|-<br />
| 0.990-3.60 || not present<br />
|}<br />
<br />
The callback has this definition:<br />
<source lang="C">int unk_cb2(SceUID pid, void *buf, int unk);</source><br />
<br />
<source lang="C">int register_unk_cb2(void *some_cb);</source><br />
<br />
=== SceDebugForTZS_563B623D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 1.80-3.60 || 0x563B623D<br />
|}<br />
<br />
=== SceDebugForTZS_0D799DAE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x0D799DAE<br />
|}<br />
<br />
<source lang="C">int SceDebugForTZS_0D799DAE(SceUInt32 msg_type, void *msg_ctx, const char *fmt, va_list arg);</source><br />
<br />
=== SceDebugForTZS_D26EB4BB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xD26EB4BB<br />
|}<br />
<br />
<source lang="C">int SceDebugForTZS_D26EB4BB(SceBool condition, SceUInt32 msg_type, void *msg_ctx, const char *fmt, ...);</source><br />
<br />
== SceCpuForTZS ==<br />
<br />
* 0.931: 0xACA39932: unknown, save context that will be restored with 0xCA74C9A2<br />
* 0.931: 0xCA74C9A2: unknown, restore context saved with 0xACA39932<br />
* 0.931: 0xE0B34336: unknown, same as SceCpuForKernel_9D72DD1B<br />
* 0.931-0.990: 0x40DEC1B6: sceKernelWaitForEvent<br />
* 0.931-0.990: 0xF42F079B: sceKernelSendEvent<br />
* 0.940: 0x1266F962: sceKernelAbort<br />
* 0.931-0.940: 0x98BF47D3: sceKernelGetVmaccessRange<br />
* 0.931: 0x49AD8B60: sceKernelSetFIQModeStack<br />
* 0.931: 0xC2A428F3: sceKernelSetMonModeStack<br />
* 0.931: 0xD9013440: sceKernelSetIRQModeStack<br />
* 0.931: 0xDF17E4A3: sceKernelSetUndModeStack<br />
* 0.931: 0xF832C341: sceKernelSetAbtModeStack<br />
* 0.931: 0xFB1D3114: sceKernelSetSvcModeStack<br />
* 0.931: 0xF6CE21EA: sceKernelPrintCpuMode<br />
* 3.60: 0x31E78A4B: unknown<br />
* 3.60: 0x4FED4BCE: unknown<br />
* 3.60: 0x7548CBCF: unknown<br />
* 3.60: 0xD4E7413D: unknown<br />
<br />
1.80:<br />
NID 0: 0x0A15B41C: sceKernelL1DcacheCleanInvalidateAll<br />
NID 1: 0x17A88E69: sceKernelL1DcacheCleanRange<br />
NID 2: 0x190D96D5: sceKernelDcacheCleanRange<br />
NID 3: 0x2A0A3DC6<br />
NID 4: 0x2B6403F8: on FW 3.60, does nothing and returns -1<br />
NID 5: 0x2FE24445: sceKernelCpuAtomicSet32<br />
NID 6: 0x308D7ABE: sceKernelCpuDcacheInvalidateMVACRange<br />
NID 7: 0x324727D1: sceKernelGetCpsr<br />
NID 8: 0x39FCFCC2: sceKernelDomainTextMemcpy<br />
NID 9: 0x44C423D3: sceKernelCpuId<br />
NID 10: 0x49B11FF8<br />
NID 11: 0x71FD9AB5: sceKernelSpinlockLowLock<br />
NID 12: 0x72CA4F7A: sceKernelGetSpsr<br />
NID 13: 0x75D87321: sceKernelCpuAtomicOrAndGet32<br />
NID 14: 0x7A5373EB: sceKernelDcacheCleanInvalidateRange<br />
NID 15: 0x7CCE9480: sceKernelDcacheCleanInvalidateAll<br />
NID 16: 0x864E3DED<br />
NID 17: 0x9E4C0D0D: on FW 3.60, does nothing and returns -1<br />
NID 18: 0xA5965CBF: sceKernelL1IcacheInvalidateEntireAllCore<br />
NID 19: 0xACF209F3: sceKernelSpinlockLowTrylockCpuSuspendIntr<br />
NID 20: 0xB421FAFD: sceKernelL1IcacheInvalidateRange<br />
NID 21: 0xB8F00FBE: sceKernelSpinlockLowUnlockCpuResumeIntr<br />
NID 22: 0xC4137AED: sceKernelPleFlushRequest<br />
NID 23: 0xCD98416C: sceKernelSpinlockLowUnlock<br />
NID 24: 0xCDD46655: sceKernelDcacheInvalidateRange<br />
NID 25: 0xD67A4356: sceKernelSpinlockLowLockCpuSuspendIntr<br />
NID 26: 0xEFD6F289: sceKernelCpuAtomicCompareAndSet8<br />
<br />
== SceSysclibForTZS ==<br />
<br />
=== __stack_chk_fail ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.80-3.60 || 0xE5457B97<br />
|}<br />
<br />
=== __stack_chk_guard ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBA505B15<br />
|}<br />
<br />
This is a variable.<br />
<br />
=== strncpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x361850BB<br />
|}<br />
<br />
=== memcpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBE3AF2EE<br />
|}<br />
<br />
=== memset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x956DB750<br />
|}<br />
<br />
== SceSysrootForTZS ==<br />
<br />
=== sceKernelSysrootBacktraceForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xF26A5E68<br />
|}<br />
<br />
=== sceKernelSysrootPrintBacktraceForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x463EA380<br />
|}<br />
<br />
=== sceKernelSysrootShowCallerInfoForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x2F3D9414<br />
|}<br />
<br />
=== sceKernelSysrootGetModulePrivateForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xC9DD8EB3<br />
|}<br />
<br />
=== sceKernelSysrootSetModulePrivateForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xEA572BD9<br />
|}<br />
<br />
=== sceKernelSysrootSetSharedMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x45EEB2E0<br />
|}<br />
<br />
=== sceKernelSysrootGetKermitRevisionForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0xDB3DAB76<br />
|}<br />
<br />
=== sceKernelSysrootGetSharedMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1C96096F<br />
|}<br />
<br />
=== sceKernelSysrootCorelockLockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xD653194A<br />
|}<br />
<br />
=== sceKernelSysrootGetVbaseMonitorVectorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xD4E6D8E8<br />
|}<br />
<br />
=== sceKernelSysrootGetKernelMMUContextForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xA8B7DAF9<br />
|}<br />
<br />
=== sceKernelSysrootCorelockUnlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x2F5FD9A8<br />
|}<br />
<br />
=== sceKernelSysrootGetVbaseResetVectorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x2460ADFA<br />
|}<br />
<br />
=== sceKernelIsColdBootForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x0567B4B9<br />
|}<br />
<br />
=== sceKernelIsSecureStateForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0xEFA54B46<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelSysrootGetErnieWakeupFactorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x8E871C6D<br />
|}<br />
<br />
=== sceKernelSysrootGetKblParamForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x29C1049E<br />
|}<br />
<br />
Returns pointer to [[KBL Param]] buffer.<br />
<br />
<source lang="C">void *sceKernelSysrootGetKblParamForTZS(void);</source><br />
<br />
=== sceKernelSysrootAllocForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x1A9E1D28<br />
|}<br />
<br />
<source lang="C">void *sceKernelSysrootAllocForTZS(uint32_t size);</source><br />
<br />
== SceQafMgrForTZS ==<br />
<br />
=== sceSblQafManagerIsAllowKernelDebugForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.80 || 0x54D22D74<br />
|}<br />
<br />
return *(char *)(sceKernelSysrootGetKblParamForTZS() + 0x2D) & 1;<br />
<br />
== ScePmMgrForTZS ==<br />
<br />
=== sceSblPmMgrGetProductModeForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCF554E69<br />
|}<br />
<br />
== SceSblAIMgrForTZS ==<br />
<br />
=== sceSblAIMgrIsCEXForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x536B38F4<br />
|}<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Kermit&diff=21104
Kermit
2024-02-01T00:25:41Z
<p>CelesteBlue: /* Variants */</p>
<hr />
<div>The PS Vita main SoC, nicknamed Kermit, is manufactured by Toshiba. The design is a stacked SoC with the SDRAM found in the same chip as the processor cores. Toshiba details their "[http://www.toshiba-components.com/ASIC/SiP.html Stacked Chip SOC]" on their site.<br />
<br />
More information can be found at [https://web.archive.org/web/20150425204407/http://www.chipworks.com/en/technical-competitive-analysis/resources/blog/sonys-ps-vita-uses-chip-on-chip-sip-3d-but-not-3d/ Chipworks].<br />
<br />
[[File:T9ML7MBG-S.png|thumb|From FCC application 712137]]<br />
According to the internal photos found in the [https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=712137&fcc_id=AK8PCH1101A FCC filings], it appears that an earlier version of the chip is labeled <code>T9ML7MBG-S</code>. This does not appear to be a standard model and is likely custom designed in partnership with Sony Computer Entertainment Japan. It is possible that Sony used [http://www.toshiba-components.com/ASIC/index.html this service] from Toshiba in their design process which is why the prototype demonstrated in the FCC filing shows a Toshiba chip.<br />
<br />
== Variants ==<br />
<br />
There are multiple known variants of Kermit. SoC revision is readable from [[Pervasive#revision0|a ScePervasiveMisc register]].<br />
<br />
The following table is split in two depending on the Kermit version (1.0 or 1.5). <code>X</code> and <code>Y</code> from the <code>ESX.Y</code> column corresponds to the values in the </code>revision0</code> register (<code>0x000000XY</code>).<br />
<br />
{| class="wikitable"<br />
|+ Known Kermit revisions<br />
|-<br />
! Engineering Sample revision !! SoC model number !! Unit model number or motherboard !! Notes<br />
|-<br />
! colspan="4" | Kermit 1.0<br />
|-<br />
| ES1 || ??? || DEM revision before DEM-3000G || CPU is Cortex-A8, GPU is SGX541MP, ?no CDRAM?. Has two minor revisions: ES1.0 and ES1.1.<br />
|-<br />
| ES2 || ??? || DEM-3000G? to DEM-3000H? || CPU is Cortex-A9, GPU is SGX543MP4+. Has only one minor revision: ES2.0. Has 2 banks of LPDDR2.<br />
|-<br />
| ES3 || ??? || ?DEM-3000JEC, some DEM-3000K/J? || Has three minor revisions: ES3.0, ES3.1 and ES3.2. Has 2 or 4 banks of LPDDR2.<br />
|-<br />
| ES4.0 || ??? || ? || Known to exist from strings in a debugging <code>second_loader.bin</code> dated 2011/05/24.<br />
|-<br />
| ?ES4.2? || T9ML7MBG-S || CEM-3000VD1 ([[IRS-002]] (0-845-846-U8MU) 2011-07 (week 30)) || [https://fccid.io/AK8PCH1001A PCH-1001 FCC certification] and [https://fccid.io/AK8PCH1101A PCH-1101 FCC certification] units use this chip.<br />
|-<br />
| ES4.2 || CXD5315GG || [[IRS-002]], [[DOL-1001]] (1-888-648-11, 1-888-648-21), [[DOL-1002]] (1-893-481-11) || '''© 2011''' marking - No Debug Bus hardware. Has 2 banks of 256MiB LPDDR2.<br />
|-<br />
| ES4.2 || CXD5315GG-1 || [[IRT-002]] || '''© 2011''' marking - Has additional hardware on Debug Bus. Has 4 banks of 256MiB LPDDR2 ?1.5GiB LPDDR2?.<br />
|-<br />
! colspan="4" | Kermit 1.5<br />
|-<br />
| ES1.5 || CXD5316GG || [[IRS-1001]], [[USS-1001]], [[DOL-1002]] (1-893-481-21) || '''© 2012''' marking - Unit used for [https://fccid.io/AK8PCH2001 PCH-2001 FCC certification] has this chip. Has 2 banks of 256MiB LPDDR2.<br />
|-<br />
| ES1.5? || CXD5316BGG || [[USS-1002]] || '''© 2014''' marking. Has 1 bank of 512MiB LPDDR2.<br />
|}<br />
<br />
=== Errata ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Erratum code !! Present on !! Fixed on !! Description<br />
|-<br />
| 93 || Kermit ES1 || Kermit ES2 || The SDIO bus must not be set to High Speed due to a silicon bug.<br />
|}<br />
<br />
== Schema ==<br />
<br />
This is for DevKit. Retail and TestKit are different:<br />
* The DevKit carries 1 GiB of LPDDR2 DRAM (usually referred to as the "main memory"). The retail unit and TestKit carry 512 MiB of LPDDR2 DRAM.<br />
<br />
[[File:PSVita custom SoC schema.png]]<br />
<br />
Thanks to information in a debug version of [[SceKernelBusError]], the following bus diagram has been reconstructed:<br />
<br />
[[File:PS Vita Kermit Bus Diagram.png|1000px]]<br />
<br />
== CPU ==<br />
<br />
See [[Main_Processor]].<br />
<br />
== GPU ==<br />
<br />
See [[SGX543]].<br />
<br />
== LPDDR2 DRAM (main memory) ==<br />
<br />
* The retail unit and TestKit carry 512 MiB of LPDDR2 DRAM.<br />
<br />
* The DevKit carries 1 GiB of LPDDR2 DRAM (usually referred to as the "main memory").<br />
<br />
=== Trace Memory ===<br />
<br />
The DevKit mounts 512 MiB of LPDDR2 DRAM for performance analysis.<br />
<br />
This memory is for storing performance measurement data referred by a performance analyzer (Razor for PlayStation®Vita) or runtime libraries.<br />
<br />
== Custom DRAM ==<br />
<br />
The DevKit carries 128 MiB of custom DRAM (usually referred to as the "video memory"). ?Retail/TesKit too?<br />
<br />
== Codec Engine ==<br />
<br />
Codec Engine is a media processor configured with multiple cores. Only the specific processing of the specific libraries is processed through Codec Engine instead of CPU.<br />
<br />
== Other Key Units and Bus Configuration ==<br />
<br />
As other key units, the custom SoC includes the features below:<br />
<br />
* Direct Memory Access Controllers (DMAC)<br />
* AVC Decoder<br />
* A video out interface<br />
* Misc input/outputs interface etc.<br />
<br />
== Pinout ==<br />
<br />
[[File:kermit-bga.png|600px|Source is a [[Media:Kermit_bga.numbers.zip|iWork Numbers file]].]]<br />
<br />
The pinout is mostly reversed from the [http://wololo.net/talk/viewtopic.php?p=402775 PCB delayer] and is based off of PCH-1XXX on the IRS-002 board. It may not include some pins only used in other PS Vita models.<br />
<br />
=== UART ===<br />
<br />
See [[UART Console]] for pinout and [[UART Registers]] for programming.<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CTS0 || D12 || UART0 clear to send<br />
|-<br />
| RTS0 || B12 || UART0 request to send<br />
|-<br />
| TX0 || B10 || UART0 transmit<br />
|-<br />
| RX0 || B11 || UART0 receive<br />
|-<br />
| CTS5 || E17 || UART5 clear to send<br />
|-<br />
| RTS5 || B17 || UART5 request to send<br />
|-<br />
| TX5 || D17 || UART5 transmit<br />
|-<br />
| RX5 || A17 || UART5 receive<br />
|}<br />
<br />
=== USB ===<br />
<br />
See [[EHCI]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| D+ 3G || AD24 || 3G modem USB D+ (host EHCI)<br />
|-<br />
| D- 3G || AD25 || 3G modem USB D (host EHCI)<br />
|-<br />
| D+ Acc || AD27 || Accessory port USB D+ (host EHCI)<br />
|-<br />
| D- Acc || AD28 || Accessory port USB D (host EHCI)<br />
|-<br />
| D+ UDC || AA30 || Multiconnector USB D+ (client, OTG maybe supported)<br />
|-<br />
| D- UDC || AB30 || Multiconnector USB D (client, OTG maybe supported)<br />
|-<br />
| USB VBUS || AA29 || Also goes to SN99057<br />
|}<br />
<br />
=== SDIO ===<br />
<br />
See [[SceSdif]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CLK 0 || AC7 || eMMC clock<br />
|-<br />
| CMD 0 || AB2 || eMMC CMD<br />
|-<br />
| DAT0 0 || AC6 || eMMC DAT0<br />
|-<br />
| DAT1 0 || AD6 || eMMC DAT1<br />
|-<br />
| DAT2 0 || AC5 || eMMC DAT2<br />
|-<br />
| DAT3 0 || AD5 || eMMC DAT3<br />
|-<br />
| DAT4 0 || AC4 || eMMC DAT4<br />
|-<br />
| DAT5 0 || AD4 || eMMC DAT5<br />
|-<br />
| DAT6 0 || AC3 || eMMC DAT6<br />
|-<br />
| DAT7 0 || AD3 || eMMC DAT7<br />
|-<br />
| CLK 1 || AA1 || Gamecard clock<br />
|-<br />
| CMD 1 || V1 || Gamecard CMD<br />
|-<br />
| DAT0 1 || Z1 || Gamecard DAT0<br />
|-<br />
| DAT1 1 || Z2 || Gamecard DAT1<br />
|-<br />
| DAT2 1 || Y1 || Gamecard DAT2<br />
|-<br />
| DAT3 1 || Y2 || Gamecard DAT3<br />
|-<br />
| DAT4 1 || X1 || Gamecard DAT4 (unused)<br />
|-<br />
| DAT5 1 || X2 || Gamecard DAT5 (unused)<br />
|-<br />
| DAT6 1 || W1 || Gamecard DAT6 (unused)<br />
|-<br />
| DAT7 1 || W2 || Gamecard DAT7 (unused)<br />
|-<br />
| CLK 2 || T1 || Wlan/Bt clock<br />
|-<br />
| CMD 2 || Q1 || Wlan/Bt CMD<br />
|-<br />
| DAT0 2 || S1 || Wlan/Bt DAT0<br />
|-<br />
| DAT1 2 || S2 || Wlan/Bt DAT1<br />
|-<br />
| DAT2 2 || R1 || Wlan/Bt DAT2<br />
|-<br />
| DAT3 2 || R2 || Wlan/Bt DAT3<br />
|-<br />
| Vddq || U1 || SDIO voltage regulation<br />
|-<br />
| Vddq || U2 || SDIO voltage regulation<br />
|}<br />
<br />
=== MS ===<br />
<br />
See [[MSIF Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CLK || AD14 || Memorycard CLK<br />
|-<br />
| INS || AD13 || Memorycard insert detect<br />
|-<br />
| BS || AD8 || Memorycard bus state (select bit)<br />
|-<br />
| DAT0 || AC11 || Memorycard DAT0<br />
|-<br />
| DAT1 || AD12 || Memorycard DAT1<br />
|-<br />
| DAT2 || AD11 || Memorycard DAT2<br />
|-<br />
| DAT3 || AC10 || Memorycard DAT3<br />
|}<br />
<br />
=== MIPI DSI ===<br />
<br />
See [[DSI Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| DC+ 0 || F1 || Internal display clock lane<br />
|-<br />
| DC- 0 || E1 || Internal display clock lane<br />
|-<br />
| D0+ 0 || D1 || Internal display data 0 lane<br />
|-<br />
| D0- 0 || C1 || Internal display data 0 lane<br />
|-<br />
| D1+ 0 || H1 || Internal display data 1 lane<br />
|-<br />
| D1- 0 || G1 || Internal display data 1 lane<br />
|}<br />
<br />
=== MIPI CSI ===<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| || AD15 || Front/back camera<br />
|-<br />
| || AD16 || Front/back camera<br />
|-<br />
| || AD17 || Front/back camera<br />
|-<br />
| || AD18 || Front/back camera<br />
|-<br />
| || AD19 || Front/back camera<br />
|-<br />
| || AD20 || Front/back camera<br />
|-<br />
| || AD21 || Front/back camera<br />
|-<br />
| || AD22 || Front/back camera<br />
|}<br />
<br />
=== SPI ===<br />
<br />
[[File:vita-syscon-spi.png|thumb|400px|SPI0 (Syscon) trace. Termination resistor under the shield.]]<br />
<br />
See [[SPI Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CS 0 || AA14 || Syscon SPI chip select<br />
|-<br />
| SCK 0 || Z15 || Syscon SPI clock<br />
|-<br />
| MISO 0 || AA15 || Syscon SPI output<br />
|-<br />
| MOSI 0 || Z14 || Syscon SPI input<br />
|-<br />
| CS 1 || AA12 || Motion (accelerometer IC) SPI chip select<br />
|-<br />
| SCK 1 || Z13 || Motion (accelerometer IC) SPI clock<br />
|-<br />
| MISO 1 || AA13 || Motion (accelerometer IC) SPI output<br />
|-<br />
| MOSI 1 || Z12 || Motion (accelerometer IC) SPI input<br />
|-<br />
| CS 2 || AA10 || P1P40167 clock synthesizer SPI chip select<br />
|-<br />
| SCK 2 || Z11 || P1P40167 clock synthesizer SPI clock<br />
|-<br />
| MISO 2 || AA11 || P1P40167 clock synthesizer SPI output<br />
|-<br />
| MOSI 2 || Z10 || P1P40167 clock synthesizer SPI input<br />
|}<br />
<br />
=== GPIO ===<br />
<br />
See [[GPIO Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| Syscon || D18 || To syscon<br />
|-<br />
| Syscon || E18 || To syscon<br />
|-<br />
| Syscon || E19 || To syscon<br />
|-<br />
| Syscon || A20 || To syscon<br />
|-<br />
| Motion || E25 || To Motion (accelerometer IC)<br />
|-<br />
| Motion || A26 || To Motion (accelerometer IC)<br />
|-<br />
| Camera || E21 || To camera<br />
|-<br />
| Camera || D21 || To camera<br />
|-<br />
| Camera || B21 || To camera<br />
|-<br />
| PS LED || E20 || To transistor gate powering PS button LED<br />
|-<br />
| GC LED || D20 || To LED next to gamecard port<br />
|-<br />
| PMIC || A22 || To PMIC<br />
|-<br />
| PMIC || A25 || To PMIC<br />
|-<br />
| PMIC || B20 || To PMIC<br />
|-<br />
| OLED || A19 || To OLED connector port<br />
|-<br />
| GPIO_80 || A21 || 3G modem pin 23<br />
|-<br />
| GPIO_H2 || B27 || 3G modem pin 11<br />
|-<br />
| VBUS_CTRL || A27 || 3G modem pin 17<br />
|-<br />
| eMMC RST_N || B26 || RST_N of eMMC<br />
|}<br />
<br />
=== I2C ===<br />
<br />
See [[I2C Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| SCL 0 || T4 || I2C0 clock<br />
|-<br />
| SDA 0 || T5 || I2C0 data<br />
|-<br />
| SCL 1 || S4 || I2C1 clock<br />
|-<br />
| SDA 1 || S5 || I2C1 data<br />
|}<br />
<br />
<br />
=== Misc ===<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| pad AC28 || AC26 || Goes to pad with passive, grouped with AC28?<br />
|-<br />
| pad AC26 || AC28 || Goes to pad with passive, grouped with AC26?<br />
|-<br />
| pullup? || AB29 || Goes to a pullup resistor?<br />
|-<br />
| Wlan/Bt || AA9 || Goes to Wlan/Bt SoC<br />
|-<br />
| pad W4 || X4 || Goes to pad, connects with W4<br />
|-<br />
| pad X4 || W4 || Goes to pad, connects with X4<br />
|-<br />
| pullup X27 || W27 || Pullup resistor to X27<br />
|-<br />
| || X29 || Goes near PMIC<br />
|-<br />
| || X30 || Goes near PMIC<br />
|-<br />
| pad M7 || U29 || Connects to M7 with a passive<br />
|-<br />
| rst? || U30 || Goes near PMIC, might be reset<br />
|-<br />
| pad U29 || M7 || Connects to U29 with a passive<br />
|-<br />
| Capacitor || L5 || Goes to a capacitor, voltage regulation?<br />
|-<br />
| Camera || K4 || Goes to camera, camera audio input?<br />
|-<br />
| Audio || K5 || Maybe I2S<br />
|-<br />
| Audio || K7 || Maybe I2S<br />
|-<br />
| Audio || G5 || Maybe I2S<br />
|-<br />
| Audio || B4 || Maybe I2S<br />
|-<br />
| Syscon || B9 || Goes to syscon<br />
|-<br />
| pad D11 || D10 || Connects to D10 through passive<br />
|-<br />
| pad D10 || D11 || Connects to D11 through passive<br />
|-<br />
| pad G30 || G29 || Connects to G30 through passive<br />
|-<br />
| pad G29 || G30 || Connects to G29 through passive<br />
|}<br />
<br />
=== Clocks/Reset ===<br />
<br />
See [[Pervasive]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| 24M || B5 || 24.576MHz, suspected audio related<br />
|-<br />
| 24M || B6 || 24.576MHz, suspected audio related<br />
|-<br />
| 27M || A11 || 27MHz, suspected input to main PLL<br />
|-<br />
| 48M || AC27 || 48MHz, SD controller<br />
|-<br />
| 37M || C30 || 37MHz, suspected main clock<br />
|-<br />
| RST_N || B9 || Held for 20ms on startup by Syscon, 100K pulldown<br />
|}<br />
<br />
=== Power ===<br />
<br />
Different power domains are numbered. Some voltages are unknown.<br />
[[File:vita-caps.png|thumb|400px|Decoupling capacitors for some major power domains are shown.]]<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| VDD09 1 || W9 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W11 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W12 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W13 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W14 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W15 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V11 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V12 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V13 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V14 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V15 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V16 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V17 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V18 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V19 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V20 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V21 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || U10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || T10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || S10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || R10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H16 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H17 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H18 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H19 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H20 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H21 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H22 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || B18 || 0.9V power domain 1<br />
|-<br />
| VDD10 1 || K9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || J9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I10 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I11 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I12 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I13 || 1.0V power domain 1<br />
|-<br />
| VDD10 2 || I14 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I15 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I16 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I17 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I18 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I19 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I20 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I21 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || J22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || K22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || L22 || 1.0V power domain 2<br />
|-<br />
| VDD12 1 || U11 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U12 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U13 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U14 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U15 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U16 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U17 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U18 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U19 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U20 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U21 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || T22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || S22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || R22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || M22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || L22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || K22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J21 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J20 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J19 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J18 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J17 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J16 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J15 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J14 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J13 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J12 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J11 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || K10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || L10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || M10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || N10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || O10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || P10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || Q10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 2 || M9 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || L9 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || Q21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || P21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || O21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || N21 || 1.2V power domain 2<br />
|-<br />
| VDD12 3 || W18 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W19 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W20 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W21 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || Q22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || P22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || O9 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || N9 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H11 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H12 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H13 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H14 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H15 || 1.2V power domain 3<br />
|-<br />
| VDD12 4 || T22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || S22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || R22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || O22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || N22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || M22 || 1.2V power domain 4<br />
|-<br />
| VDD18 1 || Y26 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || Y27 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || N8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || M8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || L8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || K8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || O23 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || N23 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || H9 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || H10 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G15 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G16 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G19 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G20 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G21 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G22 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || W16 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || W17 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || V22 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || U22 || 1.8V power domain 1<br />
|-<br />
| VDD18 2 || AA6 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z6 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || AA17 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z17 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || AA18 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z18 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || V4 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || V5 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || P7 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || O7 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || J23 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || I23 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || H8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || G8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || E8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || D8 || 1.8V power domain 2<br />
|-<br />
| VDD? 1 || AA26 || Unknown power<br />
|-<br />
| VDD? 1 || Z26 || Unknown power<br />
|-<br />
| VDD? 2 || AA25 || Unknown power<br />
|-<br />
| VDD? 2 || Z25 || Unknown power<br />
|-<br />
| VDD? 3 || AA20 || Unknown power<br />
|-<br />
| VDD? 3 || Z20 || Unknown power<br />
|-<br />
| VDD? 4 || AA8 || Unknown power<br />
|-<br />
| VDD? 4 || Z8 || Unknown power<br />
|-<br />
| VDD? 4 || Y4 || Unknown power<br />
|-<br />
| VDD? 4 || Y5 || Unknown power<br />
|-<br />
| VDD? 4 || X27 || Unknown power<br />
|-<br />
| VDD? 5 || E6 || Unknown power<br />
|-<br />
| VDD? 5 || D6 || Unknown power<br />
|-<br />
| VDD? 6 || H7 || Unknown power<br />
|-<br />
| VDD? 6 || G7 || Unknown power<br />
|-<br />
| VDD? 7 || P24 || Unknown power<br />
|-<br />
| VDD? 7 || O24 || Unknown power<br />
|-<br />
| VDD? 8 || T24 || Unknown power<br />
|-<br />
| VDD? 8 || S24 || Unknown power<br />
|-<br />
| VDD? 9 || E26 || Unknown power<br />
|-<br />
| VDD? 9 || E27 || Unknown power<br />
|-<br />
| VDD? 9 || D29 || Unknown power<br />
|-<br />
| VDD? 9 || D30 || Unknown power<br />
|-<br />
| VDD? 9 || C29 || Unknown power<br />
|-<br />
| VDD? 9 || B30 || Unknown power<br />
|-<br />
| VDD? 10 || F26 || Unknown power<br />
|-<br />
| VDD? 10 || F27 || Unknown power<br />
|}<br />
<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Kermit&diff=21103
Kermit
2024-02-01T00:21:34Z
<p>CelesteBlue: /* Variants */</p>
<hr />
<div>The PS Vita main SoC, nicknamed Kermit, is manufactured by Toshiba. The design is a stacked SoC with the SDRAM found in the same chip as the processor cores. Toshiba details their "[http://www.toshiba-components.com/ASIC/SiP.html Stacked Chip SOC]" on their site.<br />
<br />
More information can be found at [https://web.archive.org/web/20150425204407/http://www.chipworks.com/en/technical-competitive-analysis/resources/blog/sonys-ps-vita-uses-chip-on-chip-sip-3d-but-not-3d/ Chipworks].<br />
<br />
[[File:T9ML7MBG-S.png|thumb|From FCC application 712137]]<br />
According to the internal photos found in the [https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=712137&fcc_id=AK8PCH1101A FCC filings], it appears that an earlier version of the chip is labeled <code>T9ML7MBG-S</code>. This does not appear to be a standard model and is likely custom designed in partnership with Sony Computer Entertainment Japan. It is possible that Sony used [http://www.toshiba-components.com/ASIC/index.html this service] from Toshiba in their design process which is why the prototype demonstrated in the FCC filing shows a Toshiba chip.<br />
<br />
== Variants ==<br />
<br />
There are multiple known variants of Kermit. SoC revision is readable from [[Pervasive#revision0|a ScePervasiveMisc register]].<br />
<br />
The following table is split in two depending on the Kermit version (1.0 or 1.5). <code>X</code> and <code>Y</code> from the <code>ESX.Y</code> column corresponds to the values in the </code>revision0</code> register (<code>0x000000XY</code>).<br />
<br />
{| class="wikitable"<br />
|+ Known Kermit revisions<br />
|-<br />
! Kermit revision !! SoC model number !! Unit model number or motherboard !! Notes<br />
|-<br />
! colspan="4" | Kermit 1.0<br />
|-<br />
| ES1 || ??? || DEM revision before DEM-3000G || CPU is Cortex-A8, GPU is SGX541MP, ?no CDRAM?. Has two minor revisions: ES1.0 and ES1.1.<br />
|-<br />
| ES2 || ??? || DEM-3000G? to DEM-3000H? || CPU is Cortex-A9, GPU is SGX543MP4+. Has only one minor revision: ES2.0. Has 2 banks of LPDDR2.<br />
|-<br />
| ES3 || ??? || ?DEM-3000JEC, some DEM-3000K/J? || Has three minor revisions: ES3.0, ES3.1 and ES3.2. Has 2 or 4 banks of LPDDR2.<br />
|-<br />
| ES4.0 || ??? || ? || Known to exist from strings in a debugging <code>second_loader.bin</code> dated 2011/05/24.<br />
|-<br />
| ?ES4.2? || T9ML7MBG-S || CEM-3000VD1 ([[IRS-002]] (0-845-846-U8MU) 2011-07 (week 30)) || [https://fccid.io/AK8PCH1001A PCH-1001 FCC certification] and [https://fccid.io/AK8PCH1101A PCH-1101 FCC certification] units use this chip.<br />
|-<br />
| ES4.2 || CXD5315GG || [[IRS-002]], [[DOL-1001]] (1-888-648-11, 1-888-648-21), [[DOL-1002]] (1-893-481-11) || '''© 2011''' marking - No Debug Bus hardware. Has 2 banks of 256MiB LPDDR2.<br />
|-<br />
| ES4.2 || CXD5315GG-1 || [[IRT-002]] || '''© 2011''' marking - Has additional hardware on Debug Bus. Has 4 banks of 256MiB LPDDR2 ?1.5GiB LPDDR2?.<br />
|-<br />
! colspan="4" | Kermit 1.5<br />
|-<br />
| ES1.5 || CXD5316GG || [[IRS-1001]], [[USS-1001]], [[DOL-1002]] (1-893-481-21) || '''© 2012''' marking - Unit used for [https://fccid.io/AK8PCH2001 PCH-2001 FCC certification] has this chip. Has 2 banks of 256MiB LPDDR2.<br />
|-<br />
| ES1.5? || CXD5316BGG || [[USS-1002]] || '''© 2014''' marking. Has 1 bank of 512MiB LPDDR2.<br />
|}<br />
<br />
=== Errata ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Erratum code !! Present on !! Fixed on !! Description<br />
|-<br />
| 93 || Kermit ES1 || Kermit ES2 || The SDIO bus must not be set to High Speed due to a silicon bug.<br />
|}<br />
<br />
== Schema ==<br />
<br />
This is for DevKit. Retail and TestKit are different:<br />
* The DevKit carries 1 GiB of LPDDR2 DRAM (usually referred to as the "main memory"). The retail unit and TestKit carry 512 MiB of LPDDR2 DRAM.<br />
<br />
[[File:PSVita custom SoC schema.png]]<br />
<br />
Thanks to information in a debug version of [[SceKernelBusError]], the following bus diagram has been reconstructed:<br />
<br />
[[File:PS Vita Kermit Bus Diagram.png|1000px]]<br />
<br />
== CPU ==<br />
<br />
See [[Main_Processor]].<br />
<br />
== GPU ==<br />
<br />
See [[SGX543]].<br />
<br />
== LPDDR2 DRAM (main memory) ==<br />
<br />
* The retail unit and TestKit carry 512 MiB of LPDDR2 DRAM.<br />
<br />
* The DevKit carries 1 GiB of LPDDR2 DRAM (usually referred to as the "main memory").<br />
<br />
=== Trace Memory ===<br />
<br />
The DevKit mounts 512 MiB of LPDDR2 DRAM for performance analysis.<br />
<br />
This memory is for storing performance measurement data referred by a performance analyzer (Razor for PlayStation®Vita) or runtime libraries.<br />
<br />
== Custom DRAM ==<br />
<br />
The DevKit carries 128 MiB of custom DRAM (usually referred to as the "video memory"). ?Retail/TesKit too?<br />
<br />
== Codec Engine ==<br />
<br />
Codec Engine is a media processor configured with multiple cores. Only the specific processing of the specific libraries is processed through Codec Engine instead of CPU.<br />
<br />
== Other Key Units and Bus Configuration ==<br />
<br />
As other key units, the custom SoC includes the features below:<br />
<br />
* Direct Memory Access Controllers (DMAC)<br />
* AVC Decoder<br />
* A video out interface<br />
* Misc input/outputs interface etc.<br />
<br />
== Pinout ==<br />
<br />
[[File:kermit-bga.png|600px|Source is a [[Media:Kermit_bga.numbers.zip|iWork Numbers file]].]]<br />
<br />
The pinout is mostly reversed from the [http://wololo.net/talk/viewtopic.php?p=402775 PCB delayer] and is based off of PCH-1XXX on the IRS-002 board. It may not include some pins only used in other PS Vita models.<br />
<br />
=== UART ===<br />
<br />
See [[UART Console]] for pinout and [[UART Registers]] for programming.<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CTS0 || D12 || UART0 clear to send<br />
|-<br />
| RTS0 || B12 || UART0 request to send<br />
|-<br />
| TX0 || B10 || UART0 transmit<br />
|-<br />
| RX0 || B11 || UART0 receive<br />
|-<br />
| CTS5 || E17 || UART5 clear to send<br />
|-<br />
| RTS5 || B17 || UART5 request to send<br />
|-<br />
| TX5 || D17 || UART5 transmit<br />
|-<br />
| RX5 || A17 || UART5 receive<br />
|}<br />
<br />
=== USB ===<br />
<br />
See [[EHCI]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| D+ 3G || AD24 || 3G modem USB D+ (host EHCI)<br />
|-<br />
| D- 3G || AD25 || 3G modem USB D (host EHCI)<br />
|-<br />
| D+ Acc || AD27 || Accessory port USB D+ (host EHCI)<br />
|-<br />
| D- Acc || AD28 || Accessory port USB D (host EHCI)<br />
|-<br />
| D+ UDC || AA30 || Multiconnector USB D+ (client, OTG maybe supported)<br />
|-<br />
| D- UDC || AB30 || Multiconnector USB D (client, OTG maybe supported)<br />
|-<br />
| USB VBUS || AA29 || Also goes to SN99057<br />
|}<br />
<br />
=== SDIO ===<br />
<br />
See [[SceSdif]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CLK 0 || AC7 || eMMC clock<br />
|-<br />
| CMD 0 || AB2 || eMMC CMD<br />
|-<br />
| DAT0 0 || AC6 || eMMC DAT0<br />
|-<br />
| DAT1 0 || AD6 || eMMC DAT1<br />
|-<br />
| DAT2 0 || AC5 || eMMC DAT2<br />
|-<br />
| DAT3 0 || AD5 || eMMC DAT3<br />
|-<br />
| DAT4 0 || AC4 || eMMC DAT4<br />
|-<br />
| DAT5 0 || AD4 || eMMC DAT5<br />
|-<br />
| DAT6 0 || AC3 || eMMC DAT6<br />
|-<br />
| DAT7 0 || AD3 || eMMC DAT7<br />
|-<br />
| CLK 1 || AA1 || Gamecard clock<br />
|-<br />
| CMD 1 || V1 || Gamecard CMD<br />
|-<br />
| DAT0 1 || Z1 || Gamecard DAT0<br />
|-<br />
| DAT1 1 || Z2 || Gamecard DAT1<br />
|-<br />
| DAT2 1 || Y1 || Gamecard DAT2<br />
|-<br />
| DAT3 1 || Y2 || Gamecard DAT3<br />
|-<br />
| DAT4 1 || X1 || Gamecard DAT4 (unused)<br />
|-<br />
| DAT5 1 || X2 || Gamecard DAT5 (unused)<br />
|-<br />
| DAT6 1 || W1 || Gamecard DAT6 (unused)<br />
|-<br />
| DAT7 1 || W2 || Gamecard DAT7 (unused)<br />
|-<br />
| CLK 2 || T1 || Wlan/Bt clock<br />
|-<br />
| CMD 2 || Q1 || Wlan/Bt CMD<br />
|-<br />
| DAT0 2 || S1 || Wlan/Bt DAT0<br />
|-<br />
| DAT1 2 || S2 || Wlan/Bt DAT1<br />
|-<br />
| DAT2 2 || R1 || Wlan/Bt DAT2<br />
|-<br />
| DAT3 2 || R2 || Wlan/Bt DAT3<br />
|-<br />
| Vddq || U1 || SDIO voltage regulation<br />
|-<br />
| Vddq || U2 || SDIO voltage regulation<br />
|}<br />
<br />
=== MS ===<br />
<br />
See [[MSIF Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CLK || AD14 || Memorycard CLK<br />
|-<br />
| INS || AD13 || Memorycard insert detect<br />
|-<br />
| BS || AD8 || Memorycard bus state (select bit)<br />
|-<br />
| DAT0 || AC11 || Memorycard DAT0<br />
|-<br />
| DAT1 || AD12 || Memorycard DAT1<br />
|-<br />
| DAT2 || AD11 || Memorycard DAT2<br />
|-<br />
| DAT3 || AC10 || Memorycard DAT3<br />
|}<br />
<br />
=== MIPI DSI ===<br />
<br />
See [[DSI Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| DC+ 0 || F1 || Internal display clock lane<br />
|-<br />
| DC- 0 || E1 || Internal display clock lane<br />
|-<br />
| D0+ 0 || D1 || Internal display data 0 lane<br />
|-<br />
| D0- 0 || C1 || Internal display data 0 lane<br />
|-<br />
| D1+ 0 || H1 || Internal display data 1 lane<br />
|-<br />
| D1- 0 || G1 || Internal display data 1 lane<br />
|}<br />
<br />
=== MIPI CSI ===<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| || AD15 || Front/back camera<br />
|-<br />
| || AD16 || Front/back camera<br />
|-<br />
| || AD17 || Front/back camera<br />
|-<br />
| || AD18 || Front/back camera<br />
|-<br />
| || AD19 || Front/back camera<br />
|-<br />
| || AD20 || Front/back camera<br />
|-<br />
| || AD21 || Front/back camera<br />
|-<br />
| || AD22 || Front/back camera<br />
|}<br />
<br />
=== SPI ===<br />
<br />
[[File:vita-syscon-spi.png|thumb|400px|SPI0 (Syscon) trace. Termination resistor under the shield.]]<br />
<br />
See [[SPI Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CS 0 || AA14 || Syscon SPI chip select<br />
|-<br />
| SCK 0 || Z15 || Syscon SPI clock<br />
|-<br />
| MISO 0 || AA15 || Syscon SPI output<br />
|-<br />
| MOSI 0 || Z14 || Syscon SPI input<br />
|-<br />
| CS 1 || AA12 || Motion (accelerometer IC) SPI chip select<br />
|-<br />
| SCK 1 || Z13 || Motion (accelerometer IC) SPI clock<br />
|-<br />
| MISO 1 || AA13 || Motion (accelerometer IC) SPI output<br />
|-<br />
| MOSI 1 || Z12 || Motion (accelerometer IC) SPI input<br />
|-<br />
| CS 2 || AA10 || P1P40167 clock synthesizer SPI chip select<br />
|-<br />
| SCK 2 || Z11 || P1P40167 clock synthesizer SPI clock<br />
|-<br />
| MISO 2 || AA11 || P1P40167 clock synthesizer SPI output<br />
|-<br />
| MOSI 2 || Z10 || P1P40167 clock synthesizer SPI input<br />
|}<br />
<br />
=== GPIO ===<br />
<br />
See [[GPIO Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| Syscon || D18 || To syscon<br />
|-<br />
| Syscon || E18 || To syscon<br />
|-<br />
| Syscon || E19 || To syscon<br />
|-<br />
| Syscon || A20 || To syscon<br />
|-<br />
| Motion || E25 || To Motion (accelerometer IC)<br />
|-<br />
| Motion || A26 || To Motion (accelerometer IC)<br />
|-<br />
| Camera || E21 || To camera<br />
|-<br />
| Camera || D21 || To camera<br />
|-<br />
| Camera || B21 || To camera<br />
|-<br />
| PS LED || E20 || To transistor gate powering PS button LED<br />
|-<br />
| GC LED || D20 || To LED next to gamecard port<br />
|-<br />
| PMIC || A22 || To PMIC<br />
|-<br />
| PMIC || A25 || To PMIC<br />
|-<br />
| PMIC || B20 || To PMIC<br />
|-<br />
| OLED || A19 || To OLED connector port<br />
|-<br />
| GPIO_80 || A21 || 3G modem pin 23<br />
|-<br />
| GPIO_H2 || B27 || 3G modem pin 11<br />
|-<br />
| VBUS_CTRL || A27 || 3G modem pin 17<br />
|-<br />
| eMMC RST_N || B26 || RST_N of eMMC<br />
|}<br />
<br />
=== I2C ===<br />
<br />
See [[I2C Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| SCL 0 || T4 || I2C0 clock<br />
|-<br />
| SDA 0 || T5 || I2C0 data<br />
|-<br />
| SCL 1 || S4 || I2C1 clock<br />
|-<br />
| SDA 1 || S5 || I2C1 data<br />
|}<br />
<br />
<br />
=== Misc ===<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| pad AC28 || AC26 || Goes to pad with passive, grouped with AC28?<br />
|-<br />
| pad AC26 || AC28 || Goes to pad with passive, grouped with AC26?<br />
|-<br />
| pullup? || AB29 || Goes to a pullup resistor?<br />
|-<br />
| Wlan/Bt || AA9 || Goes to Wlan/Bt SoC<br />
|-<br />
| pad W4 || X4 || Goes to pad, connects with W4<br />
|-<br />
| pad X4 || W4 || Goes to pad, connects with X4<br />
|-<br />
| pullup X27 || W27 || Pullup resistor to X27<br />
|-<br />
| || X29 || Goes near PMIC<br />
|-<br />
| || X30 || Goes near PMIC<br />
|-<br />
| pad M7 || U29 || Connects to M7 with a passive<br />
|-<br />
| rst? || U30 || Goes near PMIC, might be reset<br />
|-<br />
| pad U29 || M7 || Connects to U29 with a passive<br />
|-<br />
| Capacitor || L5 || Goes to a capacitor, voltage regulation?<br />
|-<br />
| Camera || K4 || Goes to camera, camera audio input?<br />
|-<br />
| Audio || K5 || Maybe I2S<br />
|-<br />
| Audio || K7 || Maybe I2S<br />
|-<br />
| Audio || G5 || Maybe I2S<br />
|-<br />
| Audio || B4 || Maybe I2S<br />
|-<br />
| Syscon || B9 || Goes to syscon<br />
|-<br />
| pad D11 || D10 || Connects to D10 through passive<br />
|-<br />
| pad D10 || D11 || Connects to D11 through passive<br />
|-<br />
| pad G30 || G29 || Connects to G30 through passive<br />
|-<br />
| pad G29 || G30 || Connects to G29 through passive<br />
|}<br />
<br />
=== Clocks/Reset ===<br />
<br />
See [[Pervasive]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| 24M || B5 || 24.576MHz, suspected audio related<br />
|-<br />
| 24M || B6 || 24.576MHz, suspected audio related<br />
|-<br />
| 27M || A11 || 27MHz, suspected input to main PLL<br />
|-<br />
| 48M || AC27 || 48MHz, SD controller<br />
|-<br />
| 37M || C30 || 37MHz, suspected main clock<br />
|-<br />
| RST_N || B9 || Held for 20ms on startup by Syscon, 100K pulldown<br />
|}<br />
<br />
=== Power ===<br />
<br />
Different power domains are numbered. Some voltages are unknown.<br />
[[File:vita-caps.png|thumb|400px|Decoupling capacitors for some major power domains are shown.]]<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| VDD09 1 || W9 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W11 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W12 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W13 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W14 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W15 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V11 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V12 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V13 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V14 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V15 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V16 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V17 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V18 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V19 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V20 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V21 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || U10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || T10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || S10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || R10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H16 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H17 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H18 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H19 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H20 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H21 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H22 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || B18 || 0.9V power domain 1<br />
|-<br />
| VDD10 1 || K9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || J9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I10 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I11 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I12 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I13 || 1.0V power domain 1<br />
|-<br />
| VDD10 2 || I14 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I15 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I16 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I17 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I18 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I19 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I20 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I21 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || J22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || K22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || L22 || 1.0V power domain 2<br />
|-<br />
| VDD12 1 || U11 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U12 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U13 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U14 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U15 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U16 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U17 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U18 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U19 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U20 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U21 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || T22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || S22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || R22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || M22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || L22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || K22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J21 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J20 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J19 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J18 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J17 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J16 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J15 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J14 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J13 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J12 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J11 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || K10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || L10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || M10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || N10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || O10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || P10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || Q10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 2 || M9 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || L9 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || Q21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || P21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || O21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || N21 || 1.2V power domain 2<br />
|-<br />
| VDD12 3 || W18 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W19 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W20 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W21 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || Q22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || P22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || O9 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || N9 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H11 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H12 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H13 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H14 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H15 || 1.2V power domain 3<br />
|-<br />
| VDD12 4 || T22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || S22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || R22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || O22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || N22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || M22 || 1.2V power domain 4<br />
|-<br />
| VDD18 1 || Y26 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || Y27 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || N8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || M8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || L8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || K8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || O23 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || N23 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || H9 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || H10 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G15 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G16 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G19 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G20 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G21 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G22 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || W16 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || W17 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || V22 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || U22 || 1.8V power domain 1<br />
|-<br />
| VDD18 2 || AA6 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z6 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || AA17 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z17 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || AA18 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z18 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || V4 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || V5 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || P7 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || O7 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || J23 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || I23 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || H8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || G8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || E8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || D8 || 1.8V power domain 2<br />
|-<br />
| VDD? 1 || AA26 || Unknown power<br />
|-<br />
| VDD? 1 || Z26 || Unknown power<br />
|-<br />
| VDD? 2 || AA25 || Unknown power<br />
|-<br />
| VDD? 2 || Z25 || Unknown power<br />
|-<br />
| VDD? 3 || AA20 || Unknown power<br />
|-<br />
| VDD? 3 || Z20 || Unknown power<br />
|-<br />
| VDD? 4 || AA8 || Unknown power<br />
|-<br />
| VDD? 4 || Z8 || Unknown power<br />
|-<br />
| VDD? 4 || Y4 || Unknown power<br />
|-<br />
| VDD? 4 || Y5 || Unknown power<br />
|-<br />
| VDD? 4 || X27 || Unknown power<br />
|-<br />
| VDD? 5 || E6 || Unknown power<br />
|-<br />
| VDD? 5 || D6 || Unknown power<br />
|-<br />
| VDD? 6 || H7 || Unknown power<br />
|-<br />
| VDD? 6 || G7 || Unknown power<br />
|-<br />
| VDD? 7 || P24 || Unknown power<br />
|-<br />
| VDD? 7 || O24 || Unknown power<br />
|-<br />
| VDD? 8 || T24 || Unknown power<br />
|-<br />
| VDD? 8 || S24 || Unknown power<br />
|-<br />
| VDD? 9 || E26 || Unknown power<br />
|-<br />
| VDD? 9 || E27 || Unknown power<br />
|-<br />
| VDD? 9 || D29 || Unknown power<br />
|-<br />
| VDD? 9 || D30 || Unknown power<br />
|-<br />
| VDD? 9 || C29 || Unknown power<br />
|-<br />
| VDD? 9 || B30 || Unknown power<br />
|-<br />
| VDD? 10 || F26 || Unknown power<br />
|-<br />
| VDD? 10 || F27 || Unknown power<br />
|}<br />
<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Kermit&diff=21102
Kermit
2024-02-01T00:05:36Z
<p>CelesteBlue: /* Variants */</p>
<hr />
<div>The PS Vita main SoC, nicknamed Kermit, is manufactured by Toshiba. The design is a stacked SoC with the SDRAM found in the same chip as the processor cores. Toshiba details their "[http://www.toshiba-components.com/ASIC/SiP.html Stacked Chip SOC]" on their site.<br />
<br />
More information can be found at [https://web.archive.org/web/20150425204407/http://www.chipworks.com/en/technical-competitive-analysis/resources/blog/sonys-ps-vita-uses-chip-on-chip-sip-3d-but-not-3d/ Chipworks].<br />
<br />
[[File:T9ML7MBG-S.png|thumb|From FCC application 712137]]<br />
According to the internal photos found in the [https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=712137&fcc_id=AK8PCH1101A FCC filings], it appears that an earlier version of the chip is labeled <code>T9ML7MBG-S</code>. This does not appear to be a standard model and is likely custom designed in partnership with Sony Computer Entertainment Japan. It is possible that Sony used [http://www.toshiba-components.com/ASIC/index.html this service] from Toshiba in their design process which is why the prototype demonstrated in the FCC filing shows a Toshiba chip.<br />
<br />
== Variants ==<br />
<br />
There are multiple known variants of Kermit. SoC revision is readable from [[Pervasive#revision0|a ScePervasiveMisc register]].<br />
<br />
The following table is split in two depending on the Kermit version (1.0 or 1.5). <code>X</code> and <code>Y</code> from the <code>ESX.Y</code> column corresponds to the values in the </code>revision0</code> register (<code>0x000000XY</code>).<br />
<br />
{| class="wikitable"<br />
|+ Known Kermit revisions<br />
|-<br />
! Kermit revision !! SoC model number !! Unit model number or motherboard !! Notes<br />
|-<br />
! colspan="4" | Kermit 1.0<br />
|-<br />
| ES1 || ??? || DEM revision before DEM-3000G || CPU is Cortex-A8, GPU is SGX541MP, ?no CDRAM?. Has two minor revisions: ES1.0 and ES1.1.<br />
|-<br />
| ES2 || ??? || DEM-3000G? to DEM-3000H? || CPU is Cortex-A9, GPU is SGX543MP4+. Has only one minor revision: ES2.0. Has 2 banks of LPDDR2.<br />
|-<br />
| ES3 || ??? || ?DEM-3000JEC, some DEM-3000K/J? || Has three minor revisions: ES3.0, ES3.1 and ES3.2. Has 2 or 4 banks of LPDDR2.<br />
|-<br />
| ES4.0 || ??? || ? || Known to exist from strings in a debugging <code>second_loader.bin</code> dated 2011/05/24.<br />
|-<br />
| ?ES4.2? || T9ML7MBG-S || CEM-3000VD1 ([[IRS-002]] (0-845-846-U8MU) 2011-07 (week 30)) || [https://fccid.io/AK8PCH1001A PCH-1001 FCC certification] and [https://fccid.io/AK8PCH1101A PCH-1101 FCC certification] units use this chip.<br />
|-<br />
| ES4.2 || CXD5315GG || [[IRS-002]], [[DOL-1001]], [[DOL-1002]] (1-893-481-11), ?[[DOL-1002]] (1-893-481-21)? || '''© 2011''' marking - No Debug Bus hardware. Has 2 banks of 256MiB LPDDR2.<br />
|-<br />
| ES4.2 || CXD5315GG-1 || [[IRT-002]] || '''© 2011''' marking - Has additional hardware on Debug Bus. Has 4 banks of 256MiB LPDDR2 ?1.5GiB LPDDR2?.<br />
|-<br />
! colspan="4" | Kermit 1.5<br />
|-<br />
| ES1.5 || CXD5316GG || [[IRS-1001]], [[USS-1001]] || '''© 2012''' marking - Unit used for [https://fccid.io/AK8PCH2001 PCH-2001 FCC certification] has this chip. Has 2 banks of 256MiB LPDDR2.<br />
|-<br />
| ES1.5? || CXD5316BGG || [[USS-1002]] || '''© 2014''' marking. Has 1 bank of 512MiB LPDDR2.<br />
|}<br />
<br />
=== Errata ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Erratum code !! Present on !! Fixed on !! Description<br />
|-<br />
| 93 || Kermit ES1 || Kermit ES2 || The SDIO bus must not be set to High Speed due to a silicon bug.<br />
|}<br />
<br />
== Schema ==<br />
<br />
This is for DevKit. Retail and TestKit are different:<br />
* The DevKit carries 1 GiB of LPDDR2 DRAM (usually referred to as the "main memory"). The retail unit and TestKit carry 512 MiB of LPDDR2 DRAM.<br />
<br />
[[File:PSVita custom SoC schema.png]]<br />
<br />
Thanks to information in a debug version of [[SceKernelBusError]], the following bus diagram has been reconstructed:<br />
<br />
[[File:PS Vita Kermit Bus Diagram.png|1000px]]<br />
<br />
== CPU ==<br />
<br />
See [[Main_Processor]].<br />
<br />
== GPU ==<br />
<br />
See [[SGX543]].<br />
<br />
== LPDDR2 DRAM (main memory) ==<br />
<br />
* The retail unit and TestKit carry 512 MiB of LPDDR2 DRAM.<br />
<br />
* The DevKit carries 1 GiB of LPDDR2 DRAM (usually referred to as the "main memory").<br />
<br />
=== Trace Memory ===<br />
<br />
The DevKit mounts 512 MiB of LPDDR2 DRAM for performance analysis.<br />
<br />
This memory is for storing performance measurement data referred by a performance analyzer (Razor for PlayStation®Vita) or runtime libraries.<br />
<br />
== Custom DRAM ==<br />
<br />
The DevKit carries 128 MiB of custom DRAM (usually referred to as the "video memory"). ?Retail/TesKit too?<br />
<br />
== Codec Engine ==<br />
<br />
Codec Engine is a media processor configured with multiple cores. Only the specific processing of the specific libraries is processed through Codec Engine instead of CPU.<br />
<br />
== Other Key Units and Bus Configuration ==<br />
<br />
As other key units, the custom SoC includes the features below:<br />
<br />
* Direct Memory Access Controllers (DMAC)<br />
* AVC Decoder<br />
* A video out interface<br />
* Misc input/outputs interface etc.<br />
<br />
== Pinout ==<br />
<br />
[[File:kermit-bga.png|600px|Source is a [[Media:Kermit_bga.numbers.zip|iWork Numbers file]].]]<br />
<br />
The pinout is mostly reversed from the [http://wololo.net/talk/viewtopic.php?p=402775 PCB delayer] and is based off of PCH-1XXX on the IRS-002 board. It may not include some pins only used in other PS Vita models.<br />
<br />
=== UART ===<br />
<br />
See [[UART Console]] for pinout and [[UART Registers]] for programming.<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CTS0 || D12 || UART0 clear to send<br />
|-<br />
| RTS0 || B12 || UART0 request to send<br />
|-<br />
| TX0 || B10 || UART0 transmit<br />
|-<br />
| RX0 || B11 || UART0 receive<br />
|-<br />
| CTS5 || E17 || UART5 clear to send<br />
|-<br />
| RTS5 || B17 || UART5 request to send<br />
|-<br />
| TX5 || D17 || UART5 transmit<br />
|-<br />
| RX5 || A17 || UART5 receive<br />
|}<br />
<br />
=== USB ===<br />
<br />
See [[EHCI]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| D+ 3G || AD24 || 3G modem USB D+ (host EHCI)<br />
|-<br />
| D- 3G || AD25 || 3G modem USB D (host EHCI)<br />
|-<br />
| D+ Acc || AD27 || Accessory port USB D+ (host EHCI)<br />
|-<br />
| D- Acc || AD28 || Accessory port USB D (host EHCI)<br />
|-<br />
| D+ UDC || AA30 || Multiconnector USB D+ (client, OTG maybe supported)<br />
|-<br />
| D- UDC || AB30 || Multiconnector USB D (client, OTG maybe supported)<br />
|-<br />
| USB VBUS || AA29 || Also goes to SN99057<br />
|}<br />
<br />
=== SDIO ===<br />
<br />
See [[SceSdif]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CLK 0 || AC7 || eMMC clock<br />
|-<br />
| CMD 0 || AB2 || eMMC CMD<br />
|-<br />
| DAT0 0 || AC6 || eMMC DAT0<br />
|-<br />
| DAT1 0 || AD6 || eMMC DAT1<br />
|-<br />
| DAT2 0 || AC5 || eMMC DAT2<br />
|-<br />
| DAT3 0 || AD5 || eMMC DAT3<br />
|-<br />
| DAT4 0 || AC4 || eMMC DAT4<br />
|-<br />
| DAT5 0 || AD4 || eMMC DAT5<br />
|-<br />
| DAT6 0 || AC3 || eMMC DAT6<br />
|-<br />
| DAT7 0 || AD3 || eMMC DAT7<br />
|-<br />
| CLK 1 || AA1 || Gamecard clock<br />
|-<br />
| CMD 1 || V1 || Gamecard CMD<br />
|-<br />
| DAT0 1 || Z1 || Gamecard DAT0<br />
|-<br />
| DAT1 1 || Z2 || Gamecard DAT1<br />
|-<br />
| DAT2 1 || Y1 || Gamecard DAT2<br />
|-<br />
| DAT3 1 || Y2 || Gamecard DAT3<br />
|-<br />
| DAT4 1 || X1 || Gamecard DAT4 (unused)<br />
|-<br />
| DAT5 1 || X2 || Gamecard DAT5 (unused)<br />
|-<br />
| DAT6 1 || W1 || Gamecard DAT6 (unused)<br />
|-<br />
| DAT7 1 || W2 || Gamecard DAT7 (unused)<br />
|-<br />
| CLK 2 || T1 || Wlan/Bt clock<br />
|-<br />
| CMD 2 || Q1 || Wlan/Bt CMD<br />
|-<br />
| DAT0 2 || S1 || Wlan/Bt DAT0<br />
|-<br />
| DAT1 2 || S2 || Wlan/Bt DAT1<br />
|-<br />
| DAT2 2 || R1 || Wlan/Bt DAT2<br />
|-<br />
| DAT3 2 || R2 || Wlan/Bt DAT3<br />
|-<br />
| Vddq || U1 || SDIO voltage regulation<br />
|-<br />
| Vddq || U2 || SDIO voltage regulation<br />
|}<br />
<br />
=== MS ===<br />
<br />
See [[MSIF Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CLK || AD14 || Memorycard CLK<br />
|-<br />
| INS || AD13 || Memorycard insert detect<br />
|-<br />
| BS || AD8 || Memorycard bus state (select bit)<br />
|-<br />
| DAT0 || AC11 || Memorycard DAT0<br />
|-<br />
| DAT1 || AD12 || Memorycard DAT1<br />
|-<br />
| DAT2 || AD11 || Memorycard DAT2<br />
|-<br />
| DAT3 || AC10 || Memorycard DAT3<br />
|}<br />
<br />
=== MIPI DSI ===<br />
<br />
See [[DSI Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| DC+ 0 || F1 || Internal display clock lane<br />
|-<br />
| DC- 0 || E1 || Internal display clock lane<br />
|-<br />
| D0+ 0 || D1 || Internal display data 0 lane<br />
|-<br />
| D0- 0 || C1 || Internal display data 0 lane<br />
|-<br />
| D1+ 0 || H1 || Internal display data 1 lane<br />
|-<br />
| D1- 0 || G1 || Internal display data 1 lane<br />
|}<br />
<br />
=== MIPI CSI ===<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| || AD15 || Front/back camera<br />
|-<br />
| || AD16 || Front/back camera<br />
|-<br />
| || AD17 || Front/back camera<br />
|-<br />
| || AD18 || Front/back camera<br />
|-<br />
| || AD19 || Front/back camera<br />
|-<br />
| || AD20 || Front/back camera<br />
|-<br />
| || AD21 || Front/back camera<br />
|-<br />
| || AD22 || Front/back camera<br />
|}<br />
<br />
=== SPI ===<br />
<br />
[[File:vita-syscon-spi.png|thumb|400px|SPI0 (Syscon) trace. Termination resistor under the shield.]]<br />
<br />
See [[SPI Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| CS 0 || AA14 || Syscon SPI chip select<br />
|-<br />
| SCK 0 || Z15 || Syscon SPI clock<br />
|-<br />
| MISO 0 || AA15 || Syscon SPI output<br />
|-<br />
| MOSI 0 || Z14 || Syscon SPI input<br />
|-<br />
| CS 1 || AA12 || Motion (accelerometer IC) SPI chip select<br />
|-<br />
| SCK 1 || Z13 || Motion (accelerometer IC) SPI clock<br />
|-<br />
| MISO 1 || AA13 || Motion (accelerometer IC) SPI output<br />
|-<br />
| MOSI 1 || Z12 || Motion (accelerometer IC) SPI input<br />
|-<br />
| CS 2 || AA10 || P1P40167 clock synthesizer SPI chip select<br />
|-<br />
| SCK 2 || Z11 || P1P40167 clock synthesizer SPI clock<br />
|-<br />
| MISO 2 || AA11 || P1P40167 clock synthesizer SPI output<br />
|-<br />
| MOSI 2 || Z10 || P1P40167 clock synthesizer SPI input<br />
|}<br />
<br />
=== GPIO ===<br />
<br />
See [[GPIO Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| Syscon || D18 || To syscon<br />
|-<br />
| Syscon || E18 || To syscon<br />
|-<br />
| Syscon || E19 || To syscon<br />
|-<br />
| Syscon || A20 || To syscon<br />
|-<br />
| Motion || E25 || To Motion (accelerometer IC)<br />
|-<br />
| Motion || A26 || To Motion (accelerometer IC)<br />
|-<br />
| Camera || E21 || To camera<br />
|-<br />
| Camera || D21 || To camera<br />
|-<br />
| Camera || B21 || To camera<br />
|-<br />
| PS LED || E20 || To transistor gate powering PS button LED<br />
|-<br />
| GC LED || D20 || To LED next to gamecard port<br />
|-<br />
| PMIC || A22 || To PMIC<br />
|-<br />
| PMIC || A25 || To PMIC<br />
|-<br />
| PMIC || B20 || To PMIC<br />
|-<br />
| OLED || A19 || To OLED connector port<br />
|-<br />
| GPIO_80 || A21 || 3G modem pin 23<br />
|-<br />
| GPIO_H2 || B27 || 3G modem pin 11<br />
|-<br />
| VBUS_CTRL || A27 || 3G modem pin 17<br />
|-<br />
| eMMC RST_N || B26 || RST_N of eMMC<br />
|}<br />
<br />
=== I2C ===<br />
<br />
See [[I2C Registers]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| SCL 0 || T4 || I2C0 clock<br />
|-<br />
| SDA 0 || T5 || I2C0 data<br />
|-<br />
| SCL 1 || S4 || I2C1 clock<br />
|-<br />
| SDA 1 || S5 || I2C1 data<br />
|}<br />
<br />
<br />
=== Misc ===<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| pad AC28 || AC26 || Goes to pad with passive, grouped with AC28?<br />
|-<br />
| pad AC26 || AC28 || Goes to pad with passive, grouped with AC26?<br />
|-<br />
| pullup? || AB29 || Goes to a pullup resistor?<br />
|-<br />
| Wlan/Bt || AA9 || Goes to Wlan/Bt SoC<br />
|-<br />
| pad W4 || X4 || Goes to pad, connects with W4<br />
|-<br />
| pad X4 || W4 || Goes to pad, connects with X4<br />
|-<br />
| pullup X27 || W27 || Pullup resistor to X27<br />
|-<br />
| || X29 || Goes near PMIC<br />
|-<br />
| || X30 || Goes near PMIC<br />
|-<br />
| pad M7 || U29 || Connects to M7 with a passive<br />
|-<br />
| rst? || U30 || Goes near PMIC, might be reset<br />
|-<br />
| pad U29 || M7 || Connects to U29 with a passive<br />
|-<br />
| Capacitor || L5 || Goes to a capacitor, voltage regulation?<br />
|-<br />
| Camera || K4 || Goes to camera, camera audio input?<br />
|-<br />
| Audio || K5 || Maybe I2S<br />
|-<br />
| Audio || K7 || Maybe I2S<br />
|-<br />
| Audio || G5 || Maybe I2S<br />
|-<br />
| Audio || B4 || Maybe I2S<br />
|-<br />
| Syscon || B9 || Goes to syscon<br />
|-<br />
| pad D11 || D10 || Connects to D10 through passive<br />
|-<br />
| pad D10 || D11 || Connects to D11 through passive<br />
|-<br />
| pad G30 || G29 || Connects to G30 through passive<br />
|-<br />
| pad G29 || G30 || Connects to G29 through passive<br />
|}<br />
<br />
=== Clocks/Reset ===<br />
<br />
See [[Pervasive]].<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| 24M || B5 || 24.576MHz, suspected audio related<br />
|-<br />
| 24M || B6 || 24.576MHz, suspected audio related<br />
|-<br />
| 27M || A11 || 27MHz, suspected input to main PLL<br />
|-<br />
| 48M || AC27 || 48MHz, SD controller<br />
|-<br />
| 37M || C30 || 37MHz, suspected main clock<br />
|-<br />
| RST_N || B9 || Held for 20ms on startup by Syscon, 100K pulldown<br />
|}<br />
<br />
=== Power ===<br />
<br />
Different power domains are numbered. Some voltages are unknown.<br />
[[File:vita-caps.png|thumb|400px|Decoupling capacitors for some major power domains are shown.]]<br />
<br />
{| class='wikitable'<br />
! Name || Pin || Description<br />
|-<br />
| VDD09 1 || W9 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W11 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W12 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W13 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W14 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || W15 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V11 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V12 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V13 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V14 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V15 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V16 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V17 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V18 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V19 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V20 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || V21 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || U10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || T10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || S10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || R10 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H16 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H17 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H18 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H19 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H20 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H21 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || H22 || 0.9V power domain 1<br />
|-<br />
| VDD09 1 || B18 || 0.9V power domain 1<br />
|-<br />
| VDD10 1 || K9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || J9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I9 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I10 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I11 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I12 || 1.0V power domain 1<br />
|-<br />
| VDD10 1 || I13 || 1.0V power domain 1<br />
|-<br />
| VDD10 2 || I14 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I15 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I16 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I17 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I18 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I19 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I20 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I21 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || I22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || J22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || K22 || 1.0V power domain 2<br />
|-<br />
| VDD10 2 || L22 || 1.0V power domain 2<br />
|-<br />
| VDD12 1 || U11 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U12 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U13 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U14 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U15 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U16 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U17 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U18 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U19 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U20 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U21 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || U22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || T22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || S22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || R22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || M22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || L22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || K22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J22 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J21 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J20 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J19 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J18 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J17 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J16 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J15 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J14 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J13 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J12 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J11 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || J10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || K10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || L10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || M10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || N10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || O10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || P10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 1 || Q10 || 1.2V power domain 1 (main core power)<br />
|-<br />
| VDD12 2 || M9 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || L9 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || Q21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || P21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || O21 || 1.2V power domain 2<br />
|-<br />
| VDD12 2 || N21 || 1.2V power domain 2<br />
|-<br />
| VDD12 3 || W18 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W19 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W20 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W21 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || W22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || Q22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || P22 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || O9 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || N9 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H11 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H12 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H13 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H14 || 1.2V power domain 3<br />
|-<br />
| VDD12 3 || H15 || 1.2V power domain 3<br />
|-<br />
| VDD12 4 || T22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || S22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || R22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || O22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || N22 || 1.2V power domain 4<br />
|-<br />
| VDD12 4 || M22 || 1.2V power domain 4<br />
|-<br />
| VDD18 1 || Y26 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || Y27 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || N8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || M8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || L8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || K8 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || O23 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || N23 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || H9 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || H10 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G15 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G16 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G19 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G20 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G21 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || G22 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || W16 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || W17 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || V22 || 1.8V power domain 1<br />
|-<br />
| VDD18 1 || U22 || 1.8V power domain 1<br />
|-<br />
| VDD18 2 || AA6 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z6 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || AA17 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z17 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || AA18 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || Z18 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || V4 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || V5 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || P7 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || O7 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || J23 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || I23 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || H8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || G8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || E8 || 1.8V power domain 2<br />
|-<br />
| VDD18 2 || D8 || 1.8V power domain 2<br />
|-<br />
| VDD? 1 || AA26 || Unknown power<br />
|-<br />
| VDD? 1 || Z26 || Unknown power<br />
|-<br />
| VDD? 2 || AA25 || Unknown power<br />
|-<br />
| VDD? 2 || Z25 || Unknown power<br />
|-<br />
| VDD? 3 || AA20 || Unknown power<br />
|-<br />
| VDD? 3 || Z20 || Unknown power<br />
|-<br />
| VDD? 4 || AA8 || Unknown power<br />
|-<br />
| VDD? 4 || Z8 || Unknown power<br />
|-<br />
| VDD? 4 || Y4 || Unknown power<br />
|-<br />
| VDD? 4 || Y5 || Unknown power<br />
|-<br />
| VDD? 4 || X27 || Unknown power<br />
|-<br />
| VDD? 5 || E6 || Unknown power<br />
|-<br />
| VDD? 5 || D6 || Unknown power<br />
|-<br />
| VDD? 6 || H7 || Unknown power<br />
|-<br />
| VDD? 6 || G7 || Unknown power<br />
|-<br />
| VDD? 7 || P24 || Unknown power<br />
|-<br />
| VDD? 7 || O24 || Unknown power<br />
|-<br />
| VDD? 8 || T24 || Unknown power<br />
|-<br />
| VDD? 8 || S24 || Unknown power<br />
|-<br />
| VDD? 9 || E26 || Unknown power<br />
|-<br />
| VDD? 9 || E27 || Unknown power<br />
|-<br />
| VDD? 9 || D29 || Unknown power<br />
|-<br />
| VDD? 9 || D30 || Unknown power<br />
|-<br />
| VDD? 9 || C29 || Unknown power<br />
|-<br />
| VDD? 9 || B30 || Unknown power<br />
|-<br />
| VDD? 10 || F26 || Unknown power<br />
|-<br />
| VDD? 10 || F27 || Unknown power<br />
|}<br />
<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Pervasive&diff=21101
Pervasive
2024-02-01T00:05:15Z
<p>CelesteBlue: /* ScePervasiveMisc (0xE3100000) */</p>
<hr />
<div>Pervasive is a device that controls the clocks of most of the devices of the system.<br />
<br />
== ScePervasiveMisc (0xE3100000) ==<br />
<br />
Devices can be fully disabled? by writing a 1 to the corresponding bit of the ScePervasiveMisc (PA <code>0xE3100000</code>) register. To disable the device <code>dev_off</code>, do <code>*REG32(0xE3100000 + (dev_off / 32) * 4) = 1 << (31 - (dev_off % 32))</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset<br />
! Description<br />
|-<br />
| 0x0000<br />
| [[Pervasive#revision0|revision0]]. ex:0x80000115<br />
|-<br />
| 0x0004<br />
| Unknown - SKBL prints <code>L2 Cache is defective</code> if bit 0x2 is set<br />
|-<br />
| 0x0110<br />
| SDIF related<br />
|-<br />
| 0x0114<br />
| SDIF related<br />
|-<br />
| 0x0118<br />
| SDIF related<br />
|-<br />
| 0x011C<br />
| SDIF related<br />
|-<br />
| 0x0124<br />
| SDIF voltage control? - 3.3V by default; <code>1 << sdif_idx</code> to set the SDIF to 1.8V<br />
|-<br />
| 0x0130<br />
| <code>PERVASIVE_SYS_SBEATB</code> - Pervasive Secure Bus Error Attribute<br />
|-<br />
| 0x0134<br />
| <code>PERVASIVE_SYS_SBEADR</code> - Pervasive Secure Bus Error Address<br />
|-<br />
| 0x0138<br />
| <code>PERVASIVE_SYS_BEATB</code> - Pervasive Bus Error Attribute<br />
|-<br />
| 0x013C<br />
| <code>PERVASIVE_SYS_BEADR</code> - Pervasive Bus Error Address<br />
|-<br />
| 0x0194<br />
| gc<br />
|-<br />
| 0x0300<br />
| Unknown<br />
|-<br />
| 0x0304<br />
| Unknown<br />
|-<br />
| 0x0308<br />
| Unknown<br />
|-<br />
| 0x0310<br />
| SDIF related<br />
|}<br />
<br />
=== revision0 ===<br />
<br />
Returned by [[SceLowio#scePervasiveGetSoCRevisionForDriver]], read by [[SKBL]]/[[NSKBL]]/...<br />
<br />
Contains the [[Kermit]] revision (see [[SceSysmem#sceKernelSysrootGetKermitRevisionForKernel|sceKernelSysrootGetKermitRevisionForKernel]]) and other information.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Bit mask !! Information<br />
|-<br />
| <code>0x80000000</code> || Disable LPDDR2SUB. If set, it is not a DevKit.<br />
|-<br />
| <code>0x20000000</code> || Enable 4 LPDDR2 banks (used by [[SceCrashDump]]). Default is 2 LPPDR2 banks.<br />
|-<br />
| <code>0x10000000</code> || Enable 1 LPDDR2 bank (used by [[SceCrashDump]]). Default is 2 LPPDR2 banks.<br />
|-<br />
| <code>0x0001FFFF</code> || Kermit revision<br />
|}<br />
<br />
{| class="wikitable"<br />
|+ Kermit revision<br />
|-<br />
! Bit mask !! Information<br />
|-<br />
| <code>0x0001FF00</code> || Kermit new revision (new firmwares) (known values: 0 for KERMIT10_REV_ES4, 1 for KERMIT15_REV_ES1)<br />
|-<br />
| <code>0x000000F0</code> || Kermit major revision (old firmwares): Engineering Sample revision (1 = ES1, 2 = ES2, etc.)<br />
|-<br />
| <code>0x0000000F</code> || Kermit minor revision (old firmwares)<br />
|}<br />
<br />
{| class="wikitable"<br />
|+ Known values<br />
|-<br />
! Hardware !! Value<br />
|-<br />
| ES2.0 (according to System Software version 0.920) || <code>0x0000002X</code><br />
|-<br />
| CXD5315GG-1 || <code>0x00000042</code><br />
|-<br />
| CXD5315GG || <code>0x80000042</code><br />
|-<br />
| CXD5316GG || <code>0x80000115</code><br />
|-<br />
| CXD5316BGG || <code>0x94000115</code><br />
|}<br />
<br />
== ScePervasiveReset (0xE3101000) ==<br />
<br />
Devices must be put out of reset (device reset disabled) before they are first used.<br />
<br />
To enable reset of a device (put a device in reset), do <code>*REG32(0xE3101000 + dev_off) |= mask</code>.<br />
<br />
To disable reset of a device (put a device out of reset), do <code>*REG32(0xE3101000 + dev_off) &= ~mask</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
! dev_off<br />
! Access<br />
! Device<br />
! Reset Mask<br />
! Comment<br />
|-<br />
| 0x4<br />
| Secure?<br />
| ARM Debugger?<br />
| 1<br />
| Of ARM coprocessor 14?<br />
|-<br />
| 0x10<br />
| Non-secure<br />
| GPU<br />
| 1<br />
| enable: ScePervasiveForDriver_3E79D3D3/disable: ScePervasiveForDriver_8A85E36B<br />
|-<br />
| 0x20<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_377126CD/disable: ScePervasiveForDriver_6E11EB97<br />
|-<br />
| 0x24<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_7B0F388B/disable: ScePervasiveForDriver_4CCD40E6<br />
|-<br />
| 0x28<br />
| Secure<br />
| CompatRAM<br />
| 1<br />
| enable: ScePervasiveForDriver_7C285361/disable: ScePervasiveForDriver_E40BED0F<br />
|-<br />
| 0x30<br />
| Non-secure<br />
| Venezia<br />
| 1<br />
| enable: ScePervasiveForDriver_28731EC5/disable: ScePervasiveForDriver_A7E64C6F<br />
|-<br />
| 0x34<br />
| Non-secure<br />
| Vip<br />
| 1<br />
| enable: ScePervasiveForDriver_31C0A98B/disable: ScePervasiveForDriver_E2D8F6C3<br />
|-<br />
| 0x40<br />
| Secure<br />
| [[SceDbgSdio|SDIO0]]<br />
| 1<br />
|<br />
|-<br />
| 0x44<br />
| Secure<br />
| [[SceDbgSdio|SDIO1]]<br />
| 1<br />
|<br />
|-<br />
| 0x48<br />
| Secure<br />
| DebugPA<br />
| 1<br />
|<br />
|-<br />
| 0x4C<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x50<br />
| Secure<br />
| DMAC0<br />
| 1<br />
|<br />
|-<br />
| 0x54<br />
| Secure<br />
| DMAC1<br />
| 1<br />
|<br />
|-<br />
| 0x58<br />
| Secure<br />
| DMAC2<br />
| 1<br />
|<br />
|-<br />
| 0x5C<br />
| Secure<br />
| DMAC3<br />
| 1<br />
|<br />
|-<br />
| 0x60<br />
| Secure<br />
| DMAC4<br />
| 1<br />
|<br />
|-<br />
| 0x64<br />
| Secure<br />
| DMAC5<br />
| 1<br />
|<br />
|-<br />
| 0x68<br />
| Secure<br />
| DMAC6<br />
| 1<br />
| need devmode or dipsw 0xC0 or 0xC1 or 0xC2.<br />
|-<br />
| 0x70<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Csi<br />
| rowspan="2" | 1<br />
| rowspan="2" | Camera Serial Interface<br />
|-<br />
| 0x74<br />
|-<br />
| 0x80<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Dsi<br />
| rowspan="2" | 1<br />
|<br />
|-<br />
| 0x84<br />
|<br />
|-<br />
| 0x88<br />
| Non-secure<br />
| Iftu<br />
| 1<br />
| Integrated Facility Terminating Unit. See [[IFTU Registers]]. enable: ScePervasiveForDriver_B68254AD/disable: ScePervasiveForDriver_E92E28FF<br />
|-<br />
| 0x8C<br />
| Non-secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_7AE2F8E8/disable: ScePervasiveForDriver_17109C28<br />
|-<br />
| 0x90<br />
| rowspan="3" | Non-secure<br />
| USB0/UDC0<br />
| rowspan="3" | 0xB<br />
| rowspan="3" | See [[UDC]]. enable: ScePervasiveForDriver_4AF7A01E/disable: ScePervasiveForDriver_13CC07C9 <br> <br> 0x1 - USB Host Controller <br> 0x2 - USB Device Controller <br> 0x8 - ????<br />
|-<br />
| 0x94<br />
| USB1/UDC1<br />
|-<br />
| 0x98<br />
| USB2/UDC2<br />
|-<br />
| 0xA0<br />
| rowspan="4" | Non-secure<br />
| Sdif0 (emmc)<br />
| rowspan="4" | 1<br />
| rowspan="4" | Storage Device InterFace<br />
|-<br />
| 0xA4<br />
| Sdif1 (gcsd)<br />
|-<br />
| 0xA8<br />
| Sdif2<br />
|-<br />
| 0xAC<br />
| Sdif3<br />
|-<br />
| 0xB0<br />
| Non-secure<br />
| Msif<br />
| 1<br />
| Memory Stick InterFace. See [[MSIF Registers]].<br />
|-<br />
| 0xC0<br />
| rowspan="8" | Non-secure<br />
| rowspan="8" | I2S (Audio)<br />
| rowspan="8" | 1<br />
| rowspan="8" | Inter-IC Sound<br />
|-<br />
| 0xC4<br />
|-<br />
| 0xC8<br />
|-<br />
| 0xCC<br />
|-<br />
| 0xD0<br />
|-<br />
| 0xD4<br />
|-<br />
| 0xD8<br />
|-<br />
| 0xDC<br />
|-<br />
| 0xE0<br />
| rowspan="3" | Non-secure<br />
| rowspan="3" | SrcMix<br />
| rowspan="3" | 1<br />
| rowspan="3" | Source Mixer<br />
|-<br />
| 0xE4<br />
|-<br />
| 0xE8<br />
|-<br />
| 0xF0<br />
| Non-secure<br />
| SPDIF (Audio)<br />
| 1<br />
| Sony/Philips Digital InterFace<br />
|-<br />
| 0x100<br />
| Non-secure<br />
| Gpio<br />
| 1<br />
| General Purpose Input/Output. See [[GPIO Registers]].<br />
|-<br />
| 0x104<br />
| rowspan="3" | Non-secure<br />
| Spi (Syscon)<br />
| rowspan="3" | 1<br />
| rowspan="3" | Serial Peripheral Interface. See [[SPI Registers]].<br />
|-<br />
| 0x108<br />
| Spi (Motion)<br />
|-<br />
| 0x10C<br />
| Spi (OLED)<br />
|-<br />
| 0x110<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | I2C<br />
| rowspan="2" | 1<br />
| rowspan="2" | Inter-Integrated Circuit. See [[I2C Registers]].<br />
|-<br />
| 0x114<br />
|-<br />
| 0x120<br />
| rowspan="7" | Non-secure<br />
| Uart0 (Console)<br />
| rowspan="7" | 1<br />
| rowspan="7" | Universal Asynchronous Receiver Transmitter. See [[UART Registers]].<br />
|-<br />
| 0x124<br />
| Uart1<br />
|-<br />
| 0x128<br />
| Uart2<br />
|-<br />
| 0x12C<br />
| Uart3<br />
|-<br />
| 0x130<br />
| Uart4<br />
|-<br />
| 0x134<br />
| Uart5 (3G Modem)<br />
|-<br />
| 0x138<br />
| Uart6<br />
|-<br />
| 0x154<br />
| Secure?<br />
| Debug Bus<br />
| 1<br />
| Taken out of reset by SKBL if Development mode or DIPsw 0xC0/0xC1/0xC2 is set<br />
|-<br />
| 0x158<br />
| Secure?<br />
| ?<br />
| 1<br />
|<br />
|-<br />
| 0x160<br />
| Secure?<br />
| LPDDR2MAIN (DDRIF0)<br />
| 1<br />
|<br />
|-<br />
| 0x164<br />
| Secure?<br />
| LPDDR2SUB (DDRIF1)<br />
| 1<br />
|<br />
|-<br />
| 0x170<br />
| ?<br />
| Timer<br />
| 1?<br />
|<br />
|-<br />
| rowspan="2" | 0x178<br />
| rowspan="2" | Secure?<br />
| SPM32<br />
| 4<br />
| Scratch Pad Memory 32KiB<br />
|-<br />
| SPM128<br />
| 8<br />
| Scratch Pad Memory 128KiB<br />
|<br />
|-<br />
| 0x17C<br />
| Secure?<br />
| Venezia?<br />
| 1?<br />
| Must be != 0 for [[SceKernelBusError]] to dump Venezia registers.<br />
|-<br />
| 0x180<br />
| Secure<br />
| VIP?<br />
| 1<br />
| Must be != 0 for [[SceKernelBusError]] to dump VIP registers. enable: ScePervasiveForDriver_EBE9C84E/disable: ScePervasiveForDriver_8CF567AD<br />
|-<br />
| 0x190<br />
| Secure<br />
| bigmac or emmc cryptor<br />
| ?<br />
| x<br />
|}<br />
<br />
== ScePervasiveGate (0xE3102000) ==<br />
<br />
Devices can be clock gated to preserve battery.<br />
<br />
To enable clock gate (request the clock of a device to be enabled), do <code>*REG32(0xE3102000 + dev_off) |= mask</code>.<br />
<br />
To disable clock gate (request the clock of a device to be disabled), do <code>*REG32(0xE3102000 + dev_off) &= ~mask</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
! dev_off<br />
! Access<br />
! Device<br />
! Gate Mask<br />
! Comment<br />
|-<br />
| 0x0<br />
| Secure?<br />
| ?<br />
| ?<br />
|<br />
|-<br />
| 0x4<br />
| Secure?<br />
| ARM Debugger?<br />
| 1<br />
| Of ARM coprocessor 14?<br />
|-<br />
| 0x10<br />
| Non-secure<br />
| GPU<br />
| v & 0xF000F<br />
| enable: ScePervasiveForDriver_39E51AE2/disable: ScePervasiveForDriver_CA0ACFC5<br />
|-<br />
| 0x20<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_8EE3AEDF/disable: ScePervasiveForDriver_3BF2A9B5<br />
|-<br />
| 0x24<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_7F4AB4AA/disable: ScePervasiveForDriver_0EBBE8DE<br />
|-<br />
| 0x28<br />
| Secure<br />
| CompatRAM (2MiB)<br />
| 1<br />
| enable: ScePervasiveForDriver_B2EE45C9/disable: ScePervasiveForDriver_39979C55<br />
|-<br />
| 0x30<br />
| Non-secure<br />
| Venezia<br />
| 1 (2 for secure)<br />
| enable: ScePervasiveForDriver_FB01A2DD/disable: ScePervasiveForDriver_2EEBE9AE<br />
|-<br />
| 0x34<br />
| Non-secure<br />
| Vip<br />
| 1<br />
| enable: ScePervasiveForDriver_B1CFA18F/disable: ScePervasiveForDriver_03E1FAA6<br />
|-<br />
| 0x40<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x44<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x48<br />
| Secure<br />
| DebugPA<br />
| 1 (also has 2?)<br />
|<br />
|-<br />
| 0x4C<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x50<br />
| Secure<br />
| DMAC0<br />
| 1<br />
|<br />
|-<br />
| 0x54<br />
| Secure<br />
| DMAC1<br />
| 1<br />
|<br />
|-<br />
| 0x58<br />
| Secure<br />
| DMAC2<br />
| 1<br />
|<br />
|-<br />
| 0x5C<br />
| Secure<br />
| DMAC3<br />
| 1<br />
|<br />
|-<br />
| 0x60<br />
| Secure<br />
| DMAC4<br />
| 1<br />
|<br />
|-<br />
| 0x64<br />
| Secure<br />
| DMAC5<br />
| 1<br />
|<br />
|-<br />
| 0x68<br />
| Secure<br />
| DMAC6<br />
| 1<br />
| need devmode or dipsw 0xC0 or 0xC1 or 0xC2.<br />
|-<br />
| 0x70<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Csi<br />
| rowspan="2" | 1<br />
| rowspan="2" | Camera Serial Interface<br />
|-<br />
| 0x74<br />
|-<br />
| 0x80<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Dsi<br />
| rowspan="2" | 1<br />
|<br />
|-<br />
| 0x84<br />
|<br />
|-<br />
| 0x88<br />
| Non-secure<br />
| Iftu<br />
| 1<br />
| Integrated Facility Terminating Unit. See [[IFTU Registers]]. enable: ScePervasiveForDriver_07F2A738/disable: ScePervasiveForDriver_5AFE0AF0<br />
|-<br />
| 0x8C<br />
| Non-secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_C0C842FE/disable: ScePervasiveForDriver_9BB7B932<br />
|-<br />
| 0x90<br />
| rowspan="3" | Non-secure<br />
| USB0/UDC0<br />
| rowspan="3" | 0xB<br />
| rowspan="3" | See [[UDC]]. enable: ScePervasiveForDriver_A2EFD7AF/disable: ScePervasiveForDriver_AD1E81EB <br> <br> 0x1 - USB Host Controller <br> 0x2 - USB Device Controller <br> 0x8 - ????<br />
|-<br />
| 0x94<br />
| USB1/UDC1<br />
|-<br />
| 0x98<br />
| USB2/UDC2<br />
|-<br />
| 0xA0<br />
| rowspan="4" | Non-secure<br />
| Sdif0 (emmc)<br />
| rowspan="4" | 1<br />
| rowspan="4" | Storage Device InterFace<br />
|-<br />
| 0xA4<br />
| Sdif1 (gcsd)<br />
|-<br />
| 0xA8<br />
| Sdif2<br />
|-<br />
| 0xAC<br />
| Sdif3<br />
|-<br />
| 0xB0<br />
| Non-secure<br />
| Msif<br />
| 1<br />
| Memory Stick InterFace. See [[MSIF Registers]].<br />
|-<br />
| 0xC0<br />
| rowspan="8" | Non-secure<br />
| rowspan="8" | I2S (Audio)<br />
| rowspan="8" | 1<br />
| rowspan="8" | Inter-IC Sound<br />
|-<br />
| 0xC4<br />
|-<br />
| 0xC8<br />
|-<br />
| 0xCC<br />
|-<br />
| 0xD0<br />
|-<br />
| 0xD4<br />
|-<br />
| 0xD8<br />
|-<br />
| 0xDC<br />
|-<br />
| 0xE0<br />
| rowspan="3" | Non-secure<br />
| rowspan="3" | SrcMix<br />
| rowspan="3" | 1<br />
| rowspan="3" | Source Mixer<br />
|-<br />
| 0xE4<br />
|-<br />
| 0xE8<br />
|-<br />
| 0xF0<br />
| Non-secure<br />
| SPDIF (Audio)<br />
| 1<br />
| Sony/Philips Digital InterFace<br />
|-<br />
| 0x100<br />
| Non-secure<br />
| Gpio<br />
| 1<br />
| General Purpose Input/Output. See [[GPIO Registers]].<br />
|-<br />
| 0x104<br />
| rowspan="3" | Non-secure<br />
| Spi (Syscon)<br />
| rowspan="3" | 1<br />
| rowspan="3" | Serial Peripheral Interface. See [[SPI Registers]].<br />
|-<br />
| 0x108<br />
| Spi (Motion)<br />
|-<br />
| 0x10C<br />
| Spi (OLED)<br />
|-<br />
| 0x110<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | I2C<br />
| rowspan="2" | 1<br />
| rowspan="2" | Inter-Integrated Circuit. See [[I2C Registers]].<br />
|-<br />
| 0x114<br />
|-<br />
| 0x120<br />
| rowspan="7" | Non-secure<br />
| Uart0 (Console)<br />
| rowspan="7" | 1<br />
| rowspan="7" | Universal Asynchronous Receiver Transmitter. See [[UART Registers]].<br />
|-<br />
| 0x124<br />
| Uart1<br />
|-<br />
| 0x128<br />
| Uart2<br />
|-<br />
| 0x12C<br />
| Uart3<br />
|-<br />
| 0x130<br />
| Uart4<br />
|-<br />
| 0x134<br />
| Uart5 (3G Modem)<br />
|-<br />
| 0x138<br />
| Uart6<br />
|-<br />
| 0x154<br />
| Secure?<br />
| Debug Bus<br />
| 1<br />
| See [[#ScePervasiveReset_.280xE3101000.29|ScePervasiveReset]] for details.<br />
|-<br />
| 0x158<br />
| Secure?<br />
| ?<br />
| 1<br />
|<br />
|-<br />
| 0x160<br />
| Secure?<br />
| LPDDR2MAIN (DDRIF0)<br />
| 1<br />
|<br />
|-<br />
| 0x164<br />
| Secure?<br />
| LPDDR2SUB (DDRIF1)<br />
| 1<br />
|<br />
|-<br />
| 0x170<br />
| ?<br />
| Timer<br />
| 1?<br />
|<br />
|-<br />
| rowspan="2" | 0x178<br />
| rowspan="2" | Secure?<br />
| SPM32<br />
| 4<br />
| Scratch Pad Memory 32KiB<br />
|-<br />
| SPM128<br />
| 8<br />
| Scratch Pad Memory 128KiB<br />
|}<br />
<br />
== ScePervasiveVid (0xE3104000) ==<br />
<br />
Voltage integer data<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset<br />
! Group<br />
! Value<br />
|-<br />
| 0x0<br />
| ARM<br />
| 0<br />
|-<br />
| 0x4<br />
| ARM<br />
| 0x1F<br />
|-<br />
| 0x8<br />
| ARM<br />
| 0x27<br />
|-<br />
| 0xC<br />
| ARM<br />
| 0x2F<br />
|-<br />
| 0x10<br />
| ARM<br />
| 0x31<br />
|-<br />
| 0x14<br />
| ARM<br />
| 0x31<br />
|-<br />
| 0x40<br />
| ?<br />
| 0x1D<br />
|-<br />
| 0x44<br />
| ?<br />
| 0x22<br />
|-<br />
| 0x48<br />
| ?<br />
| 0x2E<br />
|-<br />
| 0x4C<br />
| ?<br />
| 0x25<br />
|-<br />
| 0x60<br />
| ?<br />
| 0x1D<br />
|-<br />
| 0x64<br />
| ?<br />
| 0x27<br />
|-<br />
| 0x68<br />
| ?<br />
| 0x2E<br />
|-<br />
| 0x6C<br />
| ?<br />
| 0x30<br />
|-<br />
| 0xA0<br />
| Bus<br />
| 0<br />
|-<br />
| 0xA4<br />
| Bus<br />
| 0x1E<br />
|-<br />
| 0xA8<br />
| Bus<br />
| 0x27<br />
|-<br />
| 0xAC<br />
| Bus<br />
| 0x2E<br />
|}<br />
<br />
== Base Clock ==<br />
<br />
Registers at physical address <code>0xE3103000</code> (ScePervasiveBaseClk).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset !! Accessibly !! Description<br />
|-<br />
| 0x0/0x4 || Non-Secure/Secure || [[Pervasive#ARM Clocks|ARM Clocks]]<br />
|-<br />
| 0x10 || Non-Secure/Secure || GPU Clock<br />
|-<br />
| 0x20 || Non-Secure/Secure (?) || [[Pervasive#VENEZIA Clock|VENEZIA Clock]]<br />
|-<br />
| 0x30 || Non-Secure || [[Pervasive#Vip Clock|Vip Clock]]<br />
|-<br />
| 0x40 || Secure || [[Pervasive#CMeP Clock|CMeP Clock]]<br />
|-<br />
| 0x44 || Non-Secure || [[Pervasive#CameraBus Clock|CameraBus Clock]]<br />
|-<br />
| 0x50 || Secure || Could be Center Xbar/Bus clock<br />
|-<br />
| 0x60 || Non-Secure || Related to offset 0x60/0x64/0xA4.<br />
|-<br />
| 0x64 || Non-Secure || Related to offset 0x60/0x64/0xA4.<br />
|-<br />
| 0x68 || Non-Secure || Unknown. freq setting by ScePervasiveForDriver_A96642E3<br />
|-<br />
| 0x70 || Non-Secure || Related to Audio. freq setting by ScePervasiveForDriver_925D9D24<br />
|-<br />
| 0x90 || Secure || [[Pervasive#DRAM Main Clock|DRAM Main Clock]]<br />
|-<br />
| 0x94 || Secure || [[Pervasive#DRAM Sub Clock|DRAM Sub Clock]]<br />
|-<br />
| 0xA4 || Non-Secure || Related to offset 0x60/0x64/0xA4.<br />
|-<br />
| 0xB0 || Non-Secure || [[Pervasive#Msif Clock|Msif Clock]]<br />
|-<br />
| 0xC4 || Secure || [[Pervasive#Compat/GpuXbar Clock|Compat/GpuXbar Clock (PSP stuff)]]<br />
|-<br />
| 0x100 || Non-Secure || DSI1 Clock<br />
|-<br />
| 0x180 || Non-Secure || DSI0 Clock<br />
|-<br />
| 0x1D0 || Non-Secure || HDMI Clock<br />
|-<br />
| 0x1F0 || Non-Secure || [[Pervasive#Dmac5 Clock|Dmac5 Clock]]<br />
|-<br />
| 0x210 || Non-Secure || Related to Audio. freq setting by ScePervasiveForDriver_2FB5F88F<br />
|-<br />
| 0x214 || Non-Secure || [[Pervasive#Sys Clock|Sys Clock]]<br />
|}<br />
<br />
=== ARM Clocks ===<br />
<br />
The ARM core clock and L2 cache clock consist of two registers 0xE3103000 and 0xE3103004.<br />
<br />
Register 0xE3103000 selects the base clock frequency.<br />
<br />
It seems that 42-freq is selected internally when Undefined index is selected<br />
<br />
{| class="wikitable sortable mw-collapsible"<br />
|+ 0xE3103000 ARM clock list<br />
|-<br />
! Index !! ARM core freq !! L2 cache freq<br />
|-<br />
| 0 || Undefined || Undefined<br />
|-<br />
| 1 || 42 || 42<br />
|-<br />
| 2 || Undefined || Undefined<br />
|-<br />
| 3 || 83 || 83<br />
|-<br />
| 4 || 111 || 111<br />
|-<br />
| 5 || 166 || 166<br />
|-<br />
| 6 || 222 || 222<br />
|-<br />
| 7 || 333 || 333<br />
|-<br />
| 8 || 444 || 222<br />
|-<br />
| 9 || 500 || 250<br />
|-<br />
| 10 || 333 || 166<br />
|-<br />
| 11 || Undefined || Undefined<br />
|-<br />
| 12 || 125 || 125<br />
|-<br />
| 13 || 250 || 250<br />
|-<br />
| 14 || 444 || 444<br />
|-<br />
| 15 || 500 || 500<br />
|}<br />
<br />
Register 0xE3103004 adjusts the selected base clock frequency.<br />
<br />
0xE3103004 sets the index that adjusts the base clock frequency.<br />
<br />
It seems that the adjustment can be expressed by the following formula.<br />
<br />
<code>f(n) = n(1 - adjust_index / 16)</code><br />
<br />
adjust_index ranges from 0 to 8. Selecting 9 or higher selects 0 internally.<br />
<br />
Also a joke-like approximation : <code>f(n) = n(1 - aπ^-(1 + √2))</code>.<br />
<br />
However, not sure if this formula is completely correct, but It can see that it is very close to the value of yifan's clock analyzer.<br />
<br />
{| class="wikitable sortable mw-collapsible mw-collapsed"<br />
|+ ARM core measured adjust freq<br />
|-<br />
! base !! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7 !! 8<br />
|-<br />
| 1 || 41.666 MHz || 39.62 MHz || 36.458 MHz || 33.854 MHz || 31.249 MHz || 28.645 MHz || 26.41 MHz || 23.437 MHz || 20.833 MHz<br />
|-<br />
| 3 || 83.333 MHz || 78.124 MHz || 72.916 MHz || 67.708 MHz || 62.499 MHz || 57.291 MHz || 52.83 MHz || 46.874 MHz || 41.666 MHz<br />
|-<br />
| 4 || 111.111 MHz || 104.166 MHz || 97.222 MHz || 90.277 MHz || 83.333 MHz || 76.388 MHz || 69.444 MHz || 62.499 MHz || 55.555 MHz<br />
|-<br />
| 5 || 166.666 MHz || 156.249 MHz || 145.833 MHz || 135.416 MHz || 124.999 MHz || 114.583 MHz || 104.166 MHz || 93.749 MHz || 83.333 MHz<br />
|-<br />
| 6 || 222.222 MHz || 208.333 MHz || 194.444 MHz || 180.555 MHz || 166.666 MHz || 152.777 MHz || 138.888 MHz || 124.999 MHz || 111.111 MHz<br />
|-<br />
| 7 || 333.333 MHz || 312.499 MHz || 291.666 MHz || 270.833 MHz || 249.999 MHz || 229.166 MHz || 208.333 MHz || 187.499 MHz || 166.666 MHz<br />
|-<br />
| 8 || 444.444 MHz || 416.666 MHz || 388.888 MHz || 361.111 MHz || 333.333 MHz || 305.555 MHz || 277.777 MHz || 249.999 MHz || 222.222 MHz<br />
|-<br />
| 9 || 500.0 MHz || 468.749 MHz || 437.499 MHz || 406.249 MHz || 374.999 MHz || 343.749 MHz || 312.499 MHz || 281.249 MHz || 249.999 MHz<br />
|-<br />
| 10 || 333.333 MHz || 312.499 MHz || 291.666 MHz || 270.833 MHz || 249.999 MHz || 229.166 MHz || 208.333 MHz || 187.499 MHz || 166.666 MHz<br />
|-<br />
| 12 || 124.999 MHz || 117.187 MHz || 109.374 MHz || 101.562 MHz || 93.749 MHz || 85.937 MHz || 78.124 MHz || 70.312 MHz || 62.499 MHz<br />
|-<br />
| 13 || 249.999 MHz || 234.374 MHz || 218.749 MHz || 203.124 MHz || 187.499 MHz || 171.874 MHz || 156.249 MHz || 140.624 MHz || 124.999 MHz<br />
|-<br />
| 14 || 444.444 MHz || 416.666 MHz || 388.888 MHz || 361.111 MHz || 333.333 MHz || 305.555 MHz || 277.777 MHz || 249.999 MHz || 222.222 MHz<br />
|-<br />
| 15 || 500.0 MHz || 468.749 MHz || 437.499 MHz || 406.249 MHz || 374.999 MHz || 343.749 MHz || 312.499 MHz || 281.249 MHz || 249.999 MHz<br />
|}<br />
<br />
=== ARM Clocks (by yifan's clock analyzer) ===<br />
<br />
<!--<br />
TODO : Remove this? or update to better document?<br />
--><br />
<br />
The ARM CPU clocks are controlled by two registers at physical address <code>0xE3103000</code> (ScePervasiveBaseClk). Currently, it is unknown how the values are interpreted. However, <code>0xE3103000</code> (one word) takes values 0 to 16, and increases clock speed while <code>0xE3103004</code> (single byte) takes values 0 to 8 and decreases clock speed. It is likely related to a PLL multiply and divide function. The input clock signal comes from a [http://www.onsemi.com/PowerSolutions/product.do?id=P1P40167 P1P40167] clock synthesizer (found on the bottom of the board under the main SoC). It takes a 27MHz crystal and generates a 37MHz clock which feeds directly into the SoC's internal PLL.<br />
<br />
The following are tests run to determine what the values of each register corresponds to. It appears that the maximum clock speed is 499MHz and the minimum clock speed is 16MHz.<br />
<br />
<b>These clocks may be wrong. "Kernel Clock Speed" is "Clock Speed + 5". However, there is an error of ± 5 to 6 in "Clock Speed".</b><br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! <code>0xE3103000</code> !! <code>0xE3103004</code> !! Clock Speed (MHz) !! Kernel Clock Speed (MHz)<br />
|-<br />
| 0 || 0 || 37 || 42<br />
|-<br />
| 0 || 1 || 35 || 40<br />
|-<br />
| 0 || 2 || 32 || 37<br />
|-<br />
| 0 || 3 || 29 || 34<br />
|-<br />
| 0 || 4 || 27 || 32<br />
|-<br />
| 0 || 5 || 24 || 29<br />
|-<br />
| 0 || 6 || 22 || 27<br />
|-<br />
| 0 || 7 || 19 || 24<br />
|-<br />
| 0 || 8 || 16 || 21<br />
|-<br />
| 1 || 0 || 37 || 42<br />
|-<br />
| 1 || 1 || 35 || 40<br />
|-<br />
| 1 || 2 || 32 || 37<br />
|-<br />
| 1 || 3 || 30 || 35<br />
|-<br />
| 1 || 4 || 27 || 32<br />
|-<br />
| 1 || 5 || 24 || 29<br />
|-<br />
| 1 || 6 || 22 || 27<br />
|-<br />
| 1 || 7 || 19 || 24<br />
|-<br />
| 1 || 8 || 16 || 21<br />
|-<br />
| 2 || 0 || 37 || 42<br />
|-<br />
| 2 || 1 || 35 || 40<br />
|-<br />
| 2 || 2 || 32 || 37<br />
|-<br />
| 2 || 3 || 30 || 35<br />
|-<br />
| 2 || 4 || 27 || 32<br />
|-<br />
| 2 || 5 || 24 || 29<br />
|-<br />
| 2 || 6 || 22 || 27<br />
|-<br />
| 2 || 7 || 19 || 24<br />
|-<br />
| 2 || 8 || 16 || 21<br />
|-<br />
| 3 || 0 || 79 || 84<br />
|-<br />
| 3 || 1 || 74 || 79<br />
|-<br />
| 3 || 2 || 69 || 74<br />
|-<br />
| 3 || 3 || 63 || 68<br />
|-<br />
| 3 || 4 || 58 || 63<br />
|-<br />
| 3 || 5 || 53 || 58<br />
|-<br />
| 3 || 6 || 48 || 53<br />
|-<br />
| 3 || 7 || 43 || 48<br />
|-<br />
| 3 || 8 || 37 || 42<br />
|-<br />
| 4 || 0 || 107 || 112<br />
|-<br />
| 4 || 1 || 100 || 105<br />
|-<br />
| 4 || 2 || 93 || 98<br />
|-<br />
| 4 || 3 || 86 || 91<br />
|-<br />
| 4 || 4 || 79 || 84<br />
|-<br />
| 4 || 5 || 72 || 77<br />
|-<br />
| 4 || 6 || 65 || 70<br />
|-<br />
| 4 || 7 || 58 || 63<br />
|-<br />
| 4 || 8 || 51 || 56<br />
|-<br />
| 5 || 0 || 162 || 167<br />
|-<br />
| 5 || 1 || 152 || 157<br />
|-<br />
| 5 || 2 || 142 || 147<br />
|-<br />
| 5 || 3 || 131 || 136<br />
|-<br />
| 5 || 4 || 121 || 126<br />
|-<br />
| 5 || 5 || 110 || 115<br />
|-<br />
| 5 || 6 || 100 || 105<br />
|-<br />
| 5 || 7 || 90 || 95<br />
|-<br />
| 5 || 8 || 79 || 84<br />
|-<br />
| 6 || 0 || 218 || 223<br />
|-<br />
| 6 || 1 || 204 || 209<br />
|-<br />
| 6 || 2 || 190 || 195<br />
|-<br />
| 6 || 3 || 176 || 181<br />
|-<br />
| 6 || 4 || 163 || 168<br />
|-<br />
| 6 || 5 || 148 || 153<br />
|-<br />
| 6 || 6 || 135 || 140<br />
|-<br />
| 6 || 7 || 121 || 126<br />
|-<br />
| 6 || 8 || 107 || 112<br />
|-<br />
| 7 || 0 || 329 || 334<br />
|-<br />
| 7 || 1 || 308 || 313<br />
|-<br />
| 7 || 2 || 287 || 292<br />
|-<br />
| 7 || 3 || 266 || 271<br />
|-<br />
| 7 || 4 || 246 || 251<br />
|-<br />
| 7 || 5 || 225 || 230<br />
|-<br />
| 7 || 6 || 204 || 209<br />
|-<br />
| 7 || 7 || 183 || 188<br />
|-<br />
| 7 || 8 || 162 || 167<br />
|-<br />
| 8 || 0 || 439 || 444<br />
|-<br />
| 8 || 1 || 411 || 416<br />
|-<br />
| 8 || 2 || 384 || 389<br />
|-<br />
| 8 || 3 || 356 || 361<br />
|-<br />
| 8 || 4 || 329 || 334<br />
|-<br />
| 8 || 5 || 301 || 306<br />
|-<br />
| 8 || 6 || 273 || 278<br />
|-<br />
| 8 || 7 || 246 || 251<br />
|-<br />
| 8 || 8 || 218 || 223<br />
|-<br />
| 9 || 0 || 494 || 499<br />
|-<br />
| 9 || 1 || 463 || 468<br />
|-<br />
| 9 || 2 || 432 || 437<br />
|-<br />
| 9 || 3 || 401 || 406<br />
|-<br />
| 9 || 4 || 370 || 375<br />
|-<br />
| 9 || 5 || 339 || 344<br />
|-<br />
| 9 || 6 || 308 || 313<br />
|-<br />
| 9 || 7 || 277 || 282<br />
|-<br />
| 9 || 8 || 245 || 250<br />
|-<br />
| 10 || 0 || 328 || 333<br />
|-<br />
| 10 || 1 || 308 || 313<br />
|-<br />
| 10 || 2 || 287 || 292<br />
|-<br />
| 10 || 3 || 266 || 271<br />
|-<br />
| 10 || 4 || 245 || 250<br />
|-<br />
| 10 || 5 || 225 || 230<br />
|-<br />
| 10 || 6 || 204 || 209<br />
|-<br />
| 10 || 7 || 183 || 188<br />
|-<br />
| 10 || 8 || 162 || 167<br />
|-<br />
| 11 || 0 || 37 || 42<br />
|-<br />
| 11 || 1 || 35 || 40<br />
|-<br />
| 11 || 2 || 32 || 37<br />
|-<br />
| 11 || 3 || 30 || 35<br />
|-<br />
| 11 || 4 || 27 || 32<br />
|-<br />
| 11 || 5 || 24 || 29<br />
|-<br />
| 11 || 6 || 22 || 27<br />
|-<br />
| 11 || 7 || 19 || 24<br />
|-<br />
| 11 || 8 || 16 || 21<br />
|-<br />
| 12 || 0 || 121 || 126<br />
|-<br />
| 12 || 1 || 113 || 118<br />
|-<br />
| 12 || 2 || 105 || 110<br />
|-<br />
| 12 || 3 || 97 || 102<br />
|-<br />
| 12 || 4 || 90 || 95<br />
|-<br />
| 12 || 5 || 82 || 87<br />
|-<br />
| 12 || 6 || 74 || 79<br />
|-<br />
| 12 || 7 || 66 || 71<br />
|-<br />
| 12 || 8 || 58 || 63<br />
|-<br />
| 13 || 0 || 245 || 250<br />
|-<br />
| 13 || 1 || 230 || 235<br />
|-<br />
| 13 || 2 || 214 || 219<br />
|-<br />
| 13 || 3 || 199 || 204<br />
|-<br />
| 13 || 4 || 183 || 188<br />
|-<br />
| 13 || 5 || 168 || 173<br />
|-<br />
| 13 || 6 || 152 || 157<br />
|-<br />
| 13 || 7 || 136 || 141<br />
|-<br />
| 13 || 8 || 121 || 126<br />
|-<br />
| 14 || 0 || 439 || 444<br />
|-<br />
| 14 || 1 || 412 || 417<br />
|-<br />
| 14 || 2 || 384 || 389<br />
|-<br />
| 14 || 3 || 356 || 361<br />
|-<br />
| 14 || 4 || 329 || 334<br />
|-<br />
| 14 || 5 || 301 || 306<br />
|-<br />
| 14 || 6 || 273 || 278<br />
|-<br />
| 14 || 7 || 246 || 251<br />
|-<br />
| 14 || 8 || 218 || 223<br />
|-<br />
| 15 || 0 || 494 || 499<br />
|-<br />
| 15 || 1 || 463 || 468<br />
|-<br />
| 15 || 2 || 433 || 438<br />
|-<br />
| 15 || 3 || 401 || 406<br />
|-<br />
| 15 || 4 || 370 || 375<br />
|-<br />
| 15 || 5 || 339 || 344<br />
|-<br />
| 15 || 6 || 308 || 313<br />
|-<br />
| 15 || 7 || 277 || 282<br />
|-<br />
| 15 || 8 || 245 || 250<br />
|-<br />
| 16 || 0 || 37 || 42<br />
|-<br />
| 16 || 1 || 35 || 40<br />
|-<br />
| 16 || 2 || 32 || 37<br />
|-<br />
| 16 || 3 || 29 || 34<br />
|-<br />
| 16 || 4 || 27 || 32<br />
|-<br />
| 16 || 5 || 24 || 29<br />
|-<br />
| 16 || 6 || 22 || 27<br />
|-<br />
| 16 || 7 || 19 || 24<br />
|-<br />
| 16 || 8 || 16 || 21<br />
|}<br />
<br />
=== VENEZIA Clock ===<br />
The register at physical address <code>0xE3103020</code> seems to control the clock frequency of VENEZIA.<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0x1 || 41MHz<br />
|-<br />
| 0x2 || 55MHz<br />
|-<br />
| 0x3 || 83MHz<br />
|-<br />
| 0x4 || 111MHz<br />
|-<br />
| 0x5 || 166MHz<br />
|-<br />
| 0x6 || 222MHz<br />
|-<br />
| 0x7 || 333MHz<br />
|}<br />
<br />
=== Vip Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0x1 || 41MHz<br />
|-<br />
| 0x2 || 55MHz<br />
|-<br />
| 0x3 || 83MHz<br />
|-<br />
| 0x4 || 111MHz<br />
|-<br />
| 0x5 || 166MHz<br />
|-<br />
| 0x6 || 222MHz<br />
|}<br />
<br />
=== CMeP Clock ===<br />
The low 8 bits of the register at physical address <code>0xE3103040</code> control CMeP clock speed, and Main Xbar, I/O Bus speed too.<br />
This was guessed because it is used in a <code>usleep()</code>-like function to calculate the input for a <code>sleep_for_cycles()</code> function.<br />
<br />
<br />
Testing was performed using SceLT5 as a time reference (µs-accurate), and compared against the hardcoded table in <code>second_loader</code>.<br />
{| class="wikitable"<br />
|-<br />
! Value !! Main Xbar !! I/O Bus !! CMeP speed (measured) !! Table value<br />
|-<br />
| 0x0 || Unknown || Unknown || 41.5 MHz<br />
|rowspan="8"|N/A<br />
|-<br />
| 0x1 || Unknown || Unknown || 41.5 MHz<br />
|-<br />
| 0x2 || Unknown || Unknown || 55.4 MHz<br />
|-<br />
| 0x3 || Unknown || Unknown || 83.0 MHz<br />
|-<br />
| 0x4 || Unknown || Unknown || 110.7 MHz<br />
|-<br />
| 0x5 || Unknown || Unknown || 166.0 MHz<br />
|-<br />
| 0x6 || Unknown || Unknown || 110.7 MHz<br />
|-<br />
| 0x7 || Unknown || Unknown || 166.0 MHz<br />
|-<br />
| 0x10000 || Undefined || Undefined || 27.7 MHz || 50 MHz<br />
|-<br />
| 0x10001 || Undefined || Undefined || 27.7 MHz || 50 MHz<br />
|-<br />
| 0x10002 || 56 MHz || 27 MHz || 27.7 MHz || 27 MHz<br />
|-<br />
| 0x10003 || 83 MHz || 42 MHz || 41.5 MHz || 42 MHz<br />
|-<br />
| 0x10004 || 111 MHz || 56 MHz || 55.3 MHz || 56 MHz<br />
|-<br />
| 0x10005 || 166 MHz || 83 MHz || 83.0 MHz || 83 MHz<br />
|-<br />
| 0x10006 || 222 MHz || 111 MHz || 110.7 MHz || 111 MHz<br />
|-<br />
| 0x10007 || 333 MHz || 166 MHz || 166.0 MHz || 160 MHz<br />
|}<br />
<br />
<code>second_loader</code> sets the register to 0x10005, meaning CMeP usually runs at 83MHz.<br />
<br />
=== CameraBus Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 1 || 41 MHz<br />
|-<br />
| 2 || 67 MHz<br />
|-<br />
| 3 || 83 MHz<br />
|-<br />
| 4 || 133 MHz<br />
|-<br />
| 5 || 166 MHz<br />
|}<br />
<br />
=== DRAM Main Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed (measured)<br />
|-<br />
| 1 || 170 MHz<br />
|}<br />
<br />
=== DRAM Sub Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed (measured)<br />
|-<br />
| 1 || 170 MHz<br />
|}<br />
<br />
=== Msif Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0x10000 || 20 MHz<br />
|-<br />
| 0x10001 || 40 MHz<br />
|-<br />
| 0x10002 || 60 MHz<br />
|}<br />
<br />
Bit 0x10000 is optional i.e by default Msif runs at 20 MHz. Its effect is unknown.<br />
<br />
=== Compat/GpuXbar Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Compat Clock speed !! GpuXbar Clock speed<br />
|-<br />
| 0 || 333 MHz || 166 MHz<br />
|-<br />
| 1 || Unknown || 111 MHz<br />
|-<br />
| 2 || 222 MHz || 83 MHz<br />
|}<br />
<br />
=== Dmac5 Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 1 || 41 MHz<br />
|-<br />
| 2 || 83 MHz<br />
|-<br />
| 3 || 133 MHz<br />
|-<br />
| 4 || 166 MHz<br />
|}<br />
<br />
=== Sys Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0 || 222 MHz<br />
|-<br />
| 1 || 190 MHz<br />
|}<br />
<br />
== ScePervasive2 (0xE3110000) ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset<br />
! Description<br />
|-<br />
| 0x248<br />
| <code>VIP_PROT_BAP_ERRV</code><br />
|-<br />
| 0x24C<br />
| <code>VIP_PROT_BAP_ERRC</code><br />
|-<br />
| 0x250<br />
| <code>VIP_PROT_BAP_ERRA</code><br />
|-<br />
| 0x254<br />
| <code>VIP_PROT_VDPD_ERRV</code><br />
|-<br />
| 0x258<br />
| <code>VIP_PROT_VDPD_ERRC</code><br />
|-<br />
| 0x25C<br />
| <code>VIP_PROT_VDPD_ERRA</code><br />
|-<br />
| 0x260<br />
| <code>VIP_PROT_VDPM_ERRV</code><br />
|-<br />
| 0x264<br />
| <code>VIP_PROT_VDPM_ERRC</code><br />
|-<br />
| 0x268<br />
| <code>VIP_PROT_VDPM_ERRA</code><br />
|-<br />
| 0x348<br />
| <code>VENE_PROT_REG_ERRV</code><br />
|-<br />
| 0x34C<br />
| <code>VENE_PROT_REG_ERRC</code><br />
|-<br />
| 0x350<br />
| <code>VENE_PROT_REG_ERRA</code><br />
|-<br />
| 0xC00<br />
| 0x0 alias for ARM (0 / 1) = (0x1f000000 / 0x40000000)<br />
|-<br />
| 0xD04<br />
| SPM128 Bus Error Address register<br />
|-<br />
| 0xD08<br />
| SPM128 Bus Error Attribute register<br />
|-<br />
| 0xD14<br />
| SPM32 Bus Error Address register<br />
|-<br />
| 0xD18<br />
| SPM32 Bus Error Attribute register<br />
|-<br />
| 0xD24<br />
| CompatRAM Bus Error Address register<br />
|-<br />
| 0xD28<br />
| CompatRAM Bus Error Attribute register<br />
|-<br />
| 0xD34<br />
| Pervasive2 Bus Error Address register - maybe <code>PERVASIVE2_SYS_BEADR</code><br />
|-<br />
| 0xD38<br />
| Pervasive2 Bus Error Attribute register - maybe <code>PERVASIVE2_SYS_BEATB</code><br />
|-<br />
| 0xD44<br />
| SPM128 Secure Bus Error Address register<br />
|-<br />
| 0xD48<br />
| SPM128 Secure Bus Error Attribute register<br />
|-<br />
| 0xD54<br />
| SPM32 Secure Bus Error Address register<br />
|-<br />
| 0xD58<br />
| SPM32 Secure Bus Error Attribute register<br />
|-<br />
| 0xD64<br />
| CompatRAM Secure Bus Error Address register<br />
|-<br />
| 0xD68<br />
| CompatRAM Secure Bus Error Attribute register<br />
|-<br />
| 0xD74<br />
| Pervasive2 Secure Bus Error Address register - maybe <code>PERVASIVE2_SYS_SBEADR</code><br />
|-<br />
| 0xD78<br />
| Pervasive2 Secure Bus Error Attribute register - maybe <code>PERVASIVE2_SYS_SBEATB</code><br />
|-<br />
| 0xD80<br />
| BET0 (Bus Error Target 0) - full name may be <code>PERVASIVE2_SYS_BET0</code><br />
|-<br />
| 0xD90<br />
| BET1 (Bus Error Target 1) - full name may be <code>PERVASIVE2_SYS_BET1</code><br />
|-<br />
| 0xD94<br />
| <code>PERVASIVE2_SYS_BEBT</code> - Bus Error ?Bus Target?<br />
|-<br />
| 0xDC0<br />
| SBET0 (Secure Bus Error Target 0) - full name may be <code>PERVASIVE2_SYS_SBET0</code><br />
|-<br />
| 0xDD0<br />
| SBET1 (Secure Bus Error Target 1) - full name may be <code>PERVASIVE2_SYS_SBET1</code><br />
|-<br />
| 0xDD4<br />
| <code>PERVASIVE2_SYS_SBEBT</code> - Secure Bus Error ?Bus Target?<br />
|-<br />
| 0xF30<br />
| USB PHY ready state - Bit 0 = Port 0, Bit 1 = Port 1, Bit 2 = Port 2<br />
|-<br />
| 0xF34<br />
| USB PHY interrupt state - Bit 0 = Port 0, Bit 1 = Port 1, Bit 2 = Port 2<br />
|-<br />
| 0xF40<br />
| Bit 0 = Memory Card insert state<br />
|-<br />
| 0xF44<br />
| Memory Card insert interrupt state - Bit 0 = Card removed, Bit 1 = Card inserted<br />
|-<br />
| 0xF50<br />
| USB VBUS state - Bit 0 = Port 0, Bit 1 = Port 1, Bit 2 = Port 2<br />
|-<br />
| 0xF54<br />
| USB VBUS interrupt state<br />
|}<br />
<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Pervasive&diff=21100
Pervasive
2024-01-31T23:50:17Z
<p>CelesteBlue: /* revision0 */</p>
<hr />
<div>Pervasive is a device that controls the clocks of most of the devices of the system.<br />
<br />
== ScePervasiveMisc (0xE3100000) ==<br />
<br />
Devices can be fully disabled? by writing a 1 to the corresponding bit of the ScePervasiveMisc (PA <code>0xE3100000</code>) register. To disable the device <code>dev_off</code>, do <code>*REG32(0xE3100000 + (dev_off / 32) * 4) = 1 << (31 - (dev_off % 32))</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset<br />
! Description<br />
|-<br />
| 0x0000<br />
| [[Pervasive#revision0|revision0]]. ex:0x80000115<br />
|-<br />
| 0x0004<br />
| Unknown - SKBL prints <code>L2 Cache is defective</code> if bit 0x2 is set<br />
|-<br />
| 0x0110<br />
| SDIF related<br />
|-<br />
| 0x0114<br />
| SDIF related<br />
|-<br />
| 0x0118<br />
| SDIF related<br />
|-<br />
| 0x011C<br />
| SDIF related<br />
|-<br />
| 0x0124<br />
| SDIF voltage control? - 3.3V by default; <code>1 << sdif_idx</code> to set the SDIF to 1.8V<br />
|-<br />
| 0x0130<br />
| <code>PERVASIVE_SYS_SBEATB</code> - Pervasive Secure Bus Error Attribute<br />
|-<br />
| 0x0134<br />
| <code>PERVASIVE_SYS_SBEADR</code> - Pervasive Secure Bus Error Address<br />
|-<br />
| 0x0138<br />
| <code>PERVASIVE_SYS_BEATB</code> - Pervasive Bus Error Attribute<br />
|-<br />
| 0x013C<br />
| <code>PERVASIVE_SYS_BEADR</code> - Pervasive Bus Error Address<br />
|-<br />
| 0x0194<br />
| gc<br />
|-<br />
| 0x0300<br />
| Unknown<br />
|-<br />
| 0x0304<br />
| Unknown<br />
|-<br />
| 0x0308<br />
| Unknown<br />
|-<br />
| 0x0310<br />
| SDIF related<br />
|}<br />
<br />
=== revision0 ===<br />
<br />
Returned by [[SceLowio#scePervasiveGetSoCRevisionForDriver]], read by [[SKBL]]/[[NSKBL]]/...<br />
<br />
Contains the [[Kermit]] revision (see [[SceSysmem#sceKernelSysrootGetKermitRevisionForKernel|sceKernelSysrootGetKermitRevisionForKernel]]) and other information.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Bit mask !! Information<br />
|-<br />
| <code>0x80000000</code> || Disable LPDDR2SUB. If set, it is not a DevKit.<br />
|-<br />
| <code>0x20000000</code> || Enable 4 LPDDR2 banks (used by [[SceCrashDump]]). Default is 2 LPPDR2 banks.<br />
|-<br />
| <code>0x10000000</code> || Enable 1 LPDDR2 bank (used by [[SceCrashDump]]). Default is 2 LPPDR2 banks.<br />
|-<br />
| <code>0x0001FFFF</code> || Kermit revision<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
! Bit mask !! Information<br />
|-<br />
| <code>0x0001FF00</code> || Kermit new revision (new firmwares) (known values: 0 for KERMIT10_REV_ES4, 1 for KERMIT15_REV_ES1)<br />
|-<br />
| <code>0x000000F0</code> || Kermit major revision (old firmwares): Engineering Sample revision (1 = ES1, 2 = ES2, etc.)<br />
|-<br />
| <code>0x0000000F</code> || Kermit minor revision (old firmwares)<br />
|}<br />
<br />
{| class="wikitable"<br />
|+ Known values<br />
|-<br />
! Hardware !! Value<br />
|-<br />
| CXD5315GG-1 || <code>0x00000042</code><br />
|-<br />
| CXD5315GG || <code>0x80000042</code><br />
|-<br />
| CXD5316GG || <code>0x80000115</code><br />
|-<br />
| CXD5316BGG || <code>0x94000115</code><br />
|}<br />
<br />
== ScePervasiveReset (0xE3101000) ==<br />
<br />
Devices must be put out of reset (device reset disabled) before they are first used.<br />
<br />
To enable reset of a device (put a device in reset), do <code>*REG32(0xE3101000 + dev_off) |= mask</code>.<br />
<br />
To disable reset of a device (put a device out of reset), do <code>*REG32(0xE3101000 + dev_off) &= ~mask</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
! dev_off<br />
! Access<br />
! Device<br />
! Reset Mask<br />
! Comment<br />
|-<br />
| 0x4<br />
| Secure?<br />
| ARM Debugger?<br />
| 1<br />
| Of ARM coprocessor 14?<br />
|-<br />
| 0x10<br />
| Non-secure<br />
| GPU<br />
| 1<br />
| enable: ScePervasiveForDriver_3E79D3D3/disable: ScePervasiveForDriver_8A85E36B<br />
|-<br />
| 0x20<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_377126CD/disable: ScePervasiveForDriver_6E11EB97<br />
|-<br />
| 0x24<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_7B0F388B/disable: ScePervasiveForDriver_4CCD40E6<br />
|-<br />
| 0x28<br />
| Secure<br />
| CompatRAM<br />
| 1<br />
| enable: ScePervasiveForDriver_7C285361/disable: ScePervasiveForDriver_E40BED0F<br />
|-<br />
| 0x30<br />
| Non-secure<br />
| Venezia<br />
| 1<br />
| enable: ScePervasiveForDriver_28731EC5/disable: ScePervasiveForDriver_A7E64C6F<br />
|-<br />
| 0x34<br />
| Non-secure<br />
| Vip<br />
| 1<br />
| enable: ScePervasiveForDriver_31C0A98B/disable: ScePervasiveForDriver_E2D8F6C3<br />
|-<br />
| 0x40<br />
| Secure<br />
| [[SceDbgSdio|SDIO0]]<br />
| 1<br />
|<br />
|-<br />
| 0x44<br />
| Secure<br />
| [[SceDbgSdio|SDIO1]]<br />
| 1<br />
|<br />
|-<br />
| 0x48<br />
| Secure<br />
| DebugPA<br />
| 1<br />
|<br />
|-<br />
| 0x4C<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x50<br />
| Secure<br />
| DMAC0<br />
| 1<br />
|<br />
|-<br />
| 0x54<br />
| Secure<br />
| DMAC1<br />
| 1<br />
|<br />
|-<br />
| 0x58<br />
| Secure<br />
| DMAC2<br />
| 1<br />
|<br />
|-<br />
| 0x5C<br />
| Secure<br />
| DMAC3<br />
| 1<br />
|<br />
|-<br />
| 0x60<br />
| Secure<br />
| DMAC4<br />
| 1<br />
|<br />
|-<br />
| 0x64<br />
| Secure<br />
| DMAC5<br />
| 1<br />
|<br />
|-<br />
| 0x68<br />
| Secure<br />
| DMAC6<br />
| 1<br />
| need devmode or dipsw 0xC0 or 0xC1 or 0xC2.<br />
|-<br />
| 0x70<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Csi<br />
| rowspan="2" | 1<br />
| rowspan="2" | Camera Serial Interface<br />
|-<br />
| 0x74<br />
|-<br />
| 0x80<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Dsi<br />
| rowspan="2" | 1<br />
|<br />
|-<br />
| 0x84<br />
|<br />
|-<br />
| 0x88<br />
| Non-secure<br />
| Iftu<br />
| 1<br />
| Integrated Facility Terminating Unit. See [[IFTU Registers]]. enable: ScePervasiveForDriver_B68254AD/disable: ScePervasiveForDriver_E92E28FF<br />
|-<br />
| 0x8C<br />
| Non-secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_7AE2F8E8/disable: ScePervasiveForDriver_17109C28<br />
|-<br />
| 0x90<br />
| rowspan="3" | Non-secure<br />
| USB0/UDC0<br />
| rowspan="3" | 0xB<br />
| rowspan="3" | See [[UDC]]. enable: ScePervasiveForDriver_4AF7A01E/disable: ScePervasiveForDriver_13CC07C9 <br> <br> 0x1 - USB Host Controller <br> 0x2 - USB Device Controller <br> 0x8 - ????<br />
|-<br />
| 0x94<br />
| USB1/UDC1<br />
|-<br />
| 0x98<br />
| USB2/UDC2<br />
|-<br />
| 0xA0<br />
| rowspan="4" | Non-secure<br />
| Sdif0 (emmc)<br />
| rowspan="4" | 1<br />
| rowspan="4" | Storage Device InterFace<br />
|-<br />
| 0xA4<br />
| Sdif1 (gcsd)<br />
|-<br />
| 0xA8<br />
| Sdif2<br />
|-<br />
| 0xAC<br />
| Sdif3<br />
|-<br />
| 0xB0<br />
| Non-secure<br />
| Msif<br />
| 1<br />
| Memory Stick InterFace. See [[MSIF Registers]].<br />
|-<br />
| 0xC0<br />
| rowspan="8" | Non-secure<br />
| rowspan="8" | I2S (Audio)<br />
| rowspan="8" | 1<br />
| rowspan="8" | Inter-IC Sound<br />
|-<br />
| 0xC4<br />
|-<br />
| 0xC8<br />
|-<br />
| 0xCC<br />
|-<br />
| 0xD0<br />
|-<br />
| 0xD4<br />
|-<br />
| 0xD8<br />
|-<br />
| 0xDC<br />
|-<br />
| 0xE0<br />
| rowspan="3" | Non-secure<br />
| rowspan="3" | SrcMix<br />
| rowspan="3" | 1<br />
| rowspan="3" | Source Mixer<br />
|-<br />
| 0xE4<br />
|-<br />
| 0xE8<br />
|-<br />
| 0xF0<br />
| Non-secure<br />
| SPDIF (Audio)<br />
| 1<br />
| Sony/Philips Digital InterFace<br />
|-<br />
| 0x100<br />
| Non-secure<br />
| Gpio<br />
| 1<br />
| General Purpose Input/Output. See [[GPIO Registers]].<br />
|-<br />
| 0x104<br />
| rowspan="3" | Non-secure<br />
| Spi (Syscon)<br />
| rowspan="3" | 1<br />
| rowspan="3" | Serial Peripheral Interface. See [[SPI Registers]].<br />
|-<br />
| 0x108<br />
| Spi (Motion)<br />
|-<br />
| 0x10C<br />
| Spi (OLED)<br />
|-<br />
| 0x110<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | I2C<br />
| rowspan="2" | 1<br />
| rowspan="2" | Inter-Integrated Circuit. See [[I2C Registers]].<br />
|-<br />
| 0x114<br />
|-<br />
| 0x120<br />
| rowspan="7" | Non-secure<br />
| Uart0 (Console)<br />
| rowspan="7" | 1<br />
| rowspan="7" | Universal Asynchronous Receiver Transmitter. See [[UART Registers]].<br />
|-<br />
| 0x124<br />
| Uart1<br />
|-<br />
| 0x128<br />
| Uart2<br />
|-<br />
| 0x12C<br />
| Uart3<br />
|-<br />
| 0x130<br />
| Uart4<br />
|-<br />
| 0x134<br />
| Uart5 (3G Modem)<br />
|-<br />
| 0x138<br />
| Uart6<br />
|-<br />
| 0x154<br />
| Secure?<br />
| Debug Bus<br />
| 1<br />
| Taken out of reset by SKBL if Development mode or DIPsw 0xC0/0xC1/0xC2 is set<br />
|-<br />
| 0x158<br />
| Secure?<br />
| ?<br />
| 1<br />
|<br />
|-<br />
| 0x160<br />
| Secure?<br />
| LPDDR2MAIN (DDRIF0)<br />
| 1<br />
|<br />
|-<br />
| 0x164<br />
| Secure?<br />
| LPDDR2SUB (DDRIF1)<br />
| 1<br />
|<br />
|-<br />
| 0x170<br />
| ?<br />
| Timer<br />
| 1?<br />
|<br />
|-<br />
| rowspan="2" | 0x178<br />
| rowspan="2" | Secure?<br />
| SPM32<br />
| 4<br />
| Scratch Pad Memory 32KiB<br />
|-<br />
| SPM128<br />
| 8<br />
| Scratch Pad Memory 128KiB<br />
|<br />
|-<br />
| 0x17C<br />
| Secure?<br />
| Venezia?<br />
| 1?<br />
| Must be != 0 for [[SceKernelBusError]] to dump Venezia registers.<br />
|-<br />
| 0x180<br />
| Secure<br />
| VIP?<br />
| 1<br />
| Must be != 0 for [[SceKernelBusError]] to dump VIP registers. enable: ScePervasiveForDriver_EBE9C84E/disable: ScePervasiveForDriver_8CF567AD<br />
|-<br />
| 0x190<br />
| Secure<br />
| bigmac or emmc cryptor<br />
| ?<br />
| x<br />
|}<br />
<br />
== ScePervasiveGate (0xE3102000) ==<br />
<br />
Devices can be clock gated to preserve battery.<br />
<br />
To enable clock gate (request the clock of a device to be enabled), do <code>*REG32(0xE3102000 + dev_off) |= mask</code>.<br />
<br />
To disable clock gate (request the clock of a device to be disabled), do <code>*REG32(0xE3102000 + dev_off) &= ~mask</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
! dev_off<br />
! Access<br />
! Device<br />
! Gate Mask<br />
! Comment<br />
|-<br />
| 0x0<br />
| Secure?<br />
| ?<br />
| ?<br />
|<br />
|-<br />
| 0x4<br />
| Secure?<br />
| ARM Debugger?<br />
| 1<br />
| Of ARM coprocessor 14?<br />
|-<br />
| 0x10<br />
| Non-secure<br />
| GPU<br />
| v & 0xF000F<br />
| enable: ScePervasiveForDriver_39E51AE2/disable: ScePervasiveForDriver_CA0ACFC5<br />
|-<br />
| 0x20<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_8EE3AEDF/disable: ScePervasiveForDriver_3BF2A9B5<br />
|-<br />
| 0x24<br />
| Secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_7F4AB4AA/disable: ScePervasiveForDriver_0EBBE8DE<br />
|-<br />
| 0x28<br />
| Secure<br />
| CompatRAM (2MiB)<br />
| 1<br />
| enable: ScePervasiveForDriver_B2EE45C9/disable: ScePervasiveForDriver_39979C55<br />
|-<br />
| 0x30<br />
| Non-secure<br />
| Venezia<br />
| 1 (2 for secure)<br />
| enable: ScePervasiveForDriver_FB01A2DD/disable: ScePervasiveForDriver_2EEBE9AE<br />
|-<br />
| 0x34<br />
| Non-secure<br />
| Vip<br />
| 1<br />
| enable: ScePervasiveForDriver_B1CFA18F/disable: ScePervasiveForDriver_03E1FAA6<br />
|-<br />
| 0x40<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x44<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x48<br />
| Secure<br />
| DebugPA<br />
| 1 (also has 2?)<br />
|<br />
|-<br />
| 0x4C<br />
| Secure<br />
| [[SceDbgSdio]]<br />
| 1<br />
|<br />
|-<br />
| 0x50<br />
| Secure<br />
| DMAC0<br />
| 1<br />
|<br />
|-<br />
| 0x54<br />
| Secure<br />
| DMAC1<br />
| 1<br />
|<br />
|-<br />
| 0x58<br />
| Secure<br />
| DMAC2<br />
| 1<br />
|<br />
|-<br />
| 0x5C<br />
| Secure<br />
| DMAC3<br />
| 1<br />
|<br />
|-<br />
| 0x60<br />
| Secure<br />
| DMAC4<br />
| 1<br />
|<br />
|-<br />
| 0x64<br />
| Secure<br />
| DMAC5<br />
| 1<br />
|<br />
|-<br />
| 0x68<br />
| Secure<br />
| DMAC6<br />
| 1<br />
| need devmode or dipsw 0xC0 or 0xC1 or 0xC2.<br />
|-<br />
| 0x70<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Csi<br />
| rowspan="2" | 1<br />
| rowspan="2" | Camera Serial Interface<br />
|-<br />
| 0x74<br />
|-<br />
| 0x80<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | Dsi<br />
| rowspan="2" | 1<br />
|<br />
|-<br />
| 0x84<br />
|<br />
|-<br />
| 0x88<br />
| Non-secure<br />
| Iftu<br />
| 1<br />
| Integrated Facility Terminating Unit. See [[IFTU Registers]]. enable: ScePervasiveForDriver_07F2A738/disable: ScePervasiveForDriver_5AFE0AF0<br />
|-<br />
| 0x8C<br />
| Non-secure<br />
| ?<br />
| 1<br />
| enable: ScePervasiveForDriver_C0C842FE/disable: ScePervasiveForDriver_9BB7B932<br />
|-<br />
| 0x90<br />
| rowspan="3" | Non-secure<br />
| USB0/UDC0<br />
| rowspan="3" | 0xB<br />
| rowspan="3" | See [[UDC]]. enable: ScePervasiveForDriver_A2EFD7AF/disable: ScePervasiveForDriver_AD1E81EB <br> <br> 0x1 - USB Host Controller <br> 0x2 - USB Device Controller <br> 0x8 - ????<br />
|-<br />
| 0x94<br />
| USB1/UDC1<br />
|-<br />
| 0x98<br />
| USB2/UDC2<br />
|-<br />
| 0xA0<br />
| rowspan="4" | Non-secure<br />
| Sdif0 (emmc)<br />
| rowspan="4" | 1<br />
| rowspan="4" | Storage Device InterFace<br />
|-<br />
| 0xA4<br />
| Sdif1 (gcsd)<br />
|-<br />
| 0xA8<br />
| Sdif2<br />
|-<br />
| 0xAC<br />
| Sdif3<br />
|-<br />
| 0xB0<br />
| Non-secure<br />
| Msif<br />
| 1<br />
| Memory Stick InterFace. See [[MSIF Registers]].<br />
|-<br />
| 0xC0<br />
| rowspan="8" | Non-secure<br />
| rowspan="8" | I2S (Audio)<br />
| rowspan="8" | 1<br />
| rowspan="8" | Inter-IC Sound<br />
|-<br />
| 0xC4<br />
|-<br />
| 0xC8<br />
|-<br />
| 0xCC<br />
|-<br />
| 0xD0<br />
|-<br />
| 0xD4<br />
|-<br />
| 0xD8<br />
|-<br />
| 0xDC<br />
|-<br />
| 0xE0<br />
| rowspan="3" | Non-secure<br />
| rowspan="3" | SrcMix<br />
| rowspan="3" | 1<br />
| rowspan="3" | Source Mixer<br />
|-<br />
| 0xE4<br />
|-<br />
| 0xE8<br />
|-<br />
| 0xF0<br />
| Non-secure<br />
| SPDIF (Audio)<br />
| 1<br />
| Sony/Philips Digital InterFace<br />
|-<br />
| 0x100<br />
| Non-secure<br />
| Gpio<br />
| 1<br />
| General Purpose Input/Output. See [[GPIO Registers]].<br />
|-<br />
| 0x104<br />
| rowspan="3" | Non-secure<br />
| Spi (Syscon)<br />
| rowspan="3" | 1<br />
| rowspan="3" | Serial Peripheral Interface. See [[SPI Registers]].<br />
|-<br />
| 0x108<br />
| Spi (Motion)<br />
|-<br />
| 0x10C<br />
| Spi (OLED)<br />
|-<br />
| 0x110<br />
| rowspan="2" | Non-secure<br />
| rowspan="2" | I2C<br />
| rowspan="2" | 1<br />
| rowspan="2" | Inter-Integrated Circuit. See [[I2C Registers]].<br />
|-<br />
| 0x114<br />
|-<br />
| 0x120<br />
| rowspan="7" | Non-secure<br />
| Uart0 (Console)<br />
| rowspan="7" | 1<br />
| rowspan="7" | Universal Asynchronous Receiver Transmitter. See [[UART Registers]].<br />
|-<br />
| 0x124<br />
| Uart1<br />
|-<br />
| 0x128<br />
| Uart2<br />
|-<br />
| 0x12C<br />
| Uart3<br />
|-<br />
| 0x130<br />
| Uart4<br />
|-<br />
| 0x134<br />
| Uart5 (3G Modem)<br />
|-<br />
| 0x138<br />
| Uart6<br />
|-<br />
| 0x154<br />
| Secure?<br />
| Debug Bus<br />
| 1<br />
| See [[#ScePervasiveReset_.280xE3101000.29|ScePervasiveReset]] for details.<br />
|-<br />
| 0x158<br />
| Secure?<br />
| ?<br />
| 1<br />
|<br />
|-<br />
| 0x160<br />
| Secure?<br />
| LPDDR2MAIN (DDRIF0)<br />
| 1<br />
|<br />
|-<br />
| 0x164<br />
| Secure?<br />
| LPDDR2SUB (DDRIF1)<br />
| 1<br />
|<br />
|-<br />
| 0x170<br />
| ?<br />
| Timer<br />
| 1?<br />
|<br />
|-<br />
| rowspan="2" | 0x178<br />
| rowspan="2" | Secure?<br />
| SPM32<br />
| 4<br />
| Scratch Pad Memory 32KiB<br />
|-<br />
| SPM128<br />
| 8<br />
| Scratch Pad Memory 128KiB<br />
|}<br />
<br />
== ScePervasiveVid (0xE3104000) ==<br />
<br />
Voltage integer data<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset<br />
! Group<br />
! Value<br />
|-<br />
| 0x0<br />
| ARM<br />
| 0<br />
|-<br />
| 0x4<br />
| ARM<br />
| 0x1F<br />
|-<br />
| 0x8<br />
| ARM<br />
| 0x27<br />
|-<br />
| 0xC<br />
| ARM<br />
| 0x2F<br />
|-<br />
| 0x10<br />
| ARM<br />
| 0x31<br />
|-<br />
| 0x14<br />
| ARM<br />
| 0x31<br />
|-<br />
| 0x40<br />
| ?<br />
| 0x1D<br />
|-<br />
| 0x44<br />
| ?<br />
| 0x22<br />
|-<br />
| 0x48<br />
| ?<br />
| 0x2E<br />
|-<br />
| 0x4C<br />
| ?<br />
| 0x25<br />
|-<br />
| 0x60<br />
| ?<br />
| 0x1D<br />
|-<br />
| 0x64<br />
| ?<br />
| 0x27<br />
|-<br />
| 0x68<br />
| ?<br />
| 0x2E<br />
|-<br />
| 0x6C<br />
| ?<br />
| 0x30<br />
|-<br />
| 0xA0<br />
| Bus<br />
| 0<br />
|-<br />
| 0xA4<br />
| Bus<br />
| 0x1E<br />
|-<br />
| 0xA8<br />
| Bus<br />
| 0x27<br />
|-<br />
| 0xAC<br />
| Bus<br />
| 0x2E<br />
|}<br />
<br />
== Base Clock ==<br />
<br />
Registers at physical address <code>0xE3103000</code> (ScePervasiveBaseClk).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset !! Accessibly !! Description<br />
|-<br />
| 0x0/0x4 || Non-Secure/Secure || [[Pervasive#ARM Clocks|ARM Clocks]]<br />
|-<br />
| 0x10 || Non-Secure/Secure || GPU Clock<br />
|-<br />
| 0x20 || Non-Secure/Secure (?) || [[Pervasive#VENEZIA Clock|VENEZIA Clock]]<br />
|-<br />
| 0x30 || Non-Secure || [[Pervasive#Vip Clock|Vip Clock]]<br />
|-<br />
| 0x40 || Secure || [[Pervasive#CMeP Clock|CMeP Clock]]<br />
|-<br />
| 0x44 || Non-Secure || [[Pervasive#CameraBus Clock|CameraBus Clock]]<br />
|-<br />
| 0x50 || Secure || Could be Center Xbar/Bus clock<br />
|-<br />
| 0x60 || Non-Secure || Related to offset 0x60/0x64/0xA4.<br />
|-<br />
| 0x64 || Non-Secure || Related to offset 0x60/0x64/0xA4.<br />
|-<br />
| 0x68 || Non-Secure || Unknown. freq setting by ScePervasiveForDriver_A96642E3<br />
|-<br />
| 0x70 || Non-Secure || Related to Audio. freq setting by ScePervasiveForDriver_925D9D24<br />
|-<br />
| 0x90 || Secure || [[Pervasive#DRAM Main Clock|DRAM Main Clock]]<br />
|-<br />
| 0x94 || Secure || [[Pervasive#DRAM Sub Clock|DRAM Sub Clock]]<br />
|-<br />
| 0xA4 || Non-Secure || Related to offset 0x60/0x64/0xA4.<br />
|-<br />
| 0xB0 || Non-Secure || [[Pervasive#Msif Clock|Msif Clock]]<br />
|-<br />
| 0xC4 || Secure || [[Pervasive#Compat/GpuXbar Clock|Compat/GpuXbar Clock (PSP stuff)]]<br />
|-<br />
| 0x100 || Non-Secure || DSI1 Clock<br />
|-<br />
| 0x180 || Non-Secure || DSI0 Clock<br />
|-<br />
| 0x1D0 || Non-Secure || HDMI Clock<br />
|-<br />
| 0x1F0 || Non-Secure || [[Pervasive#Dmac5 Clock|Dmac5 Clock]]<br />
|-<br />
| 0x210 || Non-Secure || Related to Audio. freq setting by ScePervasiveForDriver_2FB5F88F<br />
|-<br />
| 0x214 || Non-Secure || [[Pervasive#Sys Clock|Sys Clock]]<br />
|}<br />
<br />
=== ARM Clocks ===<br />
<br />
The ARM core clock and L2 cache clock consist of two registers 0xE3103000 and 0xE3103004.<br />
<br />
Register 0xE3103000 selects the base clock frequency.<br />
<br />
It seems that 42-freq is selected internally when Undefined index is selected<br />
<br />
{| class="wikitable sortable mw-collapsible"<br />
|+ 0xE3103000 ARM clock list<br />
|-<br />
! Index !! ARM core freq !! L2 cache freq<br />
|-<br />
| 0 || Undefined || Undefined<br />
|-<br />
| 1 || 42 || 42<br />
|-<br />
| 2 || Undefined || Undefined<br />
|-<br />
| 3 || 83 || 83<br />
|-<br />
| 4 || 111 || 111<br />
|-<br />
| 5 || 166 || 166<br />
|-<br />
| 6 || 222 || 222<br />
|-<br />
| 7 || 333 || 333<br />
|-<br />
| 8 || 444 || 222<br />
|-<br />
| 9 || 500 || 250<br />
|-<br />
| 10 || 333 || 166<br />
|-<br />
| 11 || Undefined || Undefined<br />
|-<br />
| 12 || 125 || 125<br />
|-<br />
| 13 || 250 || 250<br />
|-<br />
| 14 || 444 || 444<br />
|-<br />
| 15 || 500 || 500<br />
|}<br />
<br />
Register 0xE3103004 adjusts the selected base clock frequency.<br />
<br />
0xE3103004 sets the index that adjusts the base clock frequency.<br />
<br />
It seems that the adjustment can be expressed by the following formula.<br />
<br />
<code>f(n) = n(1 - adjust_index / 16)</code><br />
<br />
adjust_index ranges from 0 to 8. Selecting 9 or higher selects 0 internally.<br />
<br />
Also a joke-like approximation : <code>f(n) = n(1 - aπ^-(1 + √2))</code>.<br />
<br />
However, not sure if this formula is completely correct, but It can see that it is very close to the value of yifan's clock analyzer.<br />
<br />
{| class="wikitable sortable mw-collapsible mw-collapsed"<br />
|+ ARM core measured adjust freq<br />
|-<br />
! base !! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7 !! 8<br />
|-<br />
| 1 || 41.666 MHz || 39.62 MHz || 36.458 MHz || 33.854 MHz || 31.249 MHz || 28.645 MHz || 26.41 MHz || 23.437 MHz || 20.833 MHz<br />
|-<br />
| 3 || 83.333 MHz || 78.124 MHz || 72.916 MHz || 67.708 MHz || 62.499 MHz || 57.291 MHz || 52.83 MHz || 46.874 MHz || 41.666 MHz<br />
|-<br />
| 4 || 111.111 MHz || 104.166 MHz || 97.222 MHz || 90.277 MHz || 83.333 MHz || 76.388 MHz || 69.444 MHz || 62.499 MHz || 55.555 MHz<br />
|-<br />
| 5 || 166.666 MHz || 156.249 MHz || 145.833 MHz || 135.416 MHz || 124.999 MHz || 114.583 MHz || 104.166 MHz || 93.749 MHz || 83.333 MHz<br />
|-<br />
| 6 || 222.222 MHz || 208.333 MHz || 194.444 MHz || 180.555 MHz || 166.666 MHz || 152.777 MHz || 138.888 MHz || 124.999 MHz || 111.111 MHz<br />
|-<br />
| 7 || 333.333 MHz || 312.499 MHz || 291.666 MHz || 270.833 MHz || 249.999 MHz || 229.166 MHz || 208.333 MHz || 187.499 MHz || 166.666 MHz<br />
|-<br />
| 8 || 444.444 MHz || 416.666 MHz || 388.888 MHz || 361.111 MHz || 333.333 MHz || 305.555 MHz || 277.777 MHz || 249.999 MHz || 222.222 MHz<br />
|-<br />
| 9 || 500.0 MHz || 468.749 MHz || 437.499 MHz || 406.249 MHz || 374.999 MHz || 343.749 MHz || 312.499 MHz || 281.249 MHz || 249.999 MHz<br />
|-<br />
| 10 || 333.333 MHz || 312.499 MHz || 291.666 MHz || 270.833 MHz || 249.999 MHz || 229.166 MHz || 208.333 MHz || 187.499 MHz || 166.666 MHz<br />
|-<br />
| 12 || 124.999 MHz || 117.187 MHz || 109.374 MHz || 101.562 MHz || 93.749 MHz || 85.937 MHz || 78.124 MHz || 70.312 MHz || 62.499 MHz<br />
|-<br />
| 13 || 249.999 MHz || 234.374 MHz || 218.749 MHz || 203.124 MHz || 187.499 MHz || 171.874 MHz || 156.249 MHz || 140.624 MHz || 124.999 MHz<br />
|-<br />
| 14 || 444.444 MHz || 416.666 MHz || 388.888 MHz || 361.111 MHz || 333.333 MHz || 305.555 MHz || 277.777 MHz || 249.999 MHz || 222.222 MHz<br />
|-<br />
| 15 || 500.0 MHz || 468.749 MHz || 437.499 MHz || 406.249 MHz || 374.999 MHz || 343.749 MHz || 312.499 MHz || 281.249 MHz || 249.999 MHz<br />
|}<br />
<br />
=== ARM Clocks (by yifan's clock analyzer) ===<br />
<br />
<!--<br />
TODO : Remove this? or update to better document?<br />
--><br />
<br />
The ARM CPU clocks are controlled by two registers at physical address <code>0xE3103000</code> (ScePervasiveBaseClk). Currently, it is unknown how the values are interpreted. However, <code>0xE3103000</code> (one word) takes values 0 to 16, and increases clock speed while <code>0xE3103004</code> (single byte) takes values 0 to 8 and decreases clock speed. It is likely related to a PLL multiply and divide function. The input clock signal comes from a [http://www.onsemi.com/PowerSolutions/product.do?id=P1P40167 P1P40167] clock synthesizer (found on the bottom of the board under the main SoC). It takes a 27MHz crystal and generates a 37MHz clock which feeds directly into the SoC's internal PLL.<br />
<br />
The following are tests run to determine what the values of each register corresponds to. It appears that the maximum clock speed is 499MHz and the minimum clock speed is 16MHz.<br />
<br />
<b>These clocks may be wrong. "Kernel Clock Speed" is "Clock Speed + 5". However, there is an error of ± 5 to 6 in "Clock Speed".</b><br />
<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
|-<br />
! <code>0xE3103000</code> !! <code>0xE3103004</code> !! Clock Speed (MHz) !! Kernel Clock Speed (MHz)<br />
|-<br />
| 0 || 0 || 37 || 42<br />
|-<br />
| 0 || 1 || 35 || 40<br />
|-<br />
| 0 || 2 || 32 || 37<br />
|-<br />
| 0 || 3 || 29 || 34<br />
|-<br />
| 0 || 4 || 27 || 32<br />
|-<br />
| 0 || 5 || 24 || 29<br />
|-<br />
| 0 || 6 || 22 || 27<br />
|-<br />
| 0 || 7 || 19 || 24<br />
|-<br />
| 0 || 8 || 16 || 21<br />
|-<br />
| 1 || 0 || 37 || 42<br />
|-<br />
| 1 || 1 || 35 || 40<br />
|-<br />
| 1 || 2 || 32 || 37<br />
|-<br />
| 1 || 3 || 30 || 35<br />
|-<br />
| 1 || 4 || 27 || 32<br />
|-<br />
| 1 || 5 || 24 || 29<br />
|-<br />
| 1 || 6 || 22 || 27<br />
|-<br />
| 1 || 7 || 19 || 24<br />
|-<br />
| 1 || 8 || 16 || 21<br />
|-<br />
| 2 || 0 || 37 || 42<br />
|-<br />
| 2 || 1 || 35 || 40<br />
|-<br />
| 2 || 2 || 32 || 37<br />
|-<br />
| 2 || 3 || 30 || 35<br />
|-<br />
| 2 || 4 || 27 || 32<br />
|-<br />
| 2 || 5 || 24 || 29<br />
|-<br />
| 2 || 6 || 22 || 27<br />
|-<br />
| 2 || 7 || 19 || 24<br />
|-<br />
| 2 || 8 || 16 || 21<br />
|-<br />
| 3 || 0 || 79 || 84<br />
|-<br />
| 3 || 1 || 74 || 79<br />
|-<br />
| 3 || 2 || 69 || 74<br />
|-<br />
| 3 || 3 || 63 || 68<br />
|-<br />
| 3 || 4 || 58 || 63<br />
|-<br />
| 3 || 5 || 53 || 58<br />
|-<br />
| 3 || 6 || 48 || 53<br />
|-<br />
| 3 || 7 || 43 || 48<br />
|-<br />
| 3 || 8 || 37 || 42<br />
|-<br />
| 4 || 0 || 107 || 112<br />
|-<br />
| 4 || 1 || 100 || 105<br />
|-<br />
| 4 || 2 || 93 || 98<br />
|-<br />
| 4 || 3 || 86 || 91<br />
|-<br />
| 4 || 4 || 79 || 84<br />
|-<br />
| 4 || 5 || 72 || 77<br />
|-<br />
| 4 || 6 || 65 || 70<br />
|-<br />
| 4 || 7 || 58 || 63<br />
|-<br />
| 4 || 8 || 51 || 56<br />
|-<br />
| 5 || 0 || 162 || 167<br />
|-<br />
| 5 || 1 || 152 || 157<br />
|-<br />
| 5 || 2 || 142 || 147<br />
|-<br />
| 5 || 3 || 131 || 136<br />
|-<br />
| 5 || 4 || 121 || 126<br />
|-<br />
| 5 || 5 || 110 || 115<br />
|-<br />
| 5 || 6 || 100 || 105<br />
|-<br />
| 5 || 7 || 90 || 95<br />
|-<br />
| 5 || 8 || 79 || 84<br />
|-<br />
| 6 || 0 || 218 || 223<br />
|-<br />
| 6 || 1 || 204 || 209<br />
|-<br />
| 6 || 2 || 190 || 195<br />
|-<br />
| 6 || 3 || 176 || 181<br />
|-<br />
| 6 || 4 || 163 || 168<br />
|-<br />
| 6 || 5 || 148 || 153<br />
|-<br />
| 6 || 6 || 135 || 140<br />
|-<br />
| 6 || 7 || 121 || 126<br />
|-<br />
| 6 || 8 || 107 || 112<br />
|-<br />
| 7 || 0 || 329 || 334<br />
|-<br />
| 7 || 1 || 308 || 313<br />
|-<br />
| 7 || 2 || 287 || 292<br />
|-<br />
| 7 || 3 || 266 || 271<br />
|-<br />
| 7 || 4 || 246 || 251<br />
|-<br />
| 7 || 5 || 225 || 230<br />
|-<br />
| 7 || 6 || 204 || 209<br />
|-<br />
| 7 || 7 || 183 || 188<br />
|-<br />
| 7 || 8 || 162 || 167<br />
|-<br />
| 8 || 0 || 439 || 444<br />
|-<br />
| 8 || 1 || 411 || 416<br />
|-<br />
| 8 || 2 || 384 || 389<br />
|-<br />
| 8 || 3 || 356 || 361<br />
|-<br />
| 8 || 4 || 329 || 334<br />
|-<br />
| 8 || 5 || 301 || 306<br />
|-<br />
| 8 || 6 || 273 || 278<br />
|-<br />
| 8 || 7 || 246 || 251<br />
|-<br />
| 8 || 8 || 218 || 223<br />
|-<br />
| 9 || 0 || 494 || 499<br />
|-<br />
| 9 || 1 || 463 || 468<br />
|-<br />
| 9 || 2 || 432 || 437<br />
|-<br />
| 9 || 3 || 401 || 406<br />
|-<br />
| 9 || 4 || 370 || 375<br />
|-<br />
| 9 || 5 || 339 || 344<br />
|-<br />
| 9 || 6 || 308 || 313<br />
|-<br />
| 9 || 7 || 277 || 282<br />
|-<br />
| 9 || 8 || 245 || 250<br />
|-<br />
| 10 || 0 || 328 || 333<br />
|-<br />
| 10 || 1 || 308 || 313<br />
|-<br />
| 10 || 2 || 287 || 292<br />
|-<br />
| 10 || 3 || 266 || 271<br />
|-<br />
| 10 || 4 || 245 || 250<br />
|-<br />
| 10 || 5 || 225 || 230<br />
|-<br />
| 10 || 6 || 204 || 209<br />
|-<br />
| 10 || 7 || 183 || 188<br />
|-<br />
| 10 || 8 || 162 || 167<br />
|-<br />
| 11 || 0 || 37 || 42<br />
|-<br />
| 11 || 1 || 35 || 40<br />
|-<br />
| 11 || 2 || 32 || 37<br />
|-<br />
| 11 || 3 || 30 || 35<br />
|-<br />
| 11 || 4 || 27 || 32<br />
|-<br />
| 11 || 5 || 24 || 29<br />
|-<br />
| 11 || 6 || 22 || 27<br />
|-<br />
| 11 || 7 || 19 || 24<br />
|-<br />
| 11 || 8 || 16 || 21<br />
|-<br />
| 12 || 0 || 121 || 126<br />
|-<br />
| 12 || 1 || 113 || 118<br />
|-<br />
| 12 || 2 || 105 || 110<br />
|-<br />
| 12 || 3 || 97 || 102<br />
|-<br />
| 12 || 4 || 90 || 95<br />
|-<br />
| 12 || 5 || 82 || 87<br />
|-<br />
| 12 || 6 || 74 || 79<br />
|-<br />
| 12 || 7 || 66 || 71<br />
|-<br />
| 12 || 8 || 58 || 63<br />
|-<br />
| 13 || 0 || 245 || 250<br />
|-<br />
| 13 || 1 || 230 || 235<br />
|-<br />
| 13 || 2 || 214 || 219<br />
|-<br />
| 13 || 3 || 199 || 204<br />
|-<br />
| 13 || 4 || 183 || 188<br />
|-<br />
| 13 || 5 || 168 || 173<br />
|-<br />
| 13 || 6 || 152 || 157<br />
|-<br />
| 13 || 7 || 136 || 141<br />
|-<br />
| 13 || 8 || 121 || 126<br />
|-<br />
| 14 || 0 || 439 || 444<br />
|-<br />
| 14 || 1 || 412 || 417<br />
|-<br />
| 14 || 2 || 384 || 389<br />
|-<br />
| 14 || 3 || 356 || 361<br />
|-<br />
| 14 || 4 || 329 || 334<br />
|-<br />
| 14 || 5 || 301 || 306<br />
|-<br />
| 14 || 6 || 273 || 278<br />
|-<br />
| 14 || 7 || 246 || 251<br />
|-<br />
| 14 || 8 || 218 || 223<br />
|-<br />
| 15 || 0 || 494 || 499<br />
|-<br />
| 15 || 1 || 463 || 468<br />
|-<br />
| 15 || 2 || 433 || 438<br />
|-<br />
| 15 || 3 || 401 || 406<br />
|-<br />
| 15 || 4 || 370 || 375<br />
|-<br />
| 15 || 5 || 339 || 344<br />
|-<br />
| 15 || 6 || 308 || 313<br />
|-<br />
| 15 || 7 || 277 || 282<br />
|-<br />
| 15 || 8 || 245 || 250<br />
|-<br />
| 16 || 0 || 37 || 42<br />
|-<br />
| 16 || 1 || 35 || 40<br />
|-<br />
| 16 || 2 || 32 || 37<br />
|-<br />
| 16 || 3 || 29 || 34<br />
|-<br />
| 16 || 4 || 27 || 32<br />
|-<br />
| 16 || 5 || 24 || 29<br />
|-<br />
| 16 || 6 || 22 || 27<br />
|-<br />
| 16 || 7 || 19 || 24<br />
|-<br />
| 16 || 8 || 16 || 21<br />
|}<br />
<br />
=== VENEZIA Clock ===<br />
The register at physical address <code>0xE3103020</code> seems to control the clock frequency of VENEZIA.<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0x1 || 41MHz<br />
|-<br />
| 0x2 || 55MHz<br />
|-<br />
| 0x3 || 83MHz<br />
|-<br />
| 0x4 || 111MHz<br />
|-<br />
| 0x5 || 166MHz<br />
|-<br />
| 0x6 || 222MHz<br />
|-<br />
| 0x7 || 333MHz<br />
|}<br />
<br />
=== Vip Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0x1 || 41MHz<br />
|-<br />
| 0x2 || 55MHz<br />
|-<br />
| 0x3 || 83MHz<br />
|-<br />
| 0x4 || 111MHz<br />
|-<br />
| 0x5 || 166MHz<br />
|-<br />
| 0x6 || 222MHz<br />
|}<br />
<br />
=== CMeP Clock ===<br />
The low 8 bits of the register at physical address <code>0xE3103040</code> control CMeP clock speed, and Main Xbar, I/O Bus speed too.<br />
This was guessed because it is used in a <code>usleep()</code>-like function to calculate the input for a <code>sleep_for_cycles()</code> function.<br />
<br />
<br />
Testing was performed using SceLT5 as a time reference (µs-accurate), and compared against the hardcoded table in <code>second_loader</code>.<br />
{| class="wikitable"<br />
|-<br />
! Value !! Main Xbar !! I/O Bus !! CMeP speed (measured) !! Table value<br />
|-<br />
| 0x0 || Unknown || Unknown || 41.5 MHz<br />
|rowspan="8"|N/A<br />
|-<br />
| 0x1 || Unknown || Unknown || 41.5 MHz<br />
|-<br />
| 0x2 || Unknown || Unknown || 55.4 MHz<br />
|-<br />
| 0x3 || Unknown || Unknown || 83.0 MHz<br />
|-<br />
| 0x4 || Unknown || Unknown || 110.7 MHz<br />
|-<br />
| 0x5 || Unknown || Unknown || 166.0 MHz<br />
|-<br />
| 0x6 || Unknown || Unknown || 110.7 MHz<br />
|-<br />
| 0x7 || Unknown || Unknown || 166.0 MHz<br />
|-<br />
| 0x10000 || Undefined || Undefined || 27.7 MHz || 50 MHz<br />
|-<br />
| 0x10001 || Undefined || Undefined || 27.7 MHz || 50 MHz<br />
|-<br />
| 0x10002 || 56 MHz || 27 MHz || 27.7 MHz || 27 MHz<br />
|-<br />
| 0x10003 || 83 MHz || 42 MHz || 41.5 MHz || 42 MHz<br />
|-<br />
| 0x10004 || 111 MHz || 56 MHz || 55.3 MHz || 56 MHz<br />
|-<br />
| 0x10005 || 166 MHz || 83 MHz || 83.0 MHz || 83 MHz<br />
|-<br />
| 0x10006 || 222 MHz || 111 MHz || 110.7 MHz || 111 MHz<br />
|-<br />
| 0x10007 || 333 MHz || 166 MHz || 166.0 MHz || 160 MHz<br />
|}<br />
<br />
<code>second_loader</code> sets the register to 0x10005, meaning CMeP usually runs at 83MHz.<br />
<br />
=== CameraBus Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 1 || 41 MHz<br />
|-<br />
| 2 || 67 MHz<br />
|-<br />
| 3 || 83 MHz<br />
|-<br />
| 4 || 133 MHz<br />
|-<br />
| 5 || 166 MHz<br />
|}<br />
<br />
=== DRAM Main Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed (measured)<br />
|-<br />
| 1 || 170 MHz<br />
|}<br />
<br />
=== DRAM Sub Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed (measured)<br />
|-<br />
| 1 || 170 MHz<br />
|}<br />
<br />
=== Msif Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0x10000 || 20 MHz<br />
|-<br />
| 0x10001 || 40 MHz<br />
|-<br />
| 0x10002 || 60 MHz<br />
|}<br />
<br />
Bit 0x10000 is optional i.e by default Msif runs at 20 MHz. Its effect is unknown.<br />
<br />
=== Compat/GpuXbar Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Compat Clock speed !! GpuXbar Clock speed<br />
|-<br />
| 0 || 333 MHz || 166 MHz<br />
|-<br />
| 1 || Unknown || 111 MHz<br />
|-<br />
| 2 || 222 MHz || 83 MHz<br />
|}<br />
<br />
=== Dmac5 Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 1 || 41 MHz<br />
|-<br />
| 2 || 83 MHz<br />
|-<br />
| 3 || 133 MHz<br />
|-<br />
| 4 || 166 MHz<br />
|}<br />
<br />
=== Sys Clock ===<br />
<br />
{| class="wikitable"<br />
|+ Allowed register values<br />
! Value !! Clock speed<br />
|-<br />
| 0 || 222 MHz<br />
|-<br />
| 1 || 190 MHz<br />
|}<br />
<br />
== ScePervasive2 (0xE3110000) ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Offset<br />
! Description<br />
|-<br />
| 0x248<br />
| <code>VIP_PROT_BAP_ERRV</code><br />
|-<br />
| 0x24C<br />
| <code>VIP_PROT_BAP_ERRC</code><br />
|-<br />
| 0x250<br />
| <code>VIP_PROT_BAP_ERRA</code><br />
|-<br />
| 0x254<br />
| <code>VIP_PROT_VDPD_ERRV</code><br />
|-<br />
| 0x258<br />
| <code>VIP_PROT_VDPD_ERRC</code><br />
|-<br />
| 0x25C<br />
| <code>VIP_PROT_VDPD_ERRA</code><br />
|-<br />
| 0x260<br />
| <code>VIP_PROT_VDPM_ERRV</code><br />
|-<br />
| 0x264<br />
| <code>VIP_PROT_VDPM_ERRC</code><br />
|-<br />
| 0x268<br />
| <code>VIP_PROT_VDPM_ERRA</code><br />
|-<br />
| 0x348<br />
| <code>VENE_PROT_REG_ERRV</code><br />
|-<br />
| 0x34C<br />
| <code>VENE_PROT_REG_ERRC</code><br />
|-<br />
| 0x350<br />
| <code>VENE_PROT_REG_ERRA</code><br />
|-<br />
| 0xC00<br />
| 0x0 alias for ARM (0 / 1) = (0x1f000000 / 0x40000000)<br />
|-<br />
| 0xD04<br />
| SPM128 Bus Error Address register<br />
|-<br />
| 0xD08<br />
| SPM128 Bus Error Attribute register<br />
|-<br />
| 0xD14<br />
| SPM32 Bus Error Address register<br />
|-<br />
| 0xD18<br />
| SPM32 Bus Error Attribute register<br />
|-<br />
| 0xD24<br />
| CompatRAM Bus Error Address register<br />
|-<br />
| 0xD28<br />
| CompatRAM Bus Error Attribute register<br />
|-<br />
| 0xD34<br />
| Pervasive2 Bus Error Address register - maybe <code>PERVASIVE2_SYS_BEADR</code><br />
|-<br />
| 0xD38<br />
| Pervasive2 Bus Error Attribute register - maybe <code>PERVASIVE2_SYS_BEATB</code><br />
|-<br />
| 0xD44<br />
| SPM128 Secure Bus Error Address register<br />
|-<br />
| 0xD48<br />
| SPM128 Secure Bus Error Attribute register<br />
|-<br />
| 0xD54<br />
| SPM32 Secure Bus Error Address register<br />
|-<br />
| 0xD58<br />
| SPM32 Secure Bus Error Attribute register<br />
|-<br />
| 0xD64<br />
| CompatRAM Secure Bus Error Address register<br />
|-<br />
| 0xD68<br />
| CompatRAM Secure Bus Error Attribute register<br />
|-<br />
| 0xD74<br />
| Pervasive2 Secure Bus Error Address register - maybe <code>PERVASIVE2_SYS_SBEADR</code><br />
|-<br />
| 0xD78<br />
| Pervasive2 Secure Bus Error Attribute register - maybe <code>PERVASIVE2_SYS_SBEATB</code><br />
|-<br />
| 0xD80<br />
| BET0 (Bus Error Target 0) - full name may be <code>PERVASIVE2_SYS_BET0</code><br />
|-<br />
| 0xD90<br />
| BET1 (Bus Error Target 1) - full name may be <code>PERVASIVE2_SYS_BET1</code><br />
|-<br />
| 0xD94<br />
| <code>PERVASIVE2_SYS_BEBT</code> - Bus Error ?Bus Target?<br />
|-<br />
| 0xDC0<br />
| SBET0 (Secure Bus Error Target 0) - full name may be <code>PERVASIVE2_SYS_SBET0</code><br />
|-<br />
| 0xDD0<br />
| SBET1 (Secure Bus Error Target 1) - full name may be <code>PERVASIVE2_SYS_SBET1</code><br />
|-<br />
| 0xDD4<br />
| <code>PERVASIVE2_SYS_SBEBT</code> - Secure Bus Error ?Bus Target?<br />
|-<br />
| 0xF30<br />
| USB PHY ready state - Bit 0 = Port 0, Bit 1 = Port 1, Bit 2 = Port 2<br />
|-<br />
| 0xF34<br />
| USB PHY interrupt state - Bit 0 = Port 0, Bit 1 = Port 1, Bit 2 = Port 2<br />
|-<br />
| 0xF40<br />
| Bit 0 = Memory Card insert state<br />
|-<br />
| 0xF44<br />
| Memory Card insert interrupt state - Bit 0 = Card removed, Bit 1 = Card inserted<br />
|-<br />
| 0xF50<br />
| USB VBUS state - Bit 0 = Port 0, Bit 1 = Port 1, Bit 2 = Port 2<br />
|-<br />
| 0xF54<br />
| USB VBUS interrupt state<br />
|}<br />
<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceLowio&diff=21099
SceLowio
2024-01-31T23:44:24Z
<p>CelesteBlue: /* scePervasiveGetSoCRevisionForDriver */</p>
<hr />
<div>== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 1.69-3.65 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 1.69 || [[SceLowio#ScePervasiveForDriver|ScePervasiveForDriver]] || Non-secure || Kernel || 0xE692C727<br />
|-<br />
| 1.69 || [[SceLowio#SceGpioForDriver|SceGpioForDriver]] || Non-secure || Kernel || 0xF0EF5743<br />
|-<br />
| 1.69 || [[SceLowio#ScePwmForDriver|ScePwmForDriver]] || Non-secure || Kernel || 0xECEAE2D0<br />
|-<br />
| 1.69 || [[SceLowio#SceI2cForDriver|SceI2cForDriver]] || Non-secure || Kernel || 0xE14BEF6E<br />
|-<br />
| 1.69 || [[SceLowio#SceGrabForDriver|SceGrabForDriver]] || Non-secure || Kernel || 0x81C54BED<br />
|-<br />
| 1.69 || [[SceLowio#SceCdramForDriver|SceCdramForDriver]] || Non-secure || Kernel || 0xC8CD941E<br />
|-<br />
| 1.69 || [[SceLowio#SceDsiForDriver|SceDsiForDriver]] || Non-secure || Kernel || 0xEC897883<br />
|-<br />
| 1.69 || [[SceLowio#SceIftuForDriver|SceIftuForDriver]] || Non-secure || Kernel || 0xCAFCFE50<br />
|-<br />
| 1.69 || [[SceLowio#SceCsiForDriver|SceCsiForDriver]] || Non-secure || Kernel || 0xD85C8E44<br />
|}<br />
<br />
== ScePervasiveForDriver ==<br />
<br />
=== scePervasiveSrcClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2FB5F88F<br />
|}<br />
<br />
Probably sets audio SouRCe mixer clock.<br />
<br />
Used only by [[ScePower]].<br />
<br />
<source lang="C">int scePervasiveSrcClockSelectForDriver(SceUInt32 freq_level);</source><br />
<br />
=== scePervasiveArmClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE9D95643<br />
|}<br />
<br />
Temp name was scePervasiveArmSetClockForDriver.<br />
<br />
Used only by [[ScePower]].<br />
<br />
<source lang="C">int scePervasiveArmClockSelectForDriver(SceUInt32 freq_base, SceUInt32 freq_adjust);</source><br />
<br />
=== scePervasiveGpuClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x6AF0196F<br />
|}<br />
<br />
Temp name was scePervasiveGpuSetClockForDriver.<br />
<br />
Maybe called on each suspend/resume.<br />
<br />
<source lang="C"><br />
// freq_level1: 3 (default value), 5 when DIP Switch 236 (GPU overclock) is set<br />
int scePervasiveGpuClockSelectForDriver(SceUInt32 freq_level1, SceUInt32 freq_level2);<br />
</source><br />
<br />
=== scePervasiveVeneziaClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x725B4F59<br />
|}<br />
<br />
Temp name was scePervasiveVeneziaSetClockForDriver.<br />
<br />
<source lang="C">int scePervasiveVeneziaClockSelectForDriver(SceUInt32 freq_level);</source><br />
<br />
=== scePervasiveVipClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x12D17D47<br />
|}<br />
<br />
Temp name was scePervasiveVipSetClockForDriver.<br />
<br />
<source lang="C">int scePervasiveVipClockSelectForDriver(SceUInt32 freq_level);</source><br />
<br />
=== scePervasiveDmac5ClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xA6832B33<br />
|}<br />
<br />
Temp name was scePervasiveDmac5SetClockForDriver.<br />
<br />
<source lang="C">int scePervasiveDmac5ClockSelectForDriver(SceUInt32 freq_level);</source><br />
<br />
=== scePervasiveBusClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xC0F7CC39<br />
|}<br />
<br />
Temp name was scePervasiveBusSetClockForDriver.<br />
<br />
Requests ARM [[TrustZone]] using [[SMC]] 0x114.<br />
<br />
<source lang="C">int scePervasiveBusClockSelectForDriver(SceUInt32 freq_level);</source><br />
<br />
=== scePervasiveSysClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x98D8914A<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveSysSetClockForDriver.<br />
<br />
<source lang="C">int scePervasiveSysClockSelectForDriver(SceUInt32 freq_level);</source><br />
<br />
=== ScePervasiveForDriver_64ABE589 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x64ABE589<br />
|}<br />
<br />
A good name could be scePervasiveMsifClockSelectForDriver.<br />
<br />
<source lang="C">int ScePervasiveForDriver_64ABE589(SceUInt32 freq_level);</source><br />
<br />
=== ScePervasiveForDriver_91C80C41 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x91C80C41<br />
|}<br />
<br />
A good name might be scePervasiveIftuDsiClockSelectForDriver. Temp name was ScePervasiveForDriver_91C80C41_set_dsi_bus_pixelclock, scePervasiveDsiSetPixelClockForDriver.<br />
<br />
Sets DSI bus (?IFTU?) pixel clock.<br />
<br />
<source lang="C">int ScePervasiveForDriver_91C80C41(int bus, SceUInt32 freq_level);</source><br />
<br />
=== scePervasiveCameraBusClockSelectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x589D0291<br />
|}<br />
<br />
<source lang="C"><br />
// freq_level can be either 2 (DOWN) or 5 (UP)<br />
int scePervasiveCameraBusClockSelectForDriver(SceUInt32 freq_level);<br />
</source><br />
<br />
=== scePervasiveGetSoCRevisionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x714EEFB7<br />
|}<br />
<br />
Returns <= 0 if Kermit revision is below 2.0.<br />
<br />
Used in [[ScePower]], [[SceGpuEs4]], [[SceSdif]]. Maybe copied to [[SceSysmem]]'s sysroot structure.<br />
<br />
<source lang="C">SceUInt32 scePervasiveGetSoCRevisionForDriver(void);</source><br />
<br />
=== scePervasiveCecClockOutEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x26B51075<br />
|}<br />
<br />
=== scePervasiveCecClockOutDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD185D235<br />
|}<br />
<br />
=== ScePervasiveForDriver_243D0E78 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x243D0E78<br />
|}<br />
<br />
Gets IFTU DSI clock information.<br />
<br />
<source lang="C">int ScePervasiveForDriver_243D0E78(int pixelclock, int info0[2], int info1[2]);</source><br />
<br />
=== scePervasiveGpuResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x3E79D3D3<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Gpu) at offset <code>0x10</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveGpuResetEnableForDriver(void);</source><br />
<br />
=== scePervasiveVipResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x28731EC5<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Vip) at offset <code>0x30</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveVipResetEnableForDriver(void);</source><br />
<br />
=== ScePervasiveForDriver_31C0A98B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x31C0A98B<br />
|}<br />
<br />
Puts the device (unknown) at offset <code>0x34</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_31C0A98B(void);</source><br />
<br />
=== ScePervasiveForDriver_FF4B3CA6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xFF4B3CA6<br />
|}<br />
<br />
Puts the device (unknown) at offset <code>0x50 + device * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_FF4B3CA6(int device);</source><br />
<br />
=== scePervasiveCsiResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x66BF2885<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Csi) at offset <code>0x70 + head * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveCsiResetEnableForDriver(SceDisplayHead head);</source><br />
<br />
=== scePervasiveIftuDsiResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE3FC1C8D<br />
|}<br />
<br />
Temp name was ScePervasiveForDriver_E3FC1C8D_dsi_reset_enter, scePervasiveDsiResetEnableForDriver.<br />
<br />
Puts the device (IFTU DSI) at offset <code>0x80 + device * 4</code> in reset (|= mask).<br />
<br />
<source lang="C">int scePervasiveIftuDsiResetEnableForDriver(int device, int mask);</source><br />
<br />
=== ScePervasiveForDriver_B68254AD ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xB68254AD<br />
|}<br />
<br />
Puts the device (IFTU2) at offset <code>0x88</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_B68254AD(void);</source><br />
<br />
=== ScePervasiveForDriver_7AE2F8E8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x7AE2F8E8<br />
|}<br />
<br />
Puts the device (unknown) at offset <code>0x8C</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_7AE2F8E8(void);</source><br />
<br />
=== scePervasiveUdcResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4AF7A01E<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Udc) at offset <code>0x90 + device * 4</code> in reset (|= mask).<br />
<br />
<source lang="C">int scePervasiveUdcResetEnableForDriver(int device, int mask);</source><br />
<br />
=== scePervasiveSdifResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x3D8A8712<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Sdif) at offset <code>0xA0 + device * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSdifResetEnableForDriver(void);</source><br />
<br />
=== scePervasiveMsifResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xA3569FF1<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Msif) at offset <code>0xB0</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveMsifResetEnableForDriver(void);</source><br />
<br />
=== scePervasiveI2sResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x146108D4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (I2s) at offset <code>0xC0 + device * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2sResetEnableForDriver(int device);</source><br />
<br />
=== scePervasiveSrcMixResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x821AE6C7<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (SrcMix) at offset <code>0xE0 + device * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSrcMixResetEnableForDriver(int device);</source><br />
<br />
=== scePervasiveSpdifResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB8AF1249<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Spdif) at offset <code>0xF0</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpdifResetEnableForDriver(void);</source><br />
<br />
=== scePervasiveGpioResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x731A097D<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (GPIO) at offset <code>0x100</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveGpioResetEnableForDriver(void);</source><br />
<br />
=== scePervasiveSpiResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7B16F900<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (SPI) at offset <code>0x104 + device * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpiResetEnableForDriver(int device);</source><br />
<br />
=== scePervasiveI2cResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x41F9E1C3<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (I2c) at offset <code>0x110 + device * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2cResetEnableForDriver(int device);</source><br />
<br />
=== scePervasiveUartResetEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x788B6C61<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (UART) at offset <code>0x120 + uart_bus * 4</code> in reset (|= mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveUartResetEnableForDriver(int uart_bus);</source><br />
<br />
=== scePervasiveGpuResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8A85E36B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Gpu) at offset <code>0x10</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveGpuResetDisableForDriver(void);</source><br />
<br />
=== scePervasiveVipResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xA7E64C6F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Vip) at offset <code>0x30</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
Used to reset [[Venezia]].<br />
<br />
<source lang="C">int scePervasiveVipResetDisableForDriver(void);</source><br />
<br />
=== ScePervasiveForDriver_E2D8F6C3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE2D8F6C3<br />
|}<br />
<br />
Puts the device (unknown) at offset <code>0x34</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_E2D8F6C3(int device);</source><br />
<br />
=== ScePervasiveForDriver_AC475961 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAC475961<br />
|}<br />
<br />
Puts the device (unknown) at offset <code>0x50 + device * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_AC475961(int device);</source><br />
<br />
=== scePervasiveCsiResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD3B59C33<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Csi) at offset <code>0x70 + head * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveCsiResetDisableForDriver(SceDisplayHead head);</source><br />
<br />
=== scePervasiveIftuDsiResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFFB43AC2<br />
|}<br />
<br />
Temp name was scePervasiveDsiResetDisableForDriver.<br />
<br />
Puts the device (IFTU DSI) at offset <code>0x80 + device * 4</code> out of reset (&= ~mask).<br />
<br />
<source lang="C">int scePervasiveIftuDsiResetDisableForDriver(int device, int mask);</source><br />
<br />
=== ScePervasiveForDriver_E92E28FF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE92E28FF<br />
|}<br />
<br />
Puts the device (IFTU2) at offset <code>0x88</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_E92E28FF(void);</source><br />
<br />
=== ScePervasiveForDriver_17109C28 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x17109C28<br />
|}<br />
<br />
Puts the device (unknown) at offset <code>0x8C</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_17109C28(void);</source><br />
<br />
=== scePervasiveUdcResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x13CC07C9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Udc) at offset <code>0x90 + device * 4</code> out of reset (&= ~mask).<br />
<br />
<source lang="C">int scePervasiveUdcResetDisableForDriver(int device, int mask);</source><br />
<br />
=== scePervasiveSdifResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD326E15F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Sdif) at offset <code>0xA0 + device * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSdifResetDisableForDriver(int device);</source><br />
<br />
=== scePervasiveMsifResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCB0F15CD<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Msif) at offset <code>0xB0</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveMsifResetDisableForDriver(void);</source><br />
<br />
=== scePervasiveI2sResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEEE340ED<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (I2s) at offset <code>0xC0 + device * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2sResetDisableForDriver(int device);</source><br />
<br />
=== scePervasiveSrcMixResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5BAFA0DC<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (SrcMix) at offset <code>0xE0 + device * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSrcMixResetDisableForDriver(int device);</source><br />
<br />
=== scePervasiveSpdifResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6A2FB697<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (Spdif) at offset <code>0xF0</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpdifResetDisableForDriver(void);</source><br />
<br />
=== scePervasiveGpioResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78C34032<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (GPIO) at offset <code>0x100</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveGpioResetDisableForDriver(void);</source><br />
<br />
=== scePervasiveSpiResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE4B145AE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (SPI) at offset <code>0x104 + device * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpiResetDisableForDriver(int device);</source><br />
<br />
=== scePervasiveI2cResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x86BEA9A4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (I2c) at offset <code>0x110 + device * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2cResetDisableForDriver(int device);</source><br />
<br />
=== scePervasiveUartResetDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA7CE7DCC<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Puts the device (UART) at offset <code>0x120 + uart_bus * 4</code> out of reset (&= ~mask) with mask = 1.<br />
<br />
<source lang="C">int scePervasiveUartResetDisableForDriver(int uart_bus);</source><br />
<br />
=== scePervasiveRemovableMemoryGetCardInsertStateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x551EEE82<br />
|}<br />
<br />
<source lang="C">int scePervasiveRemovableMemoryGetCardInsertStateForDriver(void);</source><br />
<br />
=== ScePervasiveForDriver_81A155F1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x81A155F1<br />
|}<br />
<br />
Returns SceLowio's mapped ScePervasiveMisc virtual address.<br />
<br />
<source lang="C">void *ScePervasiveForDriver_81A155F1(void);</source><br />
<br />
=== ScePervasiveForDriver_8BAB45F8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8BAB45F8<br />
|}<br />
<br />
Changes UART baudrate of one of the 7 UART bus. See [[UART_Registers#SceUartClkgenReg|SceUartClkgenReg]] for more information.<br />
<br />
<source lang="C">int ScePervasiveForDriver_8BAB45F8(int uart_bus, int baudrate);</source><br />
<br />
=== scePervasiveGpuClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x39E51AE2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (Gpu) at offset <code>0x10</code>.<br />
<br />
<source lang="C">int scePervasiveGpuClkGateEnableForDriver(int mask);</source><br />
<br />
=== scePervasiveDmacClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA10583FF<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Enables DMAC clock gate.<br />
<br />
<source lang="C">int scePervasiveDmacClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveDmacClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x15237AF8<br />
|}<br />
<br />
Disables DMAC clock gate.<br />
<br />
<source lang="C">int scePervasiveDmacClkGateDisableForDriver(int device);</source><br />
<br />
=== scePervasiveDbgSdioClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD34E74C5<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Enables [[SceDbgSdio]] clock gate.<br />
<br />
<source lang="C">int scePervasiveDbgSdioClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveDbgSdioClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x701D5355<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Disables [[SceDbgSdio]] clock gate.<br />
<br />
<source lang="C">int scePervasiveDbgSdioClkGateDisableForDriver(int device);</source><br />
<br />
=== scePervasiveVipClkGateEnable1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xFB01A2DD<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (Vip) at offset <code>0x30</code> with mask = 1.<br />
<br />
Used to initialize [[Venezia]] registers or SPRAM.<br />
<br />
<source lang="C">int scePervasiveVipClkGateEnable1ForDriver(void);</source><br />
<br />
=== scePervasiveVipClkGateEnable2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB9904983<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (Vip) at offset <code>0x30</code> with mask = 2.<br />
<br />
<source lang="C">int scePervasiveVipClkGateEnable2ForDriver(void);</source><br />
<br />
=== ScePervasiveForDriver_B1CFA18F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB1CFA18F<br />
|}<br />
<br />
Turns on the clock gate (|= mask) of the device (unknown) at offset <code>0x34</code> with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_B1CFA18F(void);</source><br />
<br />
=== scePervasiveCsiClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1068C067<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (Csi) at offset <code>0x70 + head * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveCsiClkGateEnableForDriver(SceDisplayHead head);</source><br />
<br />
=== scePervasiveIftuDsiClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBC42C72F<br />
|}<br />
<br />
Temp name was scePervasiveDsiClockEnableForDriver.<br />
<br />
Turns on the clock gate (|= mask) of the device (IFTU DSI) at offset <code>0x80 + device * 4</code>.<br />
<br />
<source lang="C">int scePervasiveIftuDsiClkGateEnableForDriver(int device, int mask);</source><br />
<br />
=== ScePervasiveForDriver_07F2A738 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x07F2A738<br />
|}<br />
<br />
Turns on the clock gate (|= mask) of the device (IFTU2) at offset <code>0x88</code> with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_07F2A738(void);</source><br />
<br />
=== ScePervasiveForDriver_C0C842FE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC0C842FE<br />
|}<br />
<br />
Turns on the clock gate (|= mask) of the device (unknown) at offset <code>0x8C</code> with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_C0C842FE(void);</source><br />
<br />
=== scePervasiveUdcClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA2EFD7AF<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (Udc) at offset <code>0x90 + device * 4</code>.<br />
<br />
<source lang="C">int scePervasiveUdcClkGateEnableForDriver(int device, int mask);</source><br />
<br />
=== scePervasiveSdifClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3CF7A012<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (Sdif) at offset <code>0xA0 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSdifClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveMsifClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7704C013<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveMsifClockEnableForDriver.<br />
<br />
Turns on the clock gate (|= mask) of the device (Msif) at offset <code>0xB0</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveMsifClkGateEnableForDriver(void);</source><br />
<br />
=== scePervasiveI2sClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4235EB7D<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (I2s) at offset <code>0xC0 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2sClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveSrcMixClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x47F2C35C<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (SrcMix) at offset <code>0xE0 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSrcMixClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveSpdifClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6B5DEDA2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (Spdif) at offset <code>0xF0</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpdifClkGateEnableForDriver(void);</source><br />
<br />
=== scePervasiveGpioClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2F195C97<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveGpioClockEnableForDriver.<br />
<br />
Turns on the clock gate (|= mask) of the device (GPIO) at offset <code>0x100</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveGpioClkGateEnableForDriver(void);</source><br />
<br />
=== scePervasiveSpiClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDFD96BFC<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveSpiClockEnableForDriver.<br />
<br />
Turns on the clock gate (|= mask) of the device (SPI) at offset <code>0x104 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpiClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveI2cClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC37CFDFC<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns on the clock gate (|= mask) of the device (I2c) at offset <code>0x110 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2cClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveUartClkGateEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEFD084D8<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveUartClockEnableForDriver.<br />
<br />
Turns on the clock gate (|= mask) of the device (UART) at offset <code>0x120 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveUartClkGateEnableForDriver(int device);</source><br />
<br />
=== scePervasiveGpuClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCA0ACFC5<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Gpu) at offset <code>0x10</code>.<br />
<br />
<source lang="C">int scePervasiveGpuClkGateDisableForDriver(int mask);</source><br />
<br />
=== scePervasiveVipClkGateDisable1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x2EEBE9AE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Vip) at offset <code>0x30</code> with mask = 1.<br />
<br />
Used to initialize [[Venezia]] registers or SPRAM.<br />
<br />
<source lang="C">int scePervasiveVipClkGateDisable1ForDriver(void);</source><br />
<br />
=== scePervasiveVipClkGateDisable2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFBE5AA2F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Vip) at offset <code>0x30</code> with mask = 2.<br />
<br />
<source lang="C">int scePervasiveVipClkGateDisable2ForDriver(void);</source><br />
<br />
=== ScePervasiveForDriver_03E1FAA6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x03E1FAA6<br />
|}<br />
<br />
Turns off the clock gate (&= ~mask) of the device (unknown) at offset <code>0x34</code> with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_03E1FAA6(void);</source><br />
<br />
=== scePervasiveCsiClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4B223AF5<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Csi) at offset <code>0x70 + head * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveCsiClkGateDisableForDriver(SceDisplayHead head);</source><br />
<br />
=== scePervasiveIftuDsiClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x25AE181E<br />
|}<br />
<br />
Temp name was ScePervasiveForDriver_25AE181E_dsi_clock_disable, scePervasiveDsiClockDisableForDriver.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (IFTU DSI) at offset <code>0x80 + device * 4</code>.<br />
<br />
<source lang="C">int scePervasiveIftuDsiClkGateDisableForDriver(int device, int mask);</source><br />
<br />
=== ScePervasiveForDriver_5AFE0AF0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x5AFE0AF0<br />
|}<br />
<br />
Turns off the clock gate (&= ~mask) of the device (IFTU2) at offset <code>0x88</code> with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_5AFE0AF0(void);</source><br />
<br />
=== ScePervasiveForDriver_9BB7B932 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9BB7B932<br />
|}<br />
<br />
Turns off the clock gate (&= ~mask) of the device (unknown) at offset <code>0x8C</code> with mask = 1.<br />
<br />
<source lang="C">int ScePervasiveForDriver_9BB7B932(void);</source><br />
<br />
=== scePervasiveUdcClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xAD1E81EB<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Udc) at offset <code>0x90 + device * 4</code>.<br />
<br />
<source lang="C">int scePervasiveUdcClkGateDisableForDriver(int device, int mask);</source><br />
<br />
=== scePervasiveSdifClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E43299D<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Sdif) at offset <code>0xA0 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSdifClkGateDisableForDriver(int device);</source><br />
<br />
=== scePervasiveMsifClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2A9778CD<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveMsifClockDisableForDriver.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Msif) at offset <code>0xB0</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveMsifClkGateDisableForDriver(void);</source><br />
<br />
=== scePervasiveI2sClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xA3CF9844<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (I2s) at offset <code>0xC0 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2sClkGateDisableForDriver(int device);</source><br />
<br />
=== scePervasiveSrcMixClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xF861FEE4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (SrcMix) at offset <code>0xE0 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSrcMixClkGateDisableForDriver(int device);</source><br />
<br />
=== scePervasiveSpdifClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x51981FEE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (Spdif) at offset <code>0xF0</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpdifClkGateDisableForDriver(void);</source><br />
<br />
=== scePervasiveGpioClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xEB176898<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveGpioClockDisableForDriver.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (GPIO) at offset <code>0x100</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveGpioClkGateDisableForDriver(void);</source><br />
<br />
=== scePervasiveSpiClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xA85BF98A<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveSpiClockDisableForDriver.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (SPI) at offset <code>0x104 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveSpiClkGateDisableForDriver(int device);</source><br />
<br />
=== scePervasiveI2cClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x3F3E1AEA<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (I2c) at offset <code>0x110 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveI2cClkGateDisableForDriver(int device);</source><br />
<br />
=== scePervasiveUartClkGateDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x18DD8043<br />
|}<br />
<br />
This is a guessed name. Temp name was scePervasiveUartClockDisableForDriver.<br />
<br />
Turns off the clock gate (&= ~mask) of the device (UART) at offset <code>0x120 + device * 4</code> with mask = 1.<br />
<br />
<source lang="C">int scePervasiveUartClkGateDisableForDriver(int device);</source><br />
<br />
=== ScePervasiveForDriver_4F64DEF6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4F64DEF6<br />
|}<br />
<br />
Sets active bus for UDC (USB Device Controller).<br />
<br />
Step 1: Puts the device (Udc) at offset <code>0x90 + bus * 4</code> in reset then disables its clock gate.<br />
<br />
Step 2: Updates ScePervasiveMisc global with the selected bus.<br />
<br />
Step 3: Puts the device out of reset.<br />
<br />
<source lang="C">int ScePervasiveForDriver_4F64DEF6(int bus);</source><br />
<br />
=== ScePervasiveForDriver_47708C03 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x47708C03<br />
|}<br />
<br />
Returns address to the ScePervasiveVid global buffer. What does "Vid" stands for? Video? Vendor ID?<br />
<br />
It might be related to clock frequencies and [[Syscon]]. Maybe this value is the clock multiplier/divider. See [[Pervasive#ARM_Clocks]].<br />
<br />
Used by [[ScePower]].<br />
<br />
<source lang="C">void *ScePervasiveForDriver_47708C03(void);</source><br />
<br />
=== ScePervasiveForDriver_E0711D42 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE0711D42<br />
|}<br />
<br />
Calls [[SMC]] 0x110: <code>smc_bus_set_state(1, 0);</code><br />
<br />
Used by [[SceEnumWakeUp]].<br />
<br />
<source lang="C">int ScePervasiveForDriver_E0711D42(void);</source><br />
<br />
=== scePervasiveCompatStopForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4712740D<br />
|}<br />
<br />
Calls [[SMC]] 0x110: <code>smc_bus_set_state(2, 0);</code><br />
<br />
Called in [[SceCompat#sceCompatSuspend]] and [[SceCompat#sceCompatStop]].<br />
<br />
<source lang="C">int scePervasiveCompatStopForDriver(void);</source><br />
<br />
=== scePervasiveCompatStartForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xB2F232E5<br />
|}<br />
<br />
Calls [[SMC]] 0x110: <code>smc_bus_set_state(2, 1);</code><br />
<br />
Called in [[SceCompat#sceCompatResume]] and [[SceCompat#sceCompatInit]].<br />
<br />
<source lang="C">int scePervasiveCompatStartForDriver(void);</source><br />
<br />
=== scePervasiveCompatLcdDmacInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xA7855D3A<br />
|}<br />
<br />
Calls [[SMC]] 0x110: <code>smc_bus_set_state(2, 2);</code><br />
<br />
Called during PSP Emulator ([[SceCompat]]) start and resume.<br />
<br />
<source lang="C">int scePervasiveCompatLcdDmacInitForDriver(void);</source><br />
<br />
=== ScePervasiveForDriver_043B33F5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x043B33F5<br />
|}<br />
<br />
SDIF related. [[Pervasive#ScePervasiveMisc_.280xE3100000.29|ScePervasiveMisc]] offset <code>0x310</code>.<br />
<br />
<source lang="C">int ScePervasiveForDriver_043B33F5(unsigned int device, unsigned int value);</source><br />
<br />
<source lang="C"><br />
if ((device < 4) && (value < 7)) {<br />
*(uint32_t *)(ScePervasiveMisc + 0x310) = (*(uint32_t *)(ScePervasiveMisc + 0x310) & ~(7 << ((device << 3) & 0xff))) | (value << ((device << 3) & 0xff));<br />
dmb();<br />
}<br />
</source><br />
<br />
=== ScePervasiveForDriver_29E65AE1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x29E65AE1<br />
|}<br />
<br />
=== ScePervasiveForDriver_453BD2EC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || ??<br />
|-<br />
| 1.800.071-3.740.011 || 0x453BD2EC<br />
|}<br />
<br />
SDIF related. [[Pervasive#ScePervasiveMisc_.280xE3100000.29|ScePervasiveMisc]] offset <code>0x124</code>.<br />
<br />
<source lang="C">int ScePervasiveForDriver_453BD2EC(unsigned int device, unsigned int value);</source><br />
<br />
<source lang="C"><br />
if ((device < 4) && (value < 2)) {<br />
*(uint32_t *)(ScePervasiveMisc + 0x124) = (*(uint32_t *)(ScePervasiveMisc + 0x124) & ~(1 << (device & 0xff))) | (value << (device & 0xff));<br />
dmb();<br />
}<br />
</source><br />
<br />
=== ScePervasiveForDriver_9F8E589C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || ??<br />
|-<br />
| 2.100.081-3.740.011 || 0x9F8E589C<br />
|}<br />
<br />
SDIF related. [[Pervasive#ScePervasiveMisc_.280xE3100000.29|ScePervasiveMisc]] offsets <code>0x110</code>-<code>0x11C</code>.<br />
<br />
<source lang="C">int ScePervasiveForDriver_9F8E589C(unsigned int device, unsigned int value);</source><br />
<br />
<source lang="C"><br />
if ((device < 4) && ((param_2 & 0xfffff8ff) == 0)) {<br />
*(uint32_t *)(ScePervasiveMisc + 0x110 + device * 4) = value;<br />
dmb();<br />
}<br />
</source><br />
<br />
=== ScePervasiveForDriver_E3A735B9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE3A735B9<br />
|}<br />
<br />
== SceGpioForDriver ==<br />
<br />
If <code>bus</code> is <code>0</code>, the <code>SceGpio0Reg</code> registers are used, and if <code>bus</code> is <code>1</code>, the <code>SceGpio1Reg</code> registers are used.<br />
<br />
=== Types ===<br />
<source lang="C"><br />
//For port mode<br />
#define SCE_GPIO_PORT_MODE_OUTPUT 0<br />
#define SCE_GPIO_PORT_MODE_INPUT 1<br />
<br />
//For interrupt mode<br />
#define SCE_GPIO_INTR_MODE_HIGH_SENSING 0 //High-level sensing<br />
#define SCE_GPIO_INTR_MODE_LOW_SENSING 1 //Low-level sensing<br />
#define SCE_GPIO_INTR_MODE_RISING_EDGE 2 //Rising-edge detection<br />
#define SCE_GPIO_INTR_MODE_FALLING_EDGE 3 //Falling-edge detection<br />
</source><br />
<br />
=== sceGpioSetPortModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.74 || 0x372022A4<br />
|}<br />
<br />
Set the port mode (input/output) of a port.<br />
<br />
<source lang="c"><br />
//mode: one of the port mode defines<br />
//Returns the old mode on success, <0 on error.<br />
int sceGpioSetPortModeForDriver(int bus, int port, int mode);<br />
</source><br />
<br />
=== sceGpioGetPortModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.74 || 0x372022A4<br />
|}<br />
<br />
Get the current port mode (input/output) of a port.<br />
<br />
<source lang="c"><br />
//Returns one of the port mode defines on success, <0 on error.<br />
int sceGpioGetPortModeForDriver(int bus, int port);<br />
</source><br />
<br />
=== sceGpioSetIntrModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.74 || 0xBBEA1DDC<br />
|}<br />
<br />
Set the interrupt mode of a port.<br />
<br />
<source lang="c"><br />
//mode: one of the interrupt mode defines<br />
int sceGpioSetIntrModeForDriver(int bus, int port, int mode);<br />
</source><br />
<br />
=== sceGpioGetIntrModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.74 || 0xE97A3B31<br />
|}<br />
<br />
Get the current interrupt mode of a port.<br />
<br />
<source lang="c"><br />
//Returns one of the interrupt modes on success, <0 on error.<br />
int sceGpioGetIntrModeForDriver(int bus, int port);<br />
</source><br />
<br />
=== sceGpioPortSetForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.74 || 0xD454A584<br />
|}<br />
<br />
Set a GPIO port.<br />
<br />
<source lang="c">int sceGpioPortSetForDriver(int bus, int port);</source><br />
<br />
=== sceGpioPortClearForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.74 || 0xF6310435<br />
|}<br />
<br />
Clear a GPIO port.<br />
<br />
<source lang="c">int sceGpioPortClearForDriver(int bus, int port);</source><br />
<br />
=== SceGpioForDriver_129DF5AC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.74 || 0x129DF5AC<br />
|}<br />
<br />
Read the value of a port. Both input and output ports are accepted (in the latter case, latch value is returned).<br />
<br />
<source lang="c"><br />
//Returns SCE_TRUE if the port was set, SCE_FALSE if it was clear, <0 on error.<br />
int SceGpioForDriver_129DF5AC(int bus, int port);<br />
</source><br />
<br />
=== SceGpioForDriver_A1B5A462 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.74 || 0xA1B5A462<br />
|}<br />
<br />
Read an input port, and "write" the opposite of its state (Clear if read as 1, Set if read as 0).<br />
<br />
<source lang="c"><br />
//Returns SCE_TRUE if the port was set, SCE_FALSE if it was clear, <0 on error.<br />
int SceGpioForDriver_A1B5A462(int bus, int port);<br />
</source><br />
<br />
=== sceGpioQueryIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.74 || 0x010DC295<br />
|}<br />
<br />
Check if interrupts are pending on a port.<br />
<br />
<source lang="c"><br />
//Returns SCE_FALSE if no interrupts are pending on port,<br />
//SCE_TRUE if interrupts are pending, <0 on error.<br />
int sceGpioQueryIntrForDriver(int bus, int port);<br />
</source><br />
<br />
=== sceGpioAcquireIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.74 || 0x35AAD77A<br />
|}<br />
<br />
Clear all pending interrupts on a port.<br />
<br />
<source lang="c"><br />
//Returns SCE_TRUE if an interrupt was pending,<br />
//SCE_FALSE if no interrupts were pending, <0 on error.<br />
int sceGpioAcquireIntrForDriver(int bus, int port);<br />
</source><br />
<br />
== ScePwmForDriver ==<br />
<br />
ScePwmForDriver_0374213C: 0x0374213C<br />
ScePwmForDriver_13161CCC: 0x13161CCC<br />
ScePwmForDriver_22C17D24: 0x22C17D24<br />
ScePwmForDriver_514773B1: 0x514773B1<br />
ScePwmForDriver_99911920: 0x99911920<br />
<br />
== SceI2cForDriver ==<br />
<br />
=== Types ===<br />
<source lang="c"><br />
typedef struct SceI2cDebugHandlers {<br />
unsigned int size;<br />
void (*write_start)(int bus, int device, unsigned char *buffer, int size);<br />
void (*write_error)(int bus, int error, int result);<br />
void (*read_start)(int bus, int device, unsigned char *buffer, int size);<br />
void (*read_error)(int bus, int error, int result);<br />
void (*write_read_start)(int bus, int write_device, unsigned char *write_buffer, int write_size);<br />
void (*write_read_error)(int bus, int error, int result);<br />
} SceI2cDebugHandlers;<br />
</source><br />
<br />
For the following functions:<br />
* <code>bus</code> indicate the target I²C bus<br />
* <code>dev_id</code> seems to indicate the address of the target device, shifted left by 1 (i.e. I²C address = <code>dev_id >> 1</code>).<br />
<br />
The ID <code>1</code> is handled in a specific way for bus 1 (see [[SceLowio#sceI2cReset|sceI2cReset]]).<br />
<br />
=== sceI2cInit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9CF8F3D6<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Reinitializes the I²C controller for selected bus?<br />
<br />
<source lang="c">int sceI2cInit(unsigned bus);</source><br />
<br />
=== sceI2cReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x76D277AB<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
This function seems to be used for synchronisation of I2c1 transfers.<br />
<br />
When calling any read/write function on I²C bus 1 with <code>dev_id == 1</code>, the function calls <code>sceKernelWaitEventFlag(/* I2c1 evf */, /* pattern = */ 0x80000000, /* ... */)</code> before performing the operation.<br />
<br />
<source lang="c"><br />
// a1 == 0 -> clear bits 0x7FFFFFFF of the synchronisation event flag pattern<br />
// a1 != 0 -> set bit 0x80000000 of the synchronisation event flag pattern<br />
int sceI2cReset(SceBool a1);<br />
</source><br />
<br />
=== sceI2cMasterTransmit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCA94A759<br />
|}<br />
<br />
This is an official name. Temp name was sceI2cTransferWrite.<br />
<br />
Writes data to I²C device on specified bus.<br />
<br />
<source lang="c">int sceI2cMasterTransmit(unsigned bus, unsigned dev_id, const void *buffer, unsigned size);</source><br />
<br />
=== sceI2cMasterReceive ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD1D0A9A4<br />
|}<br />
<br />
This is an official name. Temp name was sceI2cTransferRead.<br />
<br />
Reads data from I²C device on specified bus.<br />
<br />
<source lang="c">int sceI2cMasterReceive(unsigned bus, unsigned dev_id, void *buffer, unsigned size);</source><br />
<br />
=== sceI2cMasterTransmitReceive ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0A40B7BF<br />
|}<br />
<br />
This is an official name. Temp name was sceI2cTransferWriteRead.<br />
<br />
Performs a write to an I²C device followed by a read to a (potentially different) I2c device on the specified bus.<br />
<br />
<source lang="c">int sceI2cMasterTransmitReceive(unsigned bus, unsigned write_dev_id, const void *write_buffer, unsigned write_size, unsigned read_dev_id, void *read_buffer, unsigned read_size);</source><br />
<br />
=== sceI2cSetDebugHandlers ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA2C7CE62<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers callbacks called during I²C operations.<br />
<br />
<source lang="c">int sceI2cSetDebugHandlers(unsigned bus, SceI2cDebugHandlers *debug_handlers)</source><br />
<br />
=== SceI2cForDriver_30CF9469 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x30CF9469<br />
|}<br />
<br />
Writes <code>a2</code> and <code>a3</code> to some per-bus global variables that are seemingly never read, then writes a value to I2cReg->unk18 depending on [[KBL Param#Hardware_Info|Hardware Info]] mask 0x00FF0000 (motherboard main version).<br />
<br />
<source lang="c">int SceI2cForDriver_30CF9469(unsigned bus, unsigned a2, unsigned a3);</source><br />
<br />
=== SceI2cForDriver_E449AC6E ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE449AC6E<br />
|}<br />
<br />
Writes <code>a2</code> to some per-bus global variable that is seemingly never read.<br />
<br />
<source lang="c">int SceI2cForDriver_E449AC6E(unsigned bus, unsigned a2);</source><br />
<br />
== SceGrabForDriver ==<br />
<br />
=== sceGrabCompatStartExForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x072B8D93<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x11e. <code>smc(0x11E, 1, param)</code><br />
<br />
Replacement for [[SceLowio#scePervasiveCompatStartForDriver]].<br />
<br />
<source lang="C"><br />
// command: 0, 1<br />
int sceGrabCompatStartExForDriver(int param);<br />
</source><br />
<br />
=== SceGrabForDriver_188BBCC8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x188BBCC8<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x11C.<br />
<br />
=== SceGrabForDriver_1F292554 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1F292554<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x121. <code>smc(0x121)</code><br />
<br />
=== sceGrabCompatLcdDmacInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x379130B2<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x11e. <code>smc(0x11E, 2)</code><br />
<br />
Replacement for [[SceLowio#scePervasiveCompatLcdDmacInitForDriver]].<br />
<br />
=== SceGrabForDriver_5F36ABC4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5F36ABC4<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x11f. <code>smc(0x11f)</code><br />
<br />
=== SceGrabForDriver_B22EE8BC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB22EE8BC<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x11b. <code>smc(0x11b)</code><br />
<br />
=== SceGrabForDriver_E9C25A28 ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE9C25A28<br />
|}<br />
<br />
Set PSP address.<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x11d. <code>smc(0x11d)</code><br />
<br />
{| class="wikitable"<br />
|-<br />
! bank !! Address in PSP<br />
|-<br />
| 0 || ?<br />
|-<br />
| 1 || ?<br />
|-<br />
| 2 || ?<br />
|-<br />
| 3 || 0xA8000000<br />
|-<br />
| 4 || ?<br />
|-<br />
| 5 || ?<br />
|-<br />
| 6 || ?<br />
|-<br />
| 7 || ?<br />
|}<br />
<br />
<source lang="C"><br />
// bank can be from 0 to 7<br />
int SceGrabForDriver_E9C25A28(SceUInt32 bank, SceUIntPtr paddr);<br />
</source><br />
<br />
=== sceGrabCompatStopForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF13C63DD<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x11e. <code>smc(0x11E, 0)</code><br />
<br />
Replacement for [[SceLowio#scePervasiveCompatStopForDriver]].<br />
<br />
== SceCdramForDriver ==<br />
<br />
=== SceCdramForDriver_41D821F3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x41D821F3<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x119.<br />
<br />
=== SceCdramForDriver_BA81E0E3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0xBA81E0E3<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[SceExcpmgr#SMC|SMC]] 0x118.<br />
<br />
=== SceCdramForDriver_0657FC1B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || not present<br />
|-<br />
| 3.60 || 0x0657FC1B<br />
|}<br />
<br />
=== SceCdramForDriver_2D728EBF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || not present<br />
|-<br />
| 3.60 || 0x2D728EBF<br />
|}<br />
<br />
=== SceCdramForDriver_3EFA7540 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || not present<br />
|-<br />
| 3.60 || 0x3EFA7540<br />
|}<br />
<br />
== SceDsiForDriver ==<br />
<br />
=== sceDsiStopMasterForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x114D1413<br />
|}<br />
<br />
Temp name was sceDsiDisableHeadForDriver.<br />
<br />
<source lang="c">int sceDsiStopMasterForDriver(SceDisplayHead head);</source><br />
<br />
=== sceDsiDcsReadForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3FB0DF1F<br />
|}<br />
<br />
<source lang="c">int sceDsiDcsReadForDriver(SceDisplayHead head, unsigned short param, void *buf, SceSize size);</source><br />
<br />
MIPI DSI DCS Read (0x06)<br />
<br />
=== sceDsiGetPixelClockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4DF9E924<br />
|}<br />
<br />
<source lang="c">int sceDsiGetPixelClockForDriver(SceDisplayHead head);</source><br />
<br />
=== sceDsiStartMasterForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x5BE5AA9B<br />
|}<br />
<br />
Temp name was sceDsiEnableHeadForDriver.<br />
<br />
<source lang="c">int sceDsiStartMasterForDriver(SceDisplayHead head);</source><br />
<br />
=== SceDsiForDriver_6F8029A1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6F8029A1<br />
|}<br />
<br />
<source lang="c">int SceDsiForDriver_6F8029A1(SceDisplayHead head);</source><br />
<br />
Returns the current Vcount, read from <code>((*(u32 *)([[DSI_Registers#Registers|SceDsiReg]] + 0x4C) >> 16) & 0x1FFF) - 1</code>.<br />
<br />
=== sceDsiStopDisplayForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x7640F607<br />
|}<br />
<br />
<source lang="c">int sceDsiStopDisplayForDriver(SceDisplayHead head);</source><br />
<br />
=== sceDsiSetDisplayModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78E6E3CF<br />
|}<br />
<br />
Temp name was sceDsiSetLanesAndPixelSizeForDriver.<br />
<br />
For <code>head</code> == SCE_DISPLAY_HEAD_MAIN_LCD_OLED, <code>lanes</code> must be 2 and <code>pixelsize</code> 24.<br />
<br />
For <code>head</code> == SCE_DISPLAY_HEAD_HDMI, <code>lanes</code> can be 2 or 3 and <code>pixelsize</code> can be 24 or 30.<br />
<br />
<source lang="c">int sceDsiSetDisplayModeForDriver(SceDisplayHead head, int lanes, int pixelsize);</source><br />
<br />
=== SceDsiForDriver_8610B795 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8610B795<br />
|}<br />
<br />
Sets internal struct member <code>struct[head].unk1C = mul * struct[head].unk18 / div</code>.<br />
<br />
<source lang="c">int SceDsiForDriver_8610B795(SceDisplayHead head, int mul, int div);</source><br />
<br />
=== sceDsiGenericShortWriteForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x89C00D2F<br />
|}<br />
<br />
Performs a MIPI DSI Generic Short Write, no parameters (0x03), MIPI DSI Generic Short Write, 1 parameter (0x13) or MIPI DSI Generic Short Write, 2 parameters (0x23) depending on the whether <code>param<sub>i</sub></code> is negative or not (bit 31 set).<br />
<br />
<source lang="c">int int sceDsiGenericShortWriteForDriver(SceDisplayHead head, int param0, int param1, int param2);</source><br />
<br />
=== sceDsiSetScreenModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x97BFEA76<br />
|}<br />
<br />
Temp name was sceDsiSetVicForDriver.<br />
<br />
<source lang="c">int sceDsiSetScreenModeForDriver(SceDisplayHead head, SceDisplayScreenMode screenMode);</source><br />
<br />
=== sceDsiGenericReadRequestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x98120684<br />
|}<br />
<br />
Performs a MIPI DSI Generic Read Request, no parameters (0x04), or MIPI DSI Generic Read Request, 1 parameter (0x14) depending on the whether <code>param</code> is negative or not (bit 31 set).<br />
<br />
<source lang="c">int sceDsiGenericReadRequestForDriver(SceDisplayHead head, int param, void *buff, SceSize size);</source><br />
<br />
=== sceDsiDcsShortWriteForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBA6BC89F<br />
|}<br />
<br />
If <code>param1</code> is negative (bit 31 set), MIPI DSI DCS Short Write, no parameters (0x05) is performed. MIPI DSI DCS Short Write, 1 parameter (0x15) is performed otherwise.<br />
<br />
<source lang="c">int sceDsiDcsShortWriteForDriver(SceDisplayHead head, SceUInt16 param0, SceUInt32 param1);</source><br />
<br />
=== sceDsiStartDisplayForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xC2E85919<br />
|}<br />
<br />
<source lang="c">int sceDsiStartDisplayForDriver(SceDisplayHead head, SceUInt32 control);</source><br />
<br />
=== SceDsiForDriver_F2921E29 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF2921E29<br />
|}<br />
<br />
<source lang="c">int SceDsiForDriver_F2921E29(SceDisplayHead head, SceUInt32 unk);</source><br />
<br />
=== sceDsiQeuryResolutionSizeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0xFA9E2DC5<br />
|-<br />
| 3.60 || sceDsiQueryResolutionSizeForDriver<br />
|}<br />
<br />
The typo in the function name was fixed since an unknown FW, and so the NID was updated. See also sceDsiQueryResolutionSizeForDriver.<br />
<br />
=== sceDsiQueryResolutionSizeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || sceDsiQeuryResolutionSizeForDriver<br />
|-<br />
| 3.60 || 0xB3A70C05<br />
|}<br />
<br />
Temp name was sceDsiGetVicResolutionForDriver.<br />
<br />
For progressive modes, <code>V_total = V_active + VFP + VSW + VBP</code>. For interlaced modes, <code>V_total = V_active + 2 * (VFP + VSW + VBP) - 1</code>.<br />
<br />
<source lang="c">int sceDsiQueryResolutionSizeForDriver(SceDisplayScreenMode screenMode, int *width, int *height);</source><br />
<br />
== SceIftuForDriver ==<br />
<br />
<source lang="c"><br />
typedef struct SceIftuFrameBuf {<br />
unsigned int pixelformat;<br />
unsigned int width; /* Aligned to 16 */<br />
unsigned int height; /* Aligned to 8 */<br />
unsigned int leftover_stride; /* (pitch - aligned_w) * bpp */<br />
unsigned int leftover_align; /* if YCbCr: (width >> 1) & 0xF [chroma align?] */<br />
unsigned int paddr0;<br />
unsigned int paddr1;<br />
unsigned int paddr2;<br />
} SceIftuFrameBuf; /* size = 0x20 */<br />
<br />
typedef struct SceIftuPlaneState {<br />
SceIftuFrameBuf fb;<br />
unsigned int unk20; // not observed to be non-zero<br />
unsigned int unk24; // not observed to be non-zero<br />
unsigned int unk28; // not observed to be non-zero<br />
unsigned int src_w; // inverse scaling factor in 16.16 fixed point<br />
unsigned int src_h; // inverse scaling factor in 16.16 fixed point<br />
unsigned int dst_x; // offset into the destination buffer<br />
unsigned int dst_y; // offset into the destination buffer<br />
unsigned int src_x; // offset into the source buffer in 8.8 fixed point<br />
unsigned int src_y; // offset into the source buffer in 8.8 fixed point<br />
unsigned int crop_top;<br />
unsigned int crop_bot;<br />
unsigned int crop_left;<br />
unsigned int crop_right;<br />
} SceIftuPlaneState; /* size = 0x54 */<br />
<br />
typedef struct SceIftuCscParams {<br />
unsigned int post_add_0; /* 10-bit integer */<br />
unsigned int post_add_1_2; /* 10-bit integer */<br />
unsigned int post_clamp_max_0; /* 10-bit integer */<br />
unsigned int post_clamp_min_0; /* 10-bit integer */<br />
unsigned int post_clamp_max_1_2; /* 10-bit integer */<br />
unsigned int post_clamp_min_1_2; /* 10-bit integer */<br />
unsigned int ctm[3][3]; /* S3.9 fixed point format */<br />
} SceIftuCscParams; /* size = 0x3C */<br />
<br />
typedef struct SceIftuConvParams {<br />
unsigned int size;<br />
unsigned int unk04;<br />
SceIftuCscParams *csc_params1; // +0x08<br />
SceIftuCscParams *csc_params2; // +0x0C<br />
unsigned int csc_control; // +0x10<br />
unsigned int unk14;<br />
unsigned int unk18;<br />
unsigned int unk1C;<br />
unsigned int alpha;<br />
unsigned int unk24;<br />
} SceIftuConvParams; /* size = 0x28 */<br />
</source><br />
<br />
=== sceIftuEnableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x0D7C02F7<br />
|}<br />
<br />
Temp name was SceIftuForDriver_0D7C02F7_plane_enable.<br />
<br />
<source lang="c"><br />
// plane must be between 0 and 3<br />
int sceIftuEnableForDriver(unsigned int plane);<br />
</source><br />
<br />
=== SceIftuForDriver_0FCBF457 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0FCBF457<br />
|}<br />
<br />
Set plane CSC (Color Space Conversion) information.<br />
<br />
<source lang="c">int SceIftuForDriver_0FCBF457_set_plane_csc2(unsigned int plane, SceIftuCscParams *param);</source><br />
<br />
=== SceIftuForDriver_357EAE24 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x357EAE24<br />
|}<br />
<br />
Sets plane alpha value. Only planes 1 and 3 support alpha blending. Supported alpha values are 0-0x100 where 0x100 is no transparency (alpha blending disable).<br />
<br />
<source lang="c">int SceIftuForDriver_357EAE24_set_plane_alpha(unsigned int plane, int alpha);</source><br />
<br />
=== sceIftuSetInputFrameBufferForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x7CE0C4DA<br />
|}<br />
<br />
Set bilinear to 0 for nearest neighbour, set to 1 for bilinear filtering, set to -1 when plane_state is a zero struct.<br />
<br />
<source lang="c">int sceIftuSetInputFrameBufferForDriver(unsigned int plane_index, SceIftuPlaneState *plane_state, int bilinear, int sync);</source><br />
<br />
=== sceIftuConvertForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x67E37EFC<br />
|}<br />
<br />
Temp name was sceIftuCscForDriver.<br />
<br />
Performs Color Space Conversion (by using SceIftu2Reg).<br />
<br />
<source lang="c">int sceIftuConvertForDriver(SceIftuFrameBuf *dst_fb, SceIftuPlaneState *src_plane_state, SceIftuConvParams *conv_params);</source><br />
<br />
=== sceIftuSetMergeSettingForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xAF19FD85<br />
|}<br />
<br />
Temp name was SceIftuForDriver_AF19FD85_set_global_blending_control.<br />
<br />
<source lang="c">int sceIftuSetMergeSettingForDriver(unsigned int plane, int control);</source><br />
<br />
=== sceIftuDisableForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xC11F30B3<br />
|}<br />
<br />
Temp name was SceIftuForDriver_C11F30B3_plane_disable.<br />
<br />
<source lang="c">int sceIftuDisableForDriver(unsigned int plane);</source><br />
<br />
=== SceIftuForDriver_D64F4C6B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD64F4C6B<br />
|}<br />
<br />
Set plane CSC (Color Space Conversion) information.<br />
<br />
<source lang="c">int SceIftuForDriver_D64F4C6B_set_plane_csc(unsigned int plane, SceIftuCscParams *param);</source><br />
<br />
=== sceIftuSetOutputFormatForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xE6EE2C6B<br />
|}<br />
<br />
<source lang="c">int sceIftuSetOutputFormatForDriver(int plane, int width, int height, int pixel_format, int interlaced);</source><br />
<br />
== SceCsiForDriver ==<br />
<br />
=== SceCsiForDriver_10545393 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x10545393<br />
|}<br />
<br />
Copies buf to memory.<br />
<br />
<source lang="C"><br />
// buf size is 0x2C<br />
int SceCsiForDriver_10545393(SceDisplayHead head, void *buf);<br />
</source><br />
<br />
=== SceCsiForDriver_2AFEA1B0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x2AFEA1B0<br />
|}<br />
<br />
<source lang="C">int SceCsiForDriver_2AFEA1B0(SceDisplayHead head, SceUInt a2);</source><br />
<br />
=== SceCsiForDriver_4AE39F26 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x4AE39F26<br />
|}<br />
<br />
Maybe CSI stop.<br />
<br />
<source lang="C">int SceCsiForDriver_4AE39F26(SceDisplayHead head);</source><br />
<br />
=== SceCsiForDriver_A1D1805D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xA1D1805D<br />
|}<br />
<br />
Maybe CSI start.<br />
<br />
<source lang="C">int SceCsiForDriver_A1D1805D(SceDisplayHead head);</source><br />
<br />
=== SceCsiForDriver_B508822B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xB508822B<br />
|}<br />
<br />
Sets a2 and a3 in memory.<br />
<br />
<source lang="C">int SceCsiForDriver_B508822B(SceDisplayHead head, int a2, int a3);</source><br />
<br />
=== SceCsiForDriver_FC165297 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xFC165297<br />
|}<br />
<br />
Sets a2 in memory.<br />
<br />
<source lang="C">int SceCsiForDriver_FC165297(SceDisplayHead head, int a2);</source><br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSysmem&diff=21098
SceSysmem
2024-01-31T23:43:36Z
<p>CelesteBlue: /* sceKernelSysrootGetKermitRevisionForKernel */</p>
<hr />
<div>SceSysmem is a kernel module that acts as the heart of the kernel. It exports multiple libraries for various features. SceSysmem is the first module that is loaded in the [[Boot Sequence|kernel load sequence]] and its libraries are imported by almost all other modules. See [[Virtual Memory]] and [[Physical Memory]] for more details on the memory subsystem.<br />
<br />
== Module ==<br />
<br />
This module exists in both non-secure and secure world. The non-secure world SELF can be found in <code>os0:kd/sysmem.skprx</code>. It also can be found in the [[Boot Sequence|Boot Image]].<br />
<br />
{| class="wikitable"<br />
! Version !! World !! Privilege<br />
|-<br />
| 1.50-3.61 || Non-secure || Kernel<br />
|-<br />
| 1.69-1.80 || Secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
{| class="wikitable"<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceSysmemForKernel|SceSysmemForKernel]] || Non-secure || Kernel || 0x63A519E5<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceSysmemForKernel|SceSysmemForKernel]] || Non-secure || Kernel || 0x02451F0F<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysmemForDriver|SceSysmemForDriver]] || Non-secure || Kernel || 0x6F25E18A<br />
|-<br />
| 0.990-1.692 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || 0xC7309957<br />
|-<br />
| 1.80-3.74 || [[SceSysmem#SceSysmemForDebugger|SceSysmemForDebugger]] || Non-secure || Kernel || not present. Removed.<br />
|-<br />
| 0.990-3.60 || [[SceSysmem#SceSysmem|SceSysmem]] || Non-secure || User || 0x37FE725A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDipsw|SceDipsw]] || Non-secure || User || 0xB36D5922<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDipswForDriver|SceDipswForDriver]] || Non-secure || Kernel || 0xC9E26388<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceUartForKernel|SceUartForKernel]] || Non-secure || Kernel || 0xC03DBE40<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceUartForKernel|SceUartForKernel]] || Non-secure || Kernel || 0x1CCD9BA3<br />
|-<br />
| 0.990-3.740.011 || [[SceSysmem#SceCpu|SceCpu]] || Non-secure || User || 0x45265161<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0x54BF2BAB<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceCpuForKernel|SceCpuForKernel]] || Non-secure || Kernel || 0xA5195D20<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceCpuForDriver|SceCpuForDriver]] || Non-secure || Kernel || 0x40ECDB0E<br />
|-<br />
| 0.990-1.692 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || 0x24878615<br />
|-<br />
| 1.80-3.74 || [[SceSysmem#SceSysclibForKernel|SceSysclibForKernel]] || Non-secure || Kernel || not present. Removed.<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysclibForDriver|SceSysclibForDriver]] || Non-secure || Kernel || 0x7EE45391<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysrootForKernel|SceSysrootForKernel]] || Non-secure || Kernel || 0x3691DA45<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSysrootForDriver|SceSysrootForDriver]] || Non-secure || Kernel || 0x2ED7F97A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceKernelUtilsForDriver|SceKernelUtilsForDriver]] || Non-secure || Kernel || 0x496AD8B4<br />
|-<br />
| 0.990-1.692 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || 0xE241534E<br />
|-<br />
| 1.80-3.74 || [[SceSysmem#SceZlibForDriver|SceZlibForDriver]] || Non-secure || Kernel || not present. Moved to [[SceSblPostSsMgr#SceZlibForDriver]].<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceKernelSuspendForDriver|SceKernelSuspendForDriver]] || Non-secure || Kernel || 0x7290B21C<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceQafMgrForDriver|SceQafMgrForDriver]] || Non-secure || Kernel || 0x4E29D3B6<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#ScePmMgrForDriver|ScePmMgrForDriver]] || Non-secure || Kernel || 0xF13F32F9<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceSblAIMgrForDriver|SceSblAIMgrForDriver]] || Non-secure || Kernel || 0xFD00C69A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceProcEventForDriver|SceProcEventForDriver]] || Non-secure || Kernel || 0x887F19D0<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDebugLed|SceDebugLed]] || Non-secure || User || 0xAE004C0A<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDebugLedForDriver|SceDebugLedForDriver]] || Non-secure || Kernel || 0x7BC05EAD<br />
|-<br />
| 0.990-3.61 || [[SceSysmem#SceDebugForKernel|SceDebugForKernel]] || Non-secure || Kernel || 0x88C17370<br />
|-<br />
| 3.63-3.65 || [[SceSysmem#SceDebugForKernel|SceDebugForKernel]] || Non-secure || Kernel || 0x13D793B7<br />
|-<br />
| 0.990-3.65 || [[SceSysmem#SceDebugForDriver|SceDebugForDriver]] || Non-secure || Kernel || 0x88758561<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSysmemForTZS|SceSysmemForTZS]] || Secure || Kernel || 0x08680060<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceDipswForTZS|SceDipswForTZS]] || Secure || Kernel || 0x9DBF584C<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceUartForTZS|SceUartForTZS]] || Secure || Kernel || 0xA1D740D7<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceDebugForTZS|SceDebugForTZS]] || Secure || Kernel || 0x028FFADB<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceCpuForTZS|SceCpuForTZS]] || Secure || Kernel || 0xC516B23E<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSysclibForTZS|SceSysclibForTZS]] || Secure || Kernel || 0xC839BB78<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSysrootForTZS|SceSysrootForTZS]] || Secure || Kernel || 0xFEFF641D<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceQafMgrForTZS|SceQafMgrForTZS]] || Secure || Kernel || 0x637069DD<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#ScePmMgrForTZS|ScePmMgrForTZS]] || Secure || Kernel || 0x27F1AFD8<br />
|-<br />
| 0.931-3.60 || [[SceSysmem#SceSblAIMgrForTZS|SceSblAIMgrForTZS]] || Secure || Kernel || 0x60D19047<br />
|}<br />
<br />
The SceCpu libraries provide wrappers for much ARM CP15 co-processor access as well as low level support of spinlocks and other synchronization primitives.<br />
<br />
== Types ==<br />
<br />
See [[SceSysmem Types]].<br />
<br />
== SysEvent ==<br />
<br />
Dispatcher<br />
<br />
{| class="wikitable sortable mw-collapsible mw-collapsed"<br />
|-<br />
! Module !! Type !! Event !! Description<br />
|-<br />
| [[ScePower]] || 0 || 0x100 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_START</code>. before sceKernelCpuSuspendIntr.<br />
|-<br />
| [[ScePower]] || 0 || 0x101 || unknown<br />
|-<br />
| [[ScePower]] || 0 || 0x102 || unknown. later sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 0 || 0x20F -> 0x200 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE2</code>. after sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 0 || 0x400 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_START</code>.<br />
|-<br />
| [[ScePower]] || 0 || 0x401 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_MAIN</code>. (this is a guessed name. but should be official name)<br />
|-<br />
| [[ScePower]] || 0 || 0x402 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE1_END</code>. (this is a guessed name)<br />
|-<br />
| [[ScePower]] || 1 || 0x1000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_FREEZE_TIME</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x400F -> 0x4000 || <code>SCE_KERNEL_SYSEVENT_SUSPEND_PHASE0</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x10000 -> 0x1000F || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE0</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x40000 || <code>SCE_KERNEL_SYSEVENT_RESUME_MELT_TIME</code>. before sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 1 || 0x100000 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_START</code>. after sceKernelCpuResumeIntr.<br />
|-<br />
| [[ScePower]] || 1 || 0x100001 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_MAIN</code>.<br />
|-<br />
| [[ScePower]] || 1 || 0x100002 || <code>SCE_KERNEL_SYSEVENT_RESUME_PHASE1_END</code>. (this is a guessed name)<br />
|-<br />
| [[ScePower]] || 1 || 0x400000 || <code>SCE_KERNEL_SYSEVENT_RESUME_COMPLETED<br />
|}<br />
<br />
Handler<br />
<br />
{| class="wikitable sortable mw-collapsible mw-collapsed"<br />
|-<br />
! Module !! Type !! Event !! Description<br />
|-<br />
| [[SceAppMgr]] || 0 || 0x20F || _sceAppMgrSystemSuspend<br />
|-<br />
| [[SceAppMgr]] || 1 || 0x400000 || _sceAppMgrSystemResume<br />
|-<br />
| [[SceAudio]] || 0 || 0x1000 || Something<br />
|-<br />
| [[SceAudio]] || 0 || 0x400F || Something<br />
|-<br />
| [[SceAudio]] || 0 || 0x102 || Something<br />
|-<br />
| [[SceAudio]] || 1 || 0x1000F || Something<br />
|-<br />
| [[SceAudioin]] (SceAudioIn) || 0 || 0x102 || Something<br />
|-<br />
| [[SceAudioin]] (SceAudioIn) || 1 || 0x1000F || Something<br />
|-<br />
| [[SceAVConfig]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceAVConfig]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceAVConfig]] || 1 || 0x1000F || Something<br />
|-<br />
| [[SceAVConfig]] || 1 || 0x100001 || Something<br />
|-<br />
| [[SceBt]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceBt]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceBt]] || 1 || 0x100001 || Something<br />
|-<br />
| [[SceBt]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceCamera]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceCamera]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceCamera]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceCamera]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCamera]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceClockgen]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceClockgen]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCodec]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceCodec]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 0 || 0x400E || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 1 || 0x1000E || Something<br />
|-<br />
| [[SceCodecEngineWrapper]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCompat]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceCtrl]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceCtrl]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceCtrl]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceCtrl]] || 1 || 0x1000C || Something<br />
|-<br />
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x102 || Something<br />
|-<br />
| [[SceDbgSdio]] (SceDbgSdio1) || 0 || 0x4003 || Something<br />
|-<br />
| [[SceDbgSdio]] (SceDbgSdio1) || 1 || 0x10003 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 0 || 0x102 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 0 || 0x4000 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceDeci4pDbgp]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x100 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceDeci4pDfMgr]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceDeci4pDrfp]] || 0 || any || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 0 || 0x1000 || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 1 || 0x40000 || Something<br />
|-<br />
| [[SceDeci4pDtracep]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceDeci4pSDfCtl]] || 0 || 0x102 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceDisplay]] || 0 || 0x400A || Something<br />
|-<br />
| [[SceDisplay]] || 1 || 0x40000 || Something<br />
|-<br />
| [[SceDisplay]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceDisplay]] || 1 || 0x1000A || Something<br />
|-<br />
| [[SceError]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceError]] || 1 || 0x100001 || Something<br />
|-<br />
| [[SceGps]] (SceGpsd) || 0 || 0x102 || Something<br />
|-<br />
| [[SceGps]] (SceGpsd) || 1 || 0x400000 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 0 || 0x402 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 0 || 0x4005 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 0 || 0x400 || Something<br />
|-<br />
| [[SceGpuEs4]] (SceGpu) || 1 || 0x10005 || Something<br />
|-<br />
| [[SceHdmi]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceHdmi]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceHdmi]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceHid]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceHid]] || 0 || 0x4000 || Something<br />
|-<br />
| [[SceHid]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceHid]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceHpremote]] (SceHprm) || 1 || 0x1000C || Something<br />
|-<br />
| [[SceIdStorage]] || ? || ? || Something<br />
|-<br />
| [[SceIofilemgr]] || 0 || 0x401 || vfs_sync_all_mount_point<br />
|-<br />
| [[SceIofilemgr]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceIofilemgr]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceIofilemgr]] || 1 || 0x10000 || Something<br />
|-<br />
| [[SceIofilemgr]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceLowio]] (ScePervasive) || 1 || 0x10000 || Something<br />
|-<br />
| [[SceLowio]] (SceGpio) || 1 || 0x10002 || Something<br />
|-<br />
| [[SceLowio]] (ScePwm) || 0 || 0x4002 || Something<br />
|-<br />
| [[SceLowio]] (ScePwm) || 1 || 0x10002 || Something<br />
|-<br />
| [[SceLowio]] (SceI2c) || 0 || 0x402 || Something<br />
|-<br />
| [[SceLowio]] (SceI2c) || 0 || 0x4002 || Something<br />
|-<br />
| [[SceLowio]] (SceI2c) || 1 || 0x10002 || Something<br />
|-<br />
| [[SceLowio]] (SceDsi) || 0 || 0x4004 || Something<br />
|-<br />
| [[SceLowio]] (SceIftu) || 0 || 0x4005 || Something<br />
|-<br />
| [[SceLowio]] (SceIftu) || 1 || 0x10005 || Something<br />
|-<br />
| [[SceLowio]] (SceCsi) || 0 || 0x4004 || Something<br />
|-<br />
| [[SceLowio]] (SceCsi) || 1 || 0x10004 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 0 || 0x401 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 0 || 0x402 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 0 || 0x400 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 1 || 0x100000 || Something<br />
|-<br />
| [[SceMotionDev]] (SceMotion) || 1 || 0x100002 || Something<br />
|-<br />
| [[SceMsif]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceMsif]] || 1 || 0x1000C || Something<br />
|-<br />
| [[SceNetPs]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceNetPs]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceOled]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceOled]] || 0 || 0x4003 || Something<br />
|-<br />
| [[SceOled]] || 1 || 0x10003 || Something<br />
|-<br />
| [[ScePfsMgr]] || 0 || 0x402 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 0 || 0x402 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 0 || 0x4009 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 0 || 0x400 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 1 || 0x10009 || Something<br />
|-<br />
| [[ScePower]] (ScePower) || 1 || 0x100000 || Something<br />
|-<br />
| [[ScePower]] (SceLed) || 0 || 0x102 || Something<br />
|-<br />
| [[ScePower]] (SceLed) || 0 || 0x400A || Something<br />
|-<br />
| [[ScePower]] (SceLed) || 1 || 0x100000 || Something<br />
|-<br />
| [[SceRtc]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceRtc]] || 0 || 0x1000 || Something<br />
|-<br />
| [[SceRtc]] || 1 || 0x1000A || Something<br />
|-<br />
| [[SceRtc]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceSblSmSchedProxy]] || 1 || 0x10004 || Something<br />
|-<br />
| [[SceSblSsMgr]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceSblSsMgr]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceSblUpdateMgr]] || 0 || any || Something<br />
|-<br />
| [[SceSdif]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceSdif]] || 1 || 0x10009 || resume eMMC with sdif reset<br />
|-<br />
| [[SceSdif]] || 1 || 0x1000C || resume eMMC<br />
|-<br />
| [[SceSdstor]] || 0 || 0x200 || Umount 0x900/0xA00/0x100. invalidate gc sdpart str.<br />
|-<br />
| [[SceSdstor]] || 0 || 0x400D || disable intr/power off for gc/rm<br />
|-<br />
| [[SceSdstor]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceSdstor]] || 1 || 0x400000 || Something<br />
|-<br />
| [[SceSyscon]] || 0 || 0x4006 || Something<br />
|-<br />
| [[SceSyscon]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceSyscon]] || 0 || 0x400F || Something<br />
|-<br />
| [[SceSyscon]] || 1 || 0x10006 || Something<br />
|-<br />
| [[SceSyscon]] || 1 || 0x1000F || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceTouch]] || 0 || 0x400C || Something<br />
|-<br />
| [[SceTouch]] || 1 || 0x1000C || Something<br />
|-<br />
| [[SceTouch]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceUsbEtherRtl]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceUsbEtherRtl]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceUsbEtherRtl]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceUsbEtherSmsc]] || 0 || 0x401 || Something<br />
|-<br />
| [[SceUsbEtherSmsc]] || 0 || 0x402 || Something<br />
|-<br />
| [[SceUsbEtherSmsc]] || 0 || 0x400 || Something<br />
|-<br />
| [[SceUsbServ]] || 0 || 0x200 || Something<br />
|-<br />
| [[SceUsbServ]] || 0 || 0x400E || Something<br />
|-<br />
| [[SceUsbServ]] || 1 || 0x100000 || Something<br />
|-<br />
| [[SceUsbServ]] || 1 || 0x100002 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x401 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 0 || 0x400 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100000 || Something<br />
|-<br />
| [[SceWlanBt]] (SceWlanBtRobin) || 1 || 0x100002 || Something<br />
|}<br />
<br />
== SceSysmemForKernel ==<br />
<br />
=== SceSysmemForKernel_A7D44B50 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || 0xA7D44B50<br />
|-<br />
| 1.800.071-3.740.011 || not present<br />
|}<br />
<br />
A guessed name is sceKernelSetSysmemFuncForKernel.<br />
<br />
Used by [[SceKernelSSProxy]]'s module_start to register a function that just calls [[SMC]] 0x10E (BusErrorClear).<br />
<br />
The registered function is used internally by [[#sceKernelPhysicalMemReadForKernel]] and [[#sceKernelPhysicalMemWriteForKernel]].<br />
<br />
<source lang="C">int SceSysmemForKernel_A7D44B50(void* pBusErrorClearFunc);</source><br />
<br />
=== sceKernelSysmemModuleStartAfterProcessmgrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.610.011 || 0xE7938BFB<br />
|-<br />
| 3.630.011-3.740.011 || 0x4E74DA48<br />
|}<br />
<br />
Temp name was sceKernelInitProcessMemoryForKernel.<br />
<br />
Used by [[SceProcessmgr]].<br />
<br />
<source lang="C">int sceKernelSysmemModuleStartAfterProcessmgrForKernel(void);</source><br />
<br />
=== sceKernelSysmemCleanerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x43E81C4B<br />
|-<br />
| 3.63 || 0x50980298<br />
|}<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSysmemCleanerForKernel(void);</source><br />
<br />
=== sceKernelStrnlenFromUserForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x9BC3DEAC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">SceSize sceKernelStrnlenFromUserForKernel(const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelPhysicalMemWriteForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0x4B86A751<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
Writes to physical address <code>pdest</code> using a pre-allocated memblock. Destination must belong into a hardcoded table describing physical ranges.<br />
<br />
<source lang="C">SceSSize sceKernelPhysicalMemWriteForKernel(SceUIntPAddr pdest, const void *src, SceSize size);</source><br />
<br />
=== sceKernelPhysicalMemReadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0xF96E3AE2<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
Temp name was memcpy_from_paddr.<br />
<br />
Dest must be a virtual address and src must be a physical address. Returns copied size on success.<br />
<br />
<source lang="C">int sceKernelPhysicalMemReadForKernel(void *dest, const void *src, SceSize dest_size, SceSize src_size);</source><br />
<br />
=== sceKernelCopyFromUser32DomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xD530399A<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelCopyFromUser32DomainForKernel(SceUID pid, void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcTextDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x30931572<br />
|-<br />
| 3.65 || 0x2995558D<br />
|}<br />
<br />
Temp name was sceKernelRxMemcpyKernelToUserForPidForKernel, sceKernelProcCopyToUserRxForKernel.<br />
<br />
Same as [[SceSysmem#sceKernelCopyToUserProcDomainForDriver|sceKernelCopyToUserProcDomain]], but performs a DCache clean after the copy. Use this function if you want to write code in user pages.<br />
<br />
This function is usually called when resolving stubs during a module loads. In 3.60, DACR is set to 0x15450FC3 instead of 0xFFFFFFFF.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserProcTextDomainForKernel(SceUID pid, void *uaddr, const void *kaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcTextDomainForDBGPForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xE65EA709<br />
|-<br />
| 3.63 || 0x4345C61F<br />
|}<br />
<br />
<source lang="C">int sceKernelCopyToUserProcTextDomainForDBGPForKernel(SceUID pid, void *dst, const void *src, SceSize length);</source><br />
<br />
=== sceKernelCopyToUserTextDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x67BAD5B4<br />
|-<br />
| 3.65 || 0x5EF1DAAF<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemcpyToUserRxForKernel, sceKernelCopyToUserRxForKernel.<br />
<br />
Similar to [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]], but performed in the current address space.<br />
<br />
In FW 3.60, [[SceSysmem#sceKernelCopyToUserProcTextDomainForKernel|sceKernelCopyToUserProcTextDomain]] calls this function to perform the copy after changing address space.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserTextDomainForKernel(void *dst, const void *src, SceSize len);</source><br />
<br />
=== sceKernelCopyToUserDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || Not present<br />
|-<br />
| 3.60-3.61 || 0xA6F95838<br />
|-<br />
| 3.63 || 0x499A9FFF<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemcpyToUserRoForKernel, sceKernelCopyToUserRoForKernel.<br />
<br />
Similar to [[SceSysmem#sceKernelCopyToUserTextDomainForKernel|sceKernelCopyToUserTextDomain]], but doesn't perform any DCache clean.<br />
<br />
Uses the same DACR, 0x15450FC3, for the copy.<br />
<br />
<source lang="c">int sceKernelCopyToUserDomainForKernel(void *dst, const void *src, SceSize len);</source><br />
<br />
=== sceKernelRegisterClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x11761B77<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelFindClassByNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x62989905<br />
|-<br />
| 3.65 || 0x7D87F706<br />
|}<br />
<br />
<source lang="c">int sceKernelFindClassByNameForKernel(const char *name, SceClass **ppClass);</source><br />
<br />
=== sceKernelGetUIDHeapClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x4CCA935D<br />
|-<br />
| 3.63 || 0x7C878E94<br />
|}<br />
<br />
<source lang="c">SceClass *sceKernelGetUIDHeapClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDMemBlockClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xAF729575<br />
|-<br />
| 3.63 || 0x86681B64<br />
|}<br />
<br />
<source lang="c">SceClass *sceKernelGetUIDMemBlockClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDDLinkClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.610.011 || 0xC105604E<br />
|-<br />
| 3.630.011-3.740.011 || 0xE4193EB6<br />
|}<br />
<br />
<source lang="c">SceClass *sceKernelGetUIDDLinkClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDAddressSpaceClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xAF180A3F<br />
|-<br />
| 3.63 || 0x99D3BF76<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceClass *sceKernelGetUIDAddressSpaceClassForKernel(void);</source><br />
<br />
=== sceKernelGetUIDPartitionClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x2791F109<br />
|-<br />
| 3.63 || 0x5C0FC6BE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceClass *sceKernelGetUIDPartitionClassForKernel(void);</source><br />
<br />
=== sceUIDDLinkClassInitForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x21285F40<br />
|-<br />
| 3.63 || 0x7CDB7655<br />
|}<br />
<br />
Temp name was sceKernelCreateClassForKernel, sceUIDClassInitClassForKernel.<br />
<br />
Calls [[SceSysmem#sceUIDClassInitClassForDriver|sceUIDClassInitClassForDriver]].<br />
<br />
<source lang="C">int sceUIDDLinkClassInitForKernel(SceClass *pClass, const char *name, SceClass *subclass, SceSize itemsize, void *cstr, void *dstr);</source><br />
<br />
=== sceUIDClassGetClassInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0xC0BF149E<br />
|-<br />
| 3.63 || 0x100B4029<br />
|}<br />
<br />
This is a guessed name (ForDriver function name and NID changed at some point before 1.69). Temp name was sceKernelGetRegisterClassInfoForKernel.<br />
<br />
<source lang="C"><br />
typedef struct SceClassInfo {<br />
SceSize size;<br />
SceClass *pClass;<br />
SceClass *pSubClass;<br />
const char *name;<br />
} SceClassInfo;<br />
<br />
int sceUIDClassGetClassInfoAllForKernel(SceClassInfo *vector, uint32_t maxNumClass, uint32_t *pNumClassInBuf);<br />
</source><br />
<br />
=== sceKernelCreateAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4A3737F0<br />
|-<br />
| 3.65 || 0x8EE89D2C<br />
|}<br />
<br />
<source lang="C"><br />
// type: 0x10000001 (user AS)<br />
// name: maybe titleid<br />
SceUID sceKernelCreateAddressSpaceForKernel(SceUID pid, const char *name, SceUInt32 type, SceKernelCreateAddressSpaceOpt *pOpt);<br />
</source><br />
<br />
=== sceKernelDeleteAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF2D7FE3A<br />
|-<br />
| 3.65 || 0x4A2E421D<br />
|}<br />
<br />
<source lang="C">int sceKernelDeleteAddressSpaceForKernel(SceUID guid);</source><br />
<br />
=== sceKernelAddressSpaceSetNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || not present<br />
|-<br />
| 3.60 || 0x7BD56D6D<br />
|-<br />
| 3.65 || 0xCEBC4963<br />
|}<br />
<br />
Used by [[SceProcessmgr]].<br />
<br />
<source lang="C">int sceKernelAddressSpaceSetNameForKernel(SceUID guid, const char *name);</source><br />
<br />
=== sceKernelAddressSpaceSetPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x67955EE9<br />
|-<br />
| 3.65 || 0x7DF07D60<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceSetPhyMemPartForKernel(SceUID guid, SceUInt32 index, SceKernelPhyMemPart *pPhyMemPart);</source><br />
<br />
=== sceKernelAddressSpaceCtrSetObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFC74A355<br />
|-<br />
| 3.63 || 0xFA348CB1<br />
|}<br />
<br />
=== sceKernelAddressSpaceFreeAllMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x89CE1F31<br />
|-<br />
| 3.65 || 0x36159CF5<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceFreeAllMemBlockForKernel(SceUID guid);</source><br />
<br />
=== sceKernelAddressSpaceUnmapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0xCE72839E<br />
|-<br />
| 3.63 || 0x73C38695<br />
|}<br />
<br />
<source lang="C"><br />
# For FW 0.931:<br />
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int a2, void* addr, SceSize size);<br />
# For FW 3.60:<br />
int sceKernelAddressSpaceUnmapForKernel(SceUID uid, int a2, int a3, void* addr, SceSize size);<br />
</source><br />
<br />
Example: 0.990 [[SceSysStateMgr]]:<br />
<source lang="C"><br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0x51000000, 0x1000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xE0000000, 0x8000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0x1A000000, 0x100000);<br />
</source><br />
<br />
Example: 3.60 [[SceSysStateMgr]]:<br />
<source lang="C"><br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF7, 0xC, 0x51000000, 0x1000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0xE0000000, 0x8000000);<br />
sceKernelAddressSpaceUnmapForKernel(0x10007, 0xF0, 0xC, 0x1A000000, 0x100000);<br />
</source><br />
<br />
=== sceKernelAddressSpaceSetProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x2476B90F<br />
|-<br />
| 3.63 || 0x5E772E19<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceSetProcessForKernel(SceUID address_space, SceUID pid);</source><br />
<br />
=== sceKernelAddressSpaceChangeMMUContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x653B0849<br />
|-<br />
| 3.63 || 0x20D01AFA<br />
|}<br />
<br />
Changes to the MMU context (CONTEXTIDR.ASID + DACR + TTBR1) of target address space.<br />
<br />
<source lang="C">SceInt32 sceKernelAddressSpaceChangeMMUContextForKernel(SceUID address_space);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.10-3.61 || 0x9894B9E1<br />
|-<br />
| 3.63 || 0xA7C91D62<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelGetAddressSpaceMMUContextForKernel(SceUID address_space, SceKernelMMUContext **ppCtx);</source><br />
<br />
=== SceSysmemForKernel_FBEF93AA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.01 || 0xFBEF93AA<br />
|-<br />
| 3.10-3.74 || not present<br />
|}<br />
<br />
Maybe gets MMU context. Maybe was replaced by [[#sceKernelAddressSpaceGetMMUContextForKernel]].<br />
<br />
<source lang="C">int SceSysmemForKernel_FBEF93AA(SceUID address_space, void* pOut);</source><br />
<br />
=== sceKernelAddressSpaceGetTimerVbaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 0.996.090-3.610.011 || 0x7D92B2D3<br />
|-<br />
| 3.630.011-3.740.011 || 0xFA1A73DD<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetTimerVbaseForKernel(SceUID address_space, void **ppBase);</source><br />
<br />
=== sceKernelGetAddressSpaceInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x4492421F<br />
|-<br />
| 3.630.011-3.740.011 || 0xC3EF4055<br />
|}<br />
<br />
This is a guessed name..<br />
<br />
<source lang="C">int sceKernelGetAddressSpaceInfoForKernel(SceUID address_space, SceKernelAddressSpaceInfo *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL1InfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x671A3444<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Gets information about a L1PT entry in the translation table of an address space. Pass the virtual address of the target entry maps as <code>addr</code>.<br />
<br />
<source lang="C">SceInt32 sceKernelAddressSpaceGetMMUL1InfoForKernel(SceUID address_space, const void *addr, SceKernelMMUL1Info *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL2InfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xCB6E1C80<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetMMUL2InfoForKernel(SceUID address_space, const void *addr, void *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL1AllInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x1A898F2E<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelAddressSpaceMMUL1AllInfo { // size is 0x400C on FW 0.931<br />
SceSize size; // Size of this structure<br />
char unk[0x4008];<br />
} SceKernelAddressSpaceMMUL1AllInfo;<br />
<br />
int sceKernelAddressSpaceGetMMUL1AllInfoForKernel(SceUID address_space, SceKernelAddressSpaceMMUL1AllInfo *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMMUL2AllInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x1E1AA29B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelAddressSpaceMMUL2AllInfo { // size is 0x404 on FW 0.931<br />
SceSize size; // Size of this structure<br />
char unk[0x400];<br />
} SceKernelAddressSpaceMMUL2AllInfo;<br />
<br />
int sceKernelAddressSpaceGetMMUL2AllInfoForKernel(SceUID address_space, const void *addr, SceKernelAddressSpaceMMUL2AllInfo *pInfo);</source><br />
<br />
=== sceKernelAddressSpaceGetMemoryTypeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xCC7BB240<br />
|-<br />
| 3.63 || 0x0B5A3E93<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetMemoryTypeForKernel(uint32_t *memory_type);</source><br />
<br />
=== sceKernelAddressSpaceVAtoPAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF2179820<br />
|-<br />
| 3.63 || 0x1BAF8C0B<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceVAtoPAForKernel(SceAddressSpace *pAS, SceUInt32 mode, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelAddressSpaceVARangeToPAVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF7250E6C<br />
|-<br />
| 3.63 || 0xA541E0CF<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceVARangeToPAVectorForKernel(SceUID address_space, const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelAddressSpaceGetPhyMemPartByIndexForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x3F74E45C<br />
|-<br />
| 3.63 || 0x47C55DCC<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetPhyMemPartByIndexForKernel(SceUInt32 index, void **result);</source><br />
<br />
=== sceKernelAddressSpaceGetPartitionByIndexForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x210DB518<br />
|-<br />
| 3.63 || 0x1F84FE44<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUIDPartitionObject *sceKernelAddressSpaceGetPartitionByIndexForKernel(void *pAS, int pindex);</source><br />
<br />
=== sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x46A5CB84<br />
|-<br />
| 3.63 || 0xC3F9607E<br />
|}<br />
<br />
<source lang="C">int sceKernelAddressSpaceGetMemBlockInfoByAddrForKernel(SceUID asid, int a2, int a3, int a4);</source><br />
<br />
=== sceKernelCheckAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x8B07BB52<br />
|-<br />
| 3.63 || 0x16A54BFE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelCheckAddressSpaceForKernel(void);</source><br />
<br />
=== sceKernelGetKernelAddressSpaceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.610.011 || 0xC38B4D52<br />
|-<br />
| 3.630.011-3.740.011 || 0x2E5CC243<br />
|}<br />
<br />
<source lang="C">void* sceKernelGetKernelAddressSpaceForKernel(void);</source><br />
<br />
=== sceKernelCreatePhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x2E36E0C4<br />
|-<br />
| 3.63 || 0xA2DFA383<br />
|}<br />
<br />
Calls [[#sceKernelCreatePhyMemPartByPbaseForKernel]] with pbase = 0.<br />
<br />
<source lang="C">int sceKernelCreatePhyMemPartForKernel(const char *name, int type, SceSize psize, SceKernelPhyMemPart **pPhyMemPart);</source><br />
<br />
=== sceKernelCreatePhyMemPartByPbaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x63D83911<br />
|-<br />
| 3.63 || 0x5CC56F87<br />
|}<br />
<br />
<source lang="C"><br />
/*<br />
type<br />
<br />
ORed values:<br />
0x00002 : Shell<br />
0x00004 : Game<br />
0x00005 : PhyCont<br />
0x00060 : CDialog<br />
0x10000 : Lpddr2Main<br />
0x30000 : Cdram<br />
<br />
seen values:<br />
0x10002 : ShellLpddr2Main (shared)<br />
0x10004 : GameLpddr2Main<br />
0x10005 : PhyContLpddr2Main<br />
0x10064 : GameCDialogLpddr2Main<br />
<br />
0x30002 : ShellCdram<br />
0x30004 : GameCdram<br />
*/<br />
<br />
int sceKernelCreatePhyMemPartByPbaseForKernel(const char *name, int type, void *pbase, SceSize psize, SceKernelPhyMemPart **ppPhyMemPart);<br />
</source><br />
<br />
=== sceKernelDeletePhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x2AEA9E09<br />
|-<br />
| 3.63 || 0x3F72B2E7<br />
|}<br />
<br />
<source lang="C">int sceKernelDeletePhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source><br />
<br />
=== sceKernelGetPhyMemPartAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x2F6F9C2C<br />
|-<br />
| 3.63 || 0x021053DD<br />
|}<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartAllForKernel(SceUInt32 vis_level, SceUID *pVector, SceSize vectorSize, SceUInt32 *ret_num);</source><br />
<br />
=== sceKernelGetPhyMemPartInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x67849418<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartInfoForKernel(SceKernelPhyMemPart *pPhyMemPart, SceKernelPhyMemPartInfo *pInfo);</source><br />
<br />
=== sceKernelGetPhyMemPartInfoByIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0xF4FA0575<br />
|-<br />
| 3.63 || 0x029F5989<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelPhyMemPartInfo { // size is 0x44 on FW 0.931-0.990<br />
SceSize size; // Size of this structure<br />
uint32_t unk_4; // some size or address<br />
uint32_t unk_8; // some size or address<br />
char unk1[0xC];<br />
char *name; // name, maybe pointer or array<br />
char unk2[0x24];<br />
} SceKernelPhyMemPartInfo;<br />
<br />
int sceKernelGetPhyMemPartInfoByIDForKernel(SceUID guid, SceKernelPhyMemPartInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetPhyMemPartInfoCoreForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.61 || 0x3650963F<br />
|-<br />
| 3.63-3.65 || 0xB9B69700<br />
|}<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartInfoCoreForKernel(SceKernelPhyMemPart *pPhyMemPart, ScePhyMemPartInfoCore *pInfo);</source><br />
<br />
=== sceKernelGetPhyMemPartInfoForDebuggerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || not present<br />
|-<br />
| 3.60-3.61 || 0x54E85275<br />
|-<br />
| 3.63 || 0x73E03A38<br />
|}<br />
<br />
info size is 0xB0-bytes.<br />
<br />
<source lang="C">int sceKernelGetPhyMemPartInfoForDebuggerForKernel(SceKernelPhyMemPart *pPhyMemPart, void *pInfo);</source><br />
<br />
=== sceKernelGrowPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x6B3F4102<br />
|-<br />
| 3.63 || 0x5B434019<br />
|}<br />
<br />
Calls sceKernelGrowPhyMemPartWithFlagsForKernel with flags = 0.<br />
<br />
<source lang="C">int sceKernelGrowPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart, SceSize psize);</source><br />
<br />
=== sceKernelGrowPhyMemPartByPbaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x775AA5E3<br />
|-<br />
| 3.63 || 0x36FDA794<br />
|}<br />
<br />
Temp name was sceKernelGrowPhyMemPartWithFlagsForKernel.<br />
<br />
Grows physical memory partition with pbase.<br />
<br />
<source lang="C">int sceKernelGrowPhyMemPartByPbaseForKernel(SceKernelPhyMemPart *pPMP, SceUIntPtr pbase, SceSize psize);</source><br />
<br />
=== sceKernelGetGrownPhyMemPartSizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x4D809B47<br />
|-<br />
| 3.63 || 0xBC36755F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns a global variable. This global variable is either a size or offset or address and is incremented by sceKernelGrowPhyMemPartWithFlagsForKernel.<br />
<br />
<source lang="C">int sceKernelGetGrownPhyMemPartSizeForKernel(void);</source><br />
<br />
=== SceSysmemForKernel_153A08A0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x153A08A0<br />
|-<br />
| 3.63 || 0x6D563733<br />
|}<br />
<br />
Adds 1 to <code>pPhyMemPart->nClient</code> using [[SceSysmem#sceKernelCpuAtomicAddAndGet32ForDriver]], and returns its new value.<br />
<br />
<source lang="C">SceUInt32 SceSysmemForKernel_153A08A0(SceKernelPhyMemPart* pPhyMemPart);</source><br />
<br />
=== sceKernelAllocPhyPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xD449547B<br />
|-<br />
| 3.63-3.74 || 0xB488C82E<br />
|}<br />
<br />
Temp name was sceKernelPhyMemPartAllocPhyPageForKernel.<br />
<br />
<source lang="C">int sceKernelAllocPhyPageForKernel(void *pPhyMemPart, SceSize size, void **ppPhyPage);</source><br />
<br />
=== sceKernelResetPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEEB85560<br />
|-<br />
| 3.65 || 0x9B7E673F<br />
|}<br />
<br />
Used by [[SceProcessmgr#sceKernelResetGameBudgetForKernel]].<br />
<br />
Called with same argument as [[#sceKernelSetPhyPartGameForKernel]].<br />
<br />
<source lang="C">int sceKernelResetPhyMemPartForKernel(SceKernelPhyMemPart *pPhyMemPart);</source><br />
<br />
=== sceKernelShowPhyMemPartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x5C257482<br />
|-<br />
| 3.63-3.65 || 0x8F0B5536<br />
|}<br />
<br />
Prints information about a Physical Memory Partition.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">SceInt32 sceKernelShowPhyMemPartForKernel(SceKernelPhyMemPart *pPMP);</source><br />
<br />
=== sceKernelFreePhyPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x00BC5B4A<br />
|-<br />
| 3.63 || 0x193A9D2F<br />
|}<br />
<br />
<source lang="C">int sceKernelFreePhyPageForKernel(void *pPhyMemPart, void *pPage);</source><br />
<br />
=== sceKernelSetPhyMemPartHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x17F1AA22<br />
|-<br />
| 3.63 || 0x31FA81B5<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetPhyMemPartHookForKernel(void *pHook);</source><br />
<br />
=== sceKernelSetPhyMemPartLogCallbackForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x72E7BFAC<br />
|-<br />
| 3.63 || 0x93D0A183<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetPhyMemPartLogCallbackForKernel(void *pCallbacks);</source><br />
<br />
=== sceKernelAllocKernelHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x432EADA6<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelAllocKernelHeapForKernel(SceSize size);</source><br />
<br />
=== sceKernelGetHeapInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x91733EF4<br />
|-<br />
| 3.63 || 0x17DB1A0A<br />
|}<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);<br />
<br />
// 3.60:<br />
int sceKernelGetHeapInfoForKernel(SceUID heapid, SceUInt32 level, SceKernelHeapInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetHeapInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x48D87E17<br />
|-<br />
| 3.63 || 0x1380E144<br />
|}<br />
<br />
This is a guessed namee.<br />
<br />
<source lang="C">int sceKernelGetHeapInfoAllForKernel(SceUInt32 vis_level, void *pInfo, SceSize infoSize, SceUInt32 *pnInfo);</source><br />
<br />
=== sceKernelGetHeapInfoAllChunkForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xAC4C0EB1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelGetHeapInfoAllChunkForKernel(SceUID heapid, SceKernelHeapInfo *pInfo);</source><br />
<br />
=== sceKernelGetHeapInfoByPtrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x68451777<br />
|-<br />
| 3.63 || 0x80A75187<br />
|}<br />
<br />
Temp name was sceKernelGetHeapInfoByPointerForKernel.<br />
<br />
<source lang="C">int sceKernelGetHeapInfoByPtrForKernel(void *pObject, SceKernelHeapInfo *pInfo);</source><br />
<br />
=== sceKernelReallocHeapMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFDC0EA11<br />
|-<br />
| 3.63 || 0x8EE8B917<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void *sceKernelReallocHeapMemoryForKernel(SceUID heapid, void *ptr, SceSize size);</source><br />
<br />
=== sceKernelHeapEnableModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xF1433852<br />
|-<br />
| 3.63 || 0x0B36F7F9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelHeapEnableModeForKernel(SceUID heapid, SceUInt32 mode);</source><br />
<br />
=== sceKernelHeapDiableModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x71869119<br />
|-<br />
| 3.63 || 0x6E82D5A0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelHeapDiableModeForKernel(SceUID heapid, SceUInt32 mode);</source><br />
<br />
=== sceKernelHeapMemoryGetAllocateSizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x60735311<br />
|-<br />
| 3.63 || 0xD124075A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceSize sceKernelHeapMemoryGetAllocateSizeForKernel(void *ptr);</source><br />
<br />
=== sceKernelPrintHeapSegmentListForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x2EE50533<br />
|-<br />
| 3.63 || 0x82059651<br />
|}<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelPrintHeapSegmentListForKernel(SceUID heap_guid);</source><br />
<br />
=== sceKernelGetKernelFixedHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x68CB9266<br />
|-<br />
| 3.630.000-3.740.011 || 0x3717C322<br />
|}<br />
<br />
Temp name was sceKernelGetFixedHeapBySizeForKernel.<br />
<br />
<source lang="C">SceUIDFixedHeapObject *sceKernelGetKernelFixedHeapForKernel(SceSize size);</source><br />
<br />
=== sceKernelGetFixedHeapInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x4FA4A624<br />
|-<br />
| 3.630.000-3.740.011 || 0x890D9160<br />
|}<br />
<br />
<source lang="C">int sceKernelGetFixedHeapInfoForKernel(SceUID heapid, SceKernelFixedHeapInfo *pInfo);</source><br />
<br />
=== sceKernelGetFixedHeapInfoByPointerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x219E90FD<br />
|-<br />
| 3.630.000-3.740.011 || 0xA24D2C8D<br />
|}<br />
<br />
<source lang="C">int sceKernelGetFixedHeapInfoByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, SceKernelFixedHeapInfo *pInfo);</source><br />
<br />
=== sceKernelFixedHeapSetHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.610.011 || 0x8C8E2DD1<br />
|-<br />
| 3.630.000-3.740.011 || 0xD4511A52<br />
|}<br />
<br />
<source lang="C">int sceKernelFixedHeapSetHookForKernel(SceUID heapid, void *hookdata);</source><br />
<br />
=== sceKernelFixedHeapAllocObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0xC8672A3D<br />
|-<br />
| 3.630.000-3.740.011 || 0xABA5313C<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void *sceKernelFixedHeapAllocObjectForKernel(SceUIDFixedHeapObject *pFixedHeap);</source><br />
<br />
=== sceKernelFixedHeapFreeObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x571660AA<br />
|-<br />
| 3.630.000-3.740.011 || 0x93344755<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelFixedHeapFreeObjectForKernel(SceUIDFixedHeapObject *pFixedHeap, void *pObject);</source><br />
<br />
=== sceKernelFixedHeapSetHookByPointerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.610.011 || 0x3EC2345B<br />
|-<br />
| 3.630.000-3.740.011 || 0x811C452B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelFixedHeapSetHookByPointerForKernel(SceUIDFixedHeapObject *pFixedHeap, void *a2);</source><br />
<br />
=== sceKernelNameHeapInsertForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x08AB3DAE<br />
|-<br />
| 3.63 || 0xB628B46B<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapInsertForKernel(const char *name, int flags, char **result);</source><br />
<br />
=== sceKernelNameHeapDeleteForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x9C7B62AB<br />
|-<br />
| 3.63 || 0x634D0D0C<br />
|}<br />
<br />
name max length is 31 characters.<br />
<br />
<source lang="C">int sceKernelNameHeapDeleteForKernel(const char *name, SceUInt32 flag);</source><br />
<br />
=== sceKernelNameHeapLinkForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xEC1293D2<br />
|-<br />
| 3.63 || 0x40965FD1<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapLinkForKernel(const char *name, int flags, void **result);</source><br />
<br />
=== sceKernelNameHeapFindForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB543A23C<br />
|-<br />
| 3.63 || 0x9F1A9AA6<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapFindForKernel(const char *name, int flags, void **result);</source><br />
<br />
=== sceKernelNameHeapGetKeyForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x942D15FC<br />
|-<br />
| 3.63 || 0xEB48682E<br />
|}<br />
<br />
This is a guessed name. Computes MurmurHash. Used to get UID by name.<br />
<br />
<source lang="C">SceUInt32 sceKernelNameHeapGetKeyForKernel(const char *key, SceSize len, SceUInt32 seed);</source><br />
<br />
=== sceKernelNameHeapGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.610.011 || 0xE443253B<br />
|-<br />
| 3.630.000-3.740.011 || 0x01194C2E<br />
|}<br />
<br />
<source lang="C">int sceKernelNameHeapGetInfoForKernel(void *pInfo);</source><br />
<br />
=== sceKernelCreateObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x36830F46<br />
|-<br />
| 3.63 || 0x9D8F3BE8<br />
|}<br />
<br />
<source lang="C">int sceKernelCreateObjectHeapForKernel(SceUID pid, SceBool a2, SceFixedHeapHook *pHeapHook, SceKernelObjectHeap **ppObjectHeap);</source><br />
<br />
=== sceKernelCreateObjectHeapWithHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7FD757FE<br />
|-<br />
| 3.63 || 0x660DC18A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelCreateObjectHeapWithHeapForKernel(SceKernelObjectHeap *pObjectHeap, SceUID pid, SceUID heapid);</source><br />
<br />
=== sceKernelDeleteObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x080BA2F3<br />
|-<br />
| 3.63 || 0x2F526AB8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelDeleteObjectHeapForKernel(SceKernelObjectHeap *pObjectHeap);</source><br />
<br />
=== sceKernelObjectHeapAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7FDF483A<br />
|-<br />
| 3.63 || 0xEBFC8E10<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void *sceKernelObjectHeapAllocForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size);</source><br />
<br />
=== sceKernelObjectHeapFreeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x131CEF52<br />
|-<br />
| 3.63 || 0x17D3D4BD<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelObjectHeapFreeForKernel(SceKernelObjectHeap *pObjectHeap, SceSize size, void *pObject);</source><br />
<br />
=== sceKernelObjectHeapSetResourceLimitForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x98E6905B<br />
|-<br />
| 3.63 || 0xDFA1EB57<br />
|}<br />
<br />
<source lang="C">int sceKernelObjectHeapSetResourceLimitForKernel(int a1, int a2, int a3, int a4, int a5);</source><br />
<br />
=== sceKernelObjectHeapSetResourceLimitAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x5409397F<br />
|-<br />
| 3.63 || 0x067F2550<br />
|}<br />
<br />
<source lang="C">int sceKernelObjectHeapSetResourceLimitAllForKernel(SceKernelObjectHeap *pObjectHeap, int a2, int a3);</source><br />
<br />
=== sceKernelObjectHeapSetSizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x6427560F<br />
|-<br />
| 3.63 || 0xB591E49F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelObjectHeapSetSizeForKernel(SceUInt32 index, SceUInt32 size);</source><br />
<br />
=== sceKernelGetObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x3B75CBED<br />
|-<br />
| 3.63 || 0x857408DA<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelObjectHeap *sceKernelGetObjectHeapForKernel(void);</source><br />
<br />
=== sceKernelGetSharedObjectHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xBF0294E4<br />
|-<br />
| 3.63 || 0x791D6205<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelObjectHeap *sceKernelGetSharedObjectHeapForKernel(void);</source><br />
<br />
=== SceSysmemForKernel_B8D769C6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB8D769C6<br />
|-<br />
| 3.63 || 0xDBEACE2C<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_B8D769C6(SceKernelObjectHeap *pObjectHeap, void *info);</source><br />
<br />
=== sceUIDCreateEntryHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x19CAEF35<br />
|-<br />
| 3.65 || 0x89BEF058<br />
|}<br />
<br />
<source lang="C">int sceUIDCreateEntryHeapForKernel(SceUID pid, SceUID heap_guid);</source><br />
<br />
=== sceUIDDeleteEntryHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF0C3FCFC<br />
|-<br />
| 3.65 || 0xF6D09BD9<br />
|}<br />
<br />
<source lang="C">int sceUIDDeleteEntryHeapForKernel(SceUID guid);</source><br />
<br />
=== sceUIDRegisterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x59162CD7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDRegisterForKernel]].<br />
<br />
<source lang="C">int sceUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source><br />
<br />
=== sceUIDObjectSetClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x226DE851<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceUIDObjectSetClassForKernel(SceKernelObject *pObject, SceClass *pClass);</source><br />
<br />
=== sceUIDGetUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0xA2F03233<br />
|-<br />
| 1.500.151-3.740.011 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDGetUIDVectorByClassForKernel]].<br />
<br />
=== sceUIDGetProcUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.060.031 || 0x51C08396<br />
|-<br />
| 1.500.151-3.740.011 || not present<br />
|}<br />
<br />
=== sceUIDReferObjectWithLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xF79B52B2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceUIDReferObjectWithLevelForKernel(SceUID uid, SceUInt32 level, SceKernelObject **ppEntry);</source><br />
<br />
=== sceUIDGetObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xC4893914<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDGetObjectForDriver]].<br />
<br />
<source lang="C">int sceUIDGetObjectForKernel(SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceUIDtoObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xED221825<br />
|-<br />
| 3.65 || 0xFA6C098C<br />
|}<br />
<br />
Calls [[SceSysmem#sceGUIDGetObjectForDriver]].<br />
<br />
<source lang="C">SceKernelObject *sceUIDtoObjectForKernel(SceUID uid);</source><br />
<br />
=== sceUIDClassIsSubclassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.691 || not present (in ForDriver)<br />
|-<br />
| 3.60-3.61 || 0x48750A5A<br />
|-<br />
| 3.63 || 0x7F7D5C4A<br />
|}<br />
<br />
This is a guessed name. Temp name was sceUIDClassIsWithinSubclassChainForKernel.<br />
<br />
<source lang="C">SceBool sceUIDClassIsSubclassForKernel(SceClass *pClass, SceClass *pTargetClass);</source><br />
<br />
=== sceUIDEntryHeapCloseAllPUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFAF96C1F<br />
|-<br />
| 3.65 || 0x133024A5<br />
|}<br />
<br />
<source lang="C">int sceUIDEntryHeapCloseAllPUIDForKernel(SceUID guid);</source><br />
<br />
=== sceKernelUIDEntryHeapGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x686AA15C<br />
|-<br />
| 3.63 || 0xCCD47B97<br />
|}<br />
<br />
Official name may also be sceUIDEntryHeapGetInfoForKernel (seen in 4.00).<br />
<br />
<source lang="C"><br />
typedef struct SceUIDEntryHeapInfo {<br />
SceSize size; //<! Size of this structure (0x18)<br />
SceSize objectSize;<br />
SceSize totalHeapSize;<br />
SceSize totalItemCount;<br />
SceSize unk10;<br />
SceSize unk14;<br />
} SceUIDEntryHeapInfo;<br />
<br />
SceInt32 sceKernelUIDEntryHeapGetInfoForKernel(SceUID entryHeapId, SceUIDEntryHeapInfo *pInfo);<br />
</source><br />
<br />
=== sceUIDEntryHeapSetHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCD985AEB<br />
|-<br />
| 3.63 || 0x666C878F<br />
|}<br />
<br />
?Implemented in internal system software.? Not implemented in external system software.<br />
<br />
<source lang="C">int sceUIDEntryHeapSetHookForKernel(SceUID guid, void *pHook);</source><br />
<br />
=== sceUIDEntryGetNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x114E6476<br />
|-<br />
| 3.63 || 0x5FD15C6E<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">char *sceUIDEntryGetNameForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xC2F7D8A4<br />
|-<br />
| 3.63 || 0x797C858B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUInt16 sceUIDEntryGetLevelForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x8FB73A29<br />
|-<br />
| 3.63 || 0x17F12DCE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUInt32 sceUIDEntryGetAttrForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetLinkCountForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x876A7F44<br />
|-<br />
| 3.63 || 0xF3DB2D71<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUInt8 sceUIDEntryGetLinkCountForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceUIDEntryGetUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x6BB6AF94<br />
|-<br />
| 3.63 || 0x03A2CAF0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUID sceUIDEntryGetUIDForKernel(SceUIDEntry *pEntry);</source><br />
<br />
=== sceGUIDRegisterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xAF42AAD5<br />
|-<br />
| 3.63 || 0x6DB44A42<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDRegisterForKernel(SceClass *pClass, const char *name, SceKernelObject *pObject);</source><br />
<br />
=== sceGUIDUnregisterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xE79BBCF2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceGUIDUnregisterForKernel(SceUID uid);</source><br />
<br />
=== sceGUIDOpenByGUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xCF53EEE4<br />
|-<br />
| 3.63 || 0x89D33DF0<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDOpenByGUIDForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.060.031 || 0x250EE289<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">char *sceGUIDNameForKernel(SceUID uid);</source><br />
<br />
=== sceGUIDtoClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x66636970<br />
|-<br />
| 3.63 || 0x368F1C36<br />
|}<br />
<br />
<source lang="C">SceClass *sceGUIDtoClassForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDGetObjectWithClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x7ABFA9A7<br />
|-<br />
| 3.63 || 0x0E43E113<br />
|}<br />
<br />
Possible name are sceUIDGetObjectWithClassForKernel or sceUIDtoProcessForKernel.<br />
<br />
<source lang="C">int sceGUIDGetObjectWithClassForKernel(SceUID uid, SceClass *pClass, SceKernelObject **obj);</source><br />
<br />
=== sceGUIDGetUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.600.011 || 0xEC7D36EF<br />
|-<br />
| 3.630.011-3.740.011 || 0x52137FA3<br />
|}<br />
<br />
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.<br />
<br />
<source lang="C"><br />
/*<br />
* nVector - maximum number of copied UIDs<br />
* ret_num - number of retrieved UIDs<br />
*/<br />
int sceGUIDGetUIDVectorByClassForKernel(SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);<br />
</source><br />
<br />
=== sceGUIDGetUIDVectorWeakByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || not present<br />
|-<br />
| 1.500.151-3.610.011 || 0x59F577E8<br />
|-<br />
| 3.630.011-3.740.011 || 0xE9957329<br />
|}<br />
<br />
Copy UIDs to <code>pVector</code> by referring to all objects created by <code>pClass</code>.<br />
<br />
<source lang="C"><br />
/*<br />
* nVector - maximum number of copied UIDs<br />
* ret_num - number of retrieved UIDs<br />
*/<br />
int sceGUIDGetUIDVectorWeakByClassForKernel(SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);<br />
</source><br />
<br />
=== sceGUIDGetEntryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x45F2A59C<br />
|-<br />
| 3.63 || 0xFF464A49<br />
|}<br />
<br />
<source lang="C">int sceGUIDGetEntryForKernel(SceUID guid, SceUIDEntry **ppEntry);</source><br />
<br />
=== sceGUIDGetEntryInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0x2A79C51C<br />
|-<br />
| 3.630.011-3.740.011 || 0x3BF0DE65<br />
|}<br />
<br />
<source lang="C">int sceGUIDGetEntryInfoAllForKernel(SceUInt32 vis_level, SceUID guid, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source><br />
<br />
=== sceGUIDGetEntryInfoClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0xE90CFD62<br />
|-<br />
| 3.630.011-3.740.011 || 0x71E934DB<br />
|}<br />
<br />
<source lang="C">int sceGUIDGetEntryInfoClassForKernel(SceUID guid, SceClass *pClass, SceUInt32 vis_level, void *pInfoVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== sceGUIDKernelCreateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xE6FAD50A<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Create a GUID with default attribute (0x30000).<br />
<br />
<source lang="C">int sceGUIDKernelCreateForKernel(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDKernelCreateWithAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x53E1FFDE<br />
|-<br />
| 3.63 || 0x6D26B066<br />
|}<br />
<br />
Create a GUID with the specified attribute.<br />
<br />
<source lang="C">int sceGUIDKernelCreateWithAttrForKernel(SceClass *pClass, const char *name, SceUInt32 attr, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDKernelCreateWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-0.995 || not present<br />
|-<br />
| 0.996-3.60 || 0xDF0288D7<br />
|-<br />
| 3.65 || 0xFB6390CE<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCreateUidObjForKernel, scePUIDKernelCreateWithAttrForKernel.<br />
<br />
<source lang="c"><br />
typedef struct SceGUIDKernelCreateOpt { // size is at least 0x20 on FW 3.60<br />
SceUInt32 attr;<br />
SceUInt32 field_4;<br />
SceUID uid;<br />
SceUID pid;<br />
SceUInt32 field_10;<br />
SceUInt32 classAttr;<br />
SceUInt32 uidAttr;<br />
SceUID pid2;<br />
} SceGUIDKernelCreateOpt;<br />
<br />
SceUID sceGUIDKernelCreateWithOptForKernel(SceClass *pClass, const char *name, SceGUIDKernelCreateOpt *pOpt, SceKernelObject **ppEntry);<br />
</source><br />
<br />
=== sceGUIDGetVisibilityLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xC69666C3<br />
|-<br />
| 3.63 || 0x4E923101<br />
|}<br />
<br />
<source lang="C">SceUInt32 sceGUIDGetVisibilityLevelForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDSetVisibilityLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCB8D03C0<br />
|-<br />
| 3.63 || 0xE8CC2166<br />
|}<br />
<br />
Sets visibilityLevel into guid's GUIDEntry.<br />
<br />
<source lang="C">int sceGUIDSetVisibilityLevelForKernel(SceUID guid, int visibilityLevel);</source><br />
<br />
=== sceGUIDFindByObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x95ABFDC3<br />
|-<br />
| 3.63 || 0xEC90AA11<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDFindByObjectForKernel(void *pObject);</source><br />
<br />
=== sceGUIDFindByNameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCEBA8031<br />
|-<br />
| 3.63 || 0xBDE00106<br />
|}<br />
<br />
<source lang="C">SceUID sceGUIDFindByNameForKernel(const char *name);</source><br />
<br />
=== sceGUIDFindByNameAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x4B5C85AC<br />
|-<br />
| 3.63 || 0xF49C0BE8<br />
|}<br />
<br />
<source lang="C"><br />
// return value: to reverse, should be either SceUID guid or void* pObj<br />
SceUID sceGUIDFindByNameAllForKernel(const char *name);<br />
</source><br />
<br />
=== sceGUIDGetPIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCF5A2311<br />
|-<br />
| 3.63 || 0xBD42A0FC<br />
|}<br />
<br />
Returns Process ID for guid.<br />
<br />
<source lang="C">SceUID sceGUIDGetPIDForKernel(SceUID guid);</source><br />
<br />
=== sceGUIDSetPIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x812E7A53<br />
|-<br />
| 3.63 || 0x46DF8C8A<br />
|}<br />
<br />
Sets Process ID for guid.<br />
<br />
<source lang="C">int sceGUIDSetPIDForKernel(SceUID guid, SceUID pid);</source><br />
<br />
=== sceGUIDSetCNOAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x8D6AF468<br />
|-<br />
| 3.63 || 0x5EDDEEB5<br />
|}<br />
<br />
Setting Class Name Object Attr.<br />
<br />
<source lang="C">int sceGUIDSetCNOAForKernel(SceUID guid, SceClass *pClass, const char *name, void *pObject, SceUInt32 attr);</source><br />
<br />
=== sceGUIDSetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0xD7B323EB<br />
|-<br />
| 3.63 || 0xBF275C5A<br />
|}<br />
<br />
Re setting the GUID on an object that already has a uid assigned may cause the system to malfunction.<br />
<br />
<source lang="C">int sceGUIDSetForKernel(SceUID guid, SceClass *pClass, const char *name, SceKernelObject *pObject);</source><br />
<br />
=== scePUIDGetEntryInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.610.011 || 0x2770A7D7<br />
|-<br />
| 3.630.011-3.740.011 || 0x3C3005EE<br />
|}<br />
<br />
<source lang="C">int scePUIDGetEntryInfoAllForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, void *pInfo);</source><br />
<br />
=== scePUIDGetAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x86E83C0D<br />
|-<br />
| 3.63 || 0x96BD47D1<br />
|}<br />
<br />
<source lang="C">int scePUIDGetAttrForKernel(SceUID pid, SceUID puid, SceUInt32 *pAttr);</source><br />
<br />
=== scePUIDReleaseObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x3FCA782B<br />
|-<br />
| 3.63 || 0xCE561224<br />
|}<br />
<br />
<source lang="C">int scePUIDReleaseObjectForKernel(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60-3.61 || 0x12ED88AE<br />
|-<br />
| 3.63 || 0x857701D4<br />
|}<br />
<br />
<source lang="C"><br />
// pInfo size is 0x14 bytes<br />
int scePUIDGetInfoForKernel(SceUID pid, SceUID puid, void *pInfo);<br />
</source><br />
<br />
=== scePUIDtoGUIDWithDebugForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB3E2AA7A<br />
|-<br />
| 3.63 || 0x188C8742<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUID scePUIDtoGUIDWithDebugForKernel(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDReferObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x620E00E7<br />
|-<br />
| 3.63 || 0x2C15615F<br />
|}<br />
<br />
<source lang="C">int scePUIDReferObjectForKernel(SceUID pid, SceUID puid, SceObject **ppObject);</source><br />
<br />
=== scePUIDOpenByNameWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x22F79E82<br />
|-<br />
| 3.63 || 0x201E970B<br />
|}<br />
<br />
<source lang="C">SceUID scePUIDOpenByNameWithOptForKernel(ScePID pid, const char *name, void *pOpt);</source><br />
<br />
=== scePUIDGetPUIDVectorByGUIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.06 || not present<br />
|-<br />
| 2.100.081-3.610.011 || 0xBF04FC83<br />
|-<br />
| 3.630.011-3.740.011 || 0xCE16AD91<br />
|}<br />
<br />
<source lang="C">int scePUIDGetPUIDVectorByGUIDForKernel(SceUID pid, SceUID guid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== scePUIDGetUIDVectorByClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.610.011 || 0xB16D5136<br />
|-<br />
| 3.630.000-3.740.011 || 0x08C05493<br />
|}<br />
<br />
Similar to [[#sceGUIDGetUIDVectorByClassForKernel]].<br />
<br />
<source lang="C">int scePUIDGetUIDVectorByClassForKernel(SceUID pid, SceClass *pClass, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== scePUIDReferObjectWithClassForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x9C53F457<br />
|-<br />
| 3.63 || 0x9C23DFF7<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int scePUIDReferObjectWithClassForKernel(SceUID pid, SceUID puid, SceClass *pClass, void **ppObject);</source><br />
<br />
=== scePUIDOpenByGUIDWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x53A2E272<br />
|-<br />
| 3.63 || 0x1FF2749A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUID scePUIDOpenByGUIDWithOptForKernel(SceUID pid, SceUID guid, void *pOpt);</source><br />
<br />
=== scePUIDGetGUIDVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x3203AE64<br />
|-<br />
| 3.63 || 0x66489B4B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int scePUIDGetGUIDVectorForKernel(SceUID pid, SceUInt32 vis_level, SceUID *pVector, SceUInt32 nVector, SceUInt32 *ret_num);</source><br />
<br />
=== sceKernelGetPhyPartKernelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x4D38F861<br />
|-<br />
| 3.63-3.65 || 0x0164D817<br />
|}<br />
<br />
return gpPhyPartKernel;<br />
<br />
<source lang="C">void *sceKernelGetPhyPartKernelForKernel(void);</source><br />
<br />
=== sceKernelGetPhyPartToolForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF8E95A5A<br />
|-<br />
| 3.63-3.65 || 0x0B1B4ACA<br />
|}<br />
<br />
<source lang="C">void *sceKernelGetPhyPartToolForKernel(void);</source><br />
<br />
=== sceKernelGetPhyPartGameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB60568F9<br />
|-<br />
| 3.63-3.65 || 0x62800A6B<br />
|}<br />
<br />
<source lang="C">void *sceKernelGetPhyPartGameForKernel(void);</source><br />
<br />
=== sceKernelSetPhyPartGameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x77876A8D<br />
|-<br />
| 3.63-3.65 || 0x3753C584<br />
|}<br />
<br />
<source lang="C">void sceKernelSetPhyPartGameForKernel(void *pPhyPart);</source><br />
<br />
=== sceKernelSetPhyPartCdramForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x07FEBBCA<br />
|-<br />
| 3.63 || 0xDCEF10B2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSetPhyPartCdramForKernel(void *pPhyPart);</source><br />
<br />
=== sceKernelPhyMemLowAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x5E169FEF<br />
|-<br />
| 3.63 || 0xEA98CCE1<br />
|}<br />
<br />
Allocate a range of physically contiguous "pages" from a PhyMemLow object.<br />
<br />
<source lang="C"><br />
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)<br />
// size and alignment must be aligned to the target PHYMEMLOW granularity<br />
// On success, *pOut contains the base physical address of a range with the provided size<br />
SceInt32 sceKernelPhyMemLowAllocForKernel(SceUInt32 type, SceSize size, SceSize alignment, SceUIntPAddr* pOut);<br />
</source><br />
<br />
=== sceKernelPhyMemLowPA2VAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x0FD6B756<br />
|-<br />
| 3.63 || 0x2CFD8C9A<br />
|}<br />
<br />
<source lang="C"><br />
// type must be 0x10002<br />
int sceKernelPhyMemLowPA2VAForKernel(int type, void *PA, void **pVA);<br />
</source><br />
<br />
=== sceKernelGetPhyMemLowInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x06A4DA6C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)<br />
SceInt32 sceKernelGetPhyMemLowInfoForKernel(SceUInt32 type, SceKernelPhyMemLowInfo *info);<br />
</source><br />
<br />
=== sceKernelPhyMemLowFreeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.61 || 0x18B99FDD<br />
|-<br />
| 3.63 || 0x844DF3DA<br />
|}<br />
<br />
Free a range of physical "pages" from a PhyMemLow object.<br />
<br />
<source lang="C"><br />
// type must be one of SCE_KERNEL_PHYMEMLOW_TYPE (0x10001, 0x10002 or 0x20001)<br />
SceInt32 sceKernelPhyMemLowFreeForKernel(SceUInt32 type, SceUIntPAddr pbase, SceSize size);<br />
</source><br />
<br />
=== sceKernelSetPhyMemLowHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x2658EE0A<br />
|-<br />
| 3.63 || 0x2C7B8D65<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetPhyMemLowHookForKernel(void *pHook);</source><br />
<br />
=== sceKernelAllocMemBlockByCommandForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xCA91B9D5<br />
|-<br />
| 3.63 || 0x455B0A4C<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelMemBlockAllocCommand { // size is 0x94 on FW 3.65<br />
SceSize size; // Size of this structure<br />
SceUInt32 code;<br />
char* name;<br />
char unk_8[0x74];<br />
void* typeInfo;<br />
char unk_0x84[0x10];<br />
} SceKernelMemBlockAllocCommand;<br />
<br />
int sceKernelAllocMemBlockByCommandForKernel(SceKernelMemBlockAllocCommand *pCommand);<br />
</source><br />
<br />
=== sceKernelAllocSimpleMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xF81F4672<br />
|-<br />
| 3.63 || 0x814CDCC5<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelSimpleMemBlock {<br />
char unk_0[0x14];<br />
void *base;<br />
char unk_18[0x14];<br />
void *PhyPage;<br />
SceSize size;<br />
} SceKernelSimpleMemBlock;<br />
<br />
int sceKernelAllocSimpleMemBlockForKernel(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelSimpleMemBlock *smb);<br />
</source><br />
<br />
=== sceKernelFreeSimpleMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xA1FFA2C9<br />
|-<br />
| 3.63 || 0xA4DB88E1<br />
|}<br />
<br />
<source lang="C">int sceKernelFreeSimpleMemBlockForKernel(void *a1);</source><br />
<br />
=== sceKernelGetSimpleMemBlockBaseForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x0A8D14EC<br />
|-<br />
| 3.63 || 0x39D5A3B7<br />
|}<br />
<br />
<source lang="C">int sceKernelGetSimpleMemBlockBaseForKernel(SceKernelSimpleMemBlock *smb, void **base);</source><br />
<br />
=== sceKernelSimpleMemBlockGetFIFOForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x43DFCE89<br />
|-<br />
| 3.63 || 0xBD625136<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelSimpleMemBlockGetFIFOForKernel(void *pResult);</source><br />
<br />
=== sceKernelGetMemBlockInfoAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFEF54604<br />
|-<br />
| 3.63 || 0x1D19C864<br />
|}<br />
<br />
<source lang="C">int sceKernelGetMemBlockInfoAllForKernel(void *pPart, int a2, int a3, int a4, int a5, SceUInt32 level, void *pInfoBuffer, int a8, SceUInt32 *a9);</source><br />
<br />
=== sceKernelGetMemBlockInfoSimpleForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0x2364A170<br />
|-<br />
| 3.63 || 0xBA441FD0<br />
|}<br />
<br />
<source lang="C">int sceKernelGetMemBlockInfoSimpleForKernel(SceUID uid, SceKernelMemBlockInfoSimple *pInfo);</source><br />
<br />
=== sceKernelGetMemBlockTypeForKernel ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x289BE3EC<br />
|-<br />
| 3.63 || 0xD44FE44B<br />
|}<br />
<br />
<source lang="c"><br />
/***<br />
* Gets the memory block type of a memory block<br />
*<br />
* @param[in] uid - SceUID of the memory block<br />
* @param[out] type - Type of the memory block identified by uid<br />
*<br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelGetMemBlockTypeForKernel(SceUID uid, unsigned int *type);</source><br />
<br />
=== sceKernelRemapMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.05 || 0x8D332AE1<br />
|-<br />
| 1.50-3.60 || not present. Moved to ForDriver<br />
|}<br />
<br />
Temp name was sceKernelRemapBlockForKernel.<br />
<br />
See [[SceSysmem#sceKernelRemapMemBlockForDriver|sceKernelRemapMemBlockForDriver]].<br />
<br />
=== sceKernelSetMemBlockDebugCallbackForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x01DE3AB7<br />
|-<br />
| 3.63 || 0xF57A97A0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetMemBlockDebugCallbackForKernel(void *pCallbacks);</source><br />
<br />
=== sceKernelMemBlockAssocPhyPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xA88F6D88<br />
|-<br />
| 3.63 || 0x441E6BE9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelMemBlockAssocPhyPageForKernel(SceUID guid, const SceUIntPtr *a2);</source><br />
<br />
=== sceKernelAllocPartitionStackMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x64133268<br />
|-<br />
| 3.63 || 0x40870E74<br />
|}<br />
<br />
Temp name was sceKernelAllocStackBlockForKernel.<br />
<br />
<source lang="C">SceUID sceKernelAllocPartitionStackMemBlockForKernel(const char *name, SceSize size, int a3);</source><br />
<br />
=== sceKernelMemBlockGetCodeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x61C2AA52<br />
|-<br />
| 3.63 || 0x48D2E408<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceUint32 sceKernelMemBlockGetCodeForKernel(SceUint32 type);</source><br />
<br />
=== sceKernelAllocPartitionMemBlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x5FFE4B79<br />
|-<br />
| 3.65 || 0x6DB46017<br />
|}<br />
<br />
Temp name was sceKernelAllocSystemCallTableForKernel.<br />
<br />
<source lang="C"><br />
SceUID sceKernelAllocPartitionMemBlockForKernel(SceUID part, const char *name, SceKernelMemBlockType type, SceSize size, const struct SceKernelAllocMemBlockOptKernel *pOpt);<br />
</source><br />
<br />
=== sceKernelPartitionGetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7BE4D3D1<br />
|-<br />
| 3.63 || 0xFB101B86<br />
|}<br />
<br />
<source lang="C">int sceKernelPartitionGetInfoForKernel(SceUID part_id, void *pInfo);</source><br />
<br />
=== sceKernelGetPhyPageResetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.61 || 0xEB350679<br />
|-<br />
| 3.63 || 0x8FD11E02<br />
|}<br />
<br />
<source lang="C">void *sceKernelGetPhyPageResetForKernel(void);</source><br />
<br />
=== SceSysmemForKernel_BD33EDDF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xBD33EDDF<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Gets thread's name. Returns 0 on success.<br />
<br />
<source lang="C">int SceSysmemForKernel_BD33EDDF(int maybe_thid, char **pThreadName);</source><br />
<br />
=== sceKernelAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC0A4D2F3<br />
|-<br />
| 3.65 || 0x85571907<br />
|}<br />
<br />
<source lang="C">void *sceKernelAllocForKernel(SceSize len);</source><br />
<br />
=== sceKernelAllocWithOptForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xA2CD1697<br />
|-<br />
| 3.63 || 0xCF3C3F7A<br />
|}<br />
<br />
<source lang="C"><br />
<br />
typedef struct SceAllocOpt {<br />
SceSize size; // 0x14<br />
SceSize data04; // maybe len align?<br />
SceSize align;<br />
int data0C;<br />
int data10; <br />
} SceAllocOpt;<br />
<br />
void *sceKernelAllocWithOptForKernel(SceSize len, SceAllocOpt *pOpt);<br />
<br />
</source><br />
<br />
=== sceKernelFreeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xABAB0FAB<br />
|-<br />
| 3.65 || 0x4233C16D<br />
|}<br />
<br />
<source lang="C">int sceKernelFreeForKernel(void *ptr);</source><br />
<br />
=== sceKernelSetAllocFreeHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xBC2E2B2B<br />
|-<br />
| 3.63 || 0x42834422<br />
|}<br />
<br />
Only implemented in sysdbg build.<br />
<br />
<source lang="C">int sceKernelSetAllocFreeHookForKernel(void *pHook);</source><br />
<br />
=== SceSysmemForKernel_C38D61FC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xC38D61FC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#SceSysmemForDriver_89A44858]].<br />
<br />
=== SceSysmemForKernel_7C797940 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x7C797940<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#SceSysmemForKernel_620E00E7]] or [[#sceGUIDReferObjectForDriver]].<br />
<br />
=== sceKernelVSlotMapProcMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xFAD03241<br />
|-<br />
| 3.63 || 0x14D3807B<br />
|}<br />
<br />
<source lang="C">int sceKernelVSlotMapProcMemoryForKernel(SceUID pid, void *addr, SceSize size, SceUInt32 flag, SceKernelVSlot *pVslot, int *pBaseAddrOrOffset);</source><br />
<br />
=== sceKernelVSlotUnmapProcMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x789CD5BF<br />
|-<br />
| 3.63 || 0x4EEF69C7<br />
|}<br />
<br />
<source lang="C">int sceKernelVSlotUnmapProcMemoryForKernel(SceKernelVSlot *pVslot);</source><br />
<br />
=== SceSysmemForKernel_ECF9435A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xECF9435A<br />
|-<br />
| 3.63 || 0xFCB5745A<br />
|}<br />
<br />
Writes <code>nWords</code> times the 4-byte <code>ch</code> starting at usermode address <code>u_dst</code>. Write is performed with the <code>STRT</code> instruction and <code>DACR=0x15450FC3</code> (same as [[SceSysmem#sceKernelCopyToUserTextDomainForKernel||sceKernelCopyToUserTextDomain]] - required because NID tables are in RX segments).<br />
<br />
Used by [[SceKernelModulemgr]] to overwrite NID tables once a module's imports are bound with a random value from Bigmac RNG. This overwrite was called [[Kernel#NID_Poisoning|"NID Poisoning"]] by Team Molecule.<br />
<br />
<source lang="C">int SceSysmemForKernel_ECF9435A(void *u_dst, SceUInt32 ch, SceUInt32 nWords);</source><br />
<br />
=== SceSysmemForKernel_ECC68E7B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xECC68E7B<br />
|-<br />
| 3.63 || 0x05822B82<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_ECC68E7B(SceUInt32 phymem_type, SceUInt32 *result);</source><br />
<br />
=== SceSysmemForKernel_E68A9F1B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xE68A9F1B<br />
|-<br />
| 3.63 || 0x1DE4953F<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_E68A9F1B(int a1, SceClass **ppClass);</source><br />
<br />
=== sceKernelCheckOpenVMDomainForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.000.081-3.610.011 || 0xD514BB56<br />
|-<br />
| 3.630.000-3.740.011 || 0x4E6D8BC3<br />
|}<br />
<br />
Returns 2 if Virtual Machine is open, 0 else. Returns 0x80027101 on error.<br />
<br />
<source lang="C">SceUInt32 sceKernelCheckOpenVMDomainForKernel(void);</source><br />
<br />
=== sceeKernelSetNameHeapHookForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x1E11F41D<br />
|-<br />
| 3.63 || 0x6DBDA03B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Not implemented in sysdbg build either. Probably only implemented during real development.<br />
<br />
Only return 0.<br />
<br />
<source lang="C">int sceeKernelSetNameHeapHookForKernel(void *pHook);</source><br />
<br />
=== SceSysmemForKernel_22708F14 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x22708F14<br />
|-<br />
| 3.63 || 0x456ECB54<br />
|}<br />
<br />
<source lang="C">SceUInt32 SceSysmemForKernel_22708F14(void *a1, int a2);</source><br />
<br />
=== SceSysmemForKernel_22A26637 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x22A26637<br />
|-<br />
| 3.63 || 0xAD19285A<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_22A26637(void *a1, int a2, int a3, int a4, int a5, int a6, void *a7);</source><br />
<br />
=== SceSysmemForKernel_C6F04370 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xC6F04370<br />
|-<br />
| 3.63 || 0x02DAD732<br />
|}<br />
<br />
init budget data in sysmem.<br />
<br />
<source lang="C">int SceSysmemForKernel_C6F04370(void);</source><br />
<br />
=== SceSysmemForKernel_B339A865 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xB339A865<br />
|-<br />
| 3.63 || 0x320E907F<br />
|}<br />
<br />
Returns 0.<br />
<br />
<source lang="C">int SceSysmemForKernel_B339A865(void);</source><br />
<br />
=== SceSysmemForKernel_AD5A83E3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xAD5A83E3<br />
|-<br />
| 3.63 || 0xBF70207B<br />
|}<br />
<br />
<source lang="C">int SceSysmemForKernel_AD5A83E3(SceUID guid, SceUInt32 vis_level, SceUInt32 a3, int *a4);</source><br />
<br />
=== SceSysmemForKernel_A504BA60 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0xA504BA60<br />
|-<br />
| 3.63 || 0xCAB15F74<br />
|}<br />
<br />
=== SceSysmemForKernel_7DC46969 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.61 || 0x7DC46969<br />
|-<br />
| 3.63 || 0x8450BFF7<br />
|}<br />
<br />
Returns 1.<br />
<br />
<source lang="C">int SceSysmemForKernel_7DC46969(void);</source><br />
<br />
== SceSysmemForDriver ==<br />
<br />
=== sceKernelProcessGetContextForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.80-3.74 || 0x2ECF7944<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">int sceKernelProcessGetMMUContextForDriver(SceUID pid, SceKernelMMUContext **ppCtx);</source><br />
<br />
=== sceKernelProcessSwitchContextForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.74 || 0x2D711589<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">int sceKernelProcessSwitchMMUContextForDriver(SceKernelMMUContext *new_context, SceKernelMMUContext *prev_context);</source><br />
<br />
=== scePUIDOpenByGUIDForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBF209859<br />
|}<br />
<br />
Temp name was sceKernelCreateUserUidForDriver.<br />
<br />
<source lang="c">SceUID scePUIDOpenByGUIDForDriver(SceUID pid, SceUID guid);</source><br />
<br />
=== scePUIDOpenByGUIDWithFlagsForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCED1547B<br />
|}<br />
<br />
Temp name was sceKernelCreateUserUidForClassForDriver.<br />
<br />
<source lang="c">SceUID scePUIDOpenByGUIDWithFlagsForDriver(SceUID pid, SceUID guid, SceUInt32 flags);</source><br />
<br />
=== scePUIDOpenByNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x513B9DDD<br />
|}<br />
<br />
Temp name was sceKernelCreateUserUidForNameForDriver.<br />
<br />
<source lang="c">SceUID scePUIDOpenByNameForDriver(SceUID pid, const char *name);</source><br />
<br />
=== scePUIDOpenByNameWithClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8DA0BCA5<br />
|}<br />
<br />
Equivalent to [[SceSysmem#scePUIDOpenByNameForDriver|scePUIDOpenByNameForDriver]], but object's class is checked to be a subclass of provided <code>pClass</code> before opening.<br />
<br />
<source lang="c">SceUID scePUIDOpenByNameWithClassForDriver(ScePID pid, const char *name, SceClass *pClass);</source><br />
<br />
=== scePUIDOpenByNameWithExactClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.010.031 || 0xB800123C<br />
|-<br />
| 3.10-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name. Temp name was <code>add_heap</code>.<br />
<br />
Equivalent to [[SceSysmem#scePUIDOpenByNameWithClassForDriver|scePUIDOpenByNameWithClass]], but the object's class must match exactly the provided <code>pClass</code>.<br />
<br />
<source lang="C">SceUID scePUIDOpenByNameWithExactClassForDriver(ScePID pid, const char *name, const SceClass *pClass);</source><br />
<br />
=== scePUIDCloseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x84A4AF5E<br />
|}<br />
<br />
Temp name was sceKernelDeleteUserUidForDriver.<br />
<br />
<source lang="c">int scePUIDCloseForDriver(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDSetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x12624884<br />
|}<br />
<br />
Temp name was sceKernelSetNameForPidForUidForDriver.<br />
<br />
<source lang="c">int scePUIDSetNameForDriver(SceUID pid, SceUID puid, const char *name);</source><br />
<br />
=== scePUIDGetObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xFE6D7FAE<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForPidForUidForDriver.<br />
<br />
<source lang="c">int scePUIDGetObjectForDriver(SceUID pid, SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== scePUIDtoGUIDForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x45D22597<br />
|}<br />
<br />
Temp name was sceKernelKernelUidForUserUidForDriver.<br />
<br />
Returns the Global UID of a process based on its Process UID.<br />
<br />
<source lang="c">SceUID scePUIDtoGUIDForDriver(SceUID pid, SceUID puid);</source><br />
<br />
=== scePUIDtoGUIDWithClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x184172B1<br />
|}<br />
<br />
Temp name was sceKernelKernelUidForUserUidForClassForDriver.<br />
<br />
<source lang="c">SceUID scePUIDtoGUIDWithClassForDriver(SceUID pid, SceUID puid, SceClass *pClass);</source><br />
<br />
=== scePUIDGetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x09896EB7<br />
|}<br />
<br />
Temp name was sceKernelGetNameForPidByUidForDriver, scePUIDGetEntryHeapNameForDriver <br />
<br />
<source lang="C">int scePUIDGetNameForDriver(SceUID pid, SceUID puid, char **pName);</source><br />
<br />
=== scePUIDGetClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xE9728A12<br />
|}<br />
<br />
Temp name was sceKernelGetClassForPidForUidForDriver.<br />
<br />
<source lang="c">int scePUIDGetClassForDriver(SceUID pid, SceUID puid, SceClass **ppClass);</source><br />
<br />
=== sceUIDKernelCreateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.060.031 || 0x7FC849B1<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDKernelCreateForKernel]].<br />
<br />
Create a UID with default attribute (0x30000).<br />
<br />
<source lang="C">int sceUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDKernelCreateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x56A13E90<br />
|}<br />
<br />
Temp name was sceUIDKernelCreate2ForDriver, sceKernelCreateUidObj2ForDriver.<br />
<br />
Create a UID with default attribute (0x30000).<br />
<br />
<source lang="c">SceUID sceGUIDKernelCreateForDriver(SceClass *pClass, const char *name, SceKernelObject **ppEntry);</source><br />
<br />
=== sceUIDOpenByNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x796881D6<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDOpenByNameForDriver]].<br />
<br />
<source lang="c">SceUID sceUIDOpenByNameForDriver(const char *name);</source><br />
<br />
=== sceUIDCloseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x32C5F628<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
if (flag_or_addr_or_pid & 0x40000000) == 0 calls [[#sceGUIDCloseForDriver]] else [[#scePUIDCloseForDriver]].<br />
<br />
<source lang="C">int sceUIDCloseForDriver(SceUID uid, SceUInt32 flag_or_addr_or_pid);</source><br />
<br />
=== SceSysmemForDriver_F09A7D09 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xF09A7D09<br />
|-<br />
| 3.60-3.74 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDCloseForDriver]].<br />
<br />
<source lang="C">int SceSysmemForDriver_F09A7D09(SceUID uid);</source><br />
<br />
=== sceUIDGetDefaultClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xFE28F5EB<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">SceClass *sceUIDGetDefaultClassForDriver(void);</source><br />
<br />
=== sceUIDtoObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xAB7AC3D1<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls [[#sceUIDtoObjectForKernel]].<br />
<br />
<source lang="C">SceKernelObject *sceUIDtoObjectForDriver(SceUID uid);</source><br />
<br />
=== sceUIDtoClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x65B9B393<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls [[#sceGUIDtoClassForKernel]].<br />
<br />
<source lang="C">SceClass *sceUIDtoClassForDriver(SceUID uid);</source><br />
<br />
=== sceUIDClassInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xE6D75E99<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Renamed to [[SceSysmem#sceUIDClassInitClassForDriver|sceUIDClassInitClassForDriver]].<br />
<br />
<source lang="C">int sceUIDClassInitForDriver(SceClass *pClass, const char *name, uint32_t uid_class, SceSize item_size, void *constructor, void *destructor);</source><br />
<br />
=== sceUIDClassInitClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x61317102<br />
|}<br />
<br />
Temp name was sceKernelCreateClassForDriver.<br />
<br />
<source lang="c">int sceUIDClassInitClassForDriver(SceClass *cls, const char *name, const SceClass *group, SceSize item_size, SceClassCallback create, SceClassCallback destroy);</source><br />
<br />
=== sceUIDGetClassInfoAllForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x3EF32C6C<br />
|-<br />
| 3.60 || not present. Moved to ForKernel<br />
|}<br />
<br />
See [[SceSysmem#sceUIDClassGetClassInfoAllForKernel|sceUIDClassGetClassInfoAllForKernel]]<br />
<br />
=== sceGUIDCreateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x89A44858<br />
|}<br />
<br />
Temp name was sceKernelCreateUidObjForUidForDriver.<br />
<br />
Create a GUID with default attribute (0x30000) for the specified UID.<br />
<br />
<source lang="c">SceUID sceGUIDCreateForDriver(SceClass *pClass, const char *name, SceUID guid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDOpenByNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xD76E7452<br />
|}<br />
<br />
Temp name was sceKernelOpenUidForNameForDriver.<br />
<br />
<source lang="c">SceUID sceGUIDOpenByNameForDriver(const char *name);</source><br />
<br />
=== sceGUIDCloseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x047D32F2<br />
|}<br />
<br />
Temp name was sceKernelDeleteUidForDriver.<br />
<br />
<source lang="C">int sceGUIDCloseForDriver(SceUID guid);</source><br />
<br />
=== sceGUIDGetClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC74B0152<br />
|}<br />
<br />
Temp name was sceKernelGetClassForUidForDriver.<br />
<br />
<source lang="c">int sceGUIDGetClassForDriver(SceUID guid, SceClass **ppClass);</source><br />
<br />
=== sceGUIDSetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0x4CFA4100<br />
|}<br />
<br />
Temp name was sceKernelSetObjectForUidForDriver. Wrongfully named scePUIDSetNameForDriver.<br />
<br />
Calls the same routine as [[SceSysmem#sceGUIDSetForKernel|sceGUIDSetForKernel]], but passes NULL for pClass and pObject.<br />
<br />
<source lang="c">SceInt32 sceGUIDSetNameForDriver(SceUID guid, const char *name);</source><br />
<br />
=== sceGUIDNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xB2BB6216<br />
|-<br />
| 3.60 || 0xE655852F<br />
|}<br />
<br />
Temp name was sceKernelGetNameForUid2ForDriver.<br />
<br />
<source lang="C">char* sceGUIDNameForDriver(SceUID guid);</source><br />
<br />
=== sceGUIDGetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA78755EB<br />
|}<br />
<br />
Temp name was sceKernelGetNameForUidForDriver.<br />
<br />
<source lang="C">int sceGUIDGetNameForDriver(SceUID guid, char **pName);</source><br />
<br />
=== sceGUIDGetObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x0FC24464<br />
|}<br />
<br />
Temp name was sceKernelGUIDGetObjectForDriver.<br />
<br />
<source lang="c">int sceGUIDGetObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0F5C84B7<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForUidForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectForDriver(SceUID uid, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectWithLevelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0xF6DB54BA<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForUidForAttrForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectWithLevelForDriver(SceUID uid, SceUInt32 level, SceKernelObject **pEntry);</source><br />
<br />
=== sceGUIDReferObjectWithClassLevelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x77066FD1<br />
|}<br />
<br />
<source lang="c">int sceGUIDReferObjectWithClassLevelForDriver(SceUID guid, SceClass *pClass, SceUInt32 level, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectWithClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x00ED6C14<br />
|}<br />
<br />
Temp name was sceKernelGetObjForUidForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectWithClassForDriver(SceUID uid, SceClass *pClass, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReferObjectWithSubclassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x72A98D17<br />
|}<br />
<br />
Temp name was sceKernelGetObjectForUidForClassTreeForDriver.<br />
<br />
<source lang="c">int sceGUIDReferObjectWithSubclassForDriver(SceUID guid, SceClass *pClass, SceKernelObject **ppEntry);</source><br />
<br />
=== sceGUIDReleaseObjectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x149885C4<br />
|}<br />
<br />
Temp name was sceKernelUidReleaseForDriver.<br />
<br />
<source lang="c">int sceGUIDReleaseObjectForDriver(SceUID uid);</source><br />
<br />
=== sceKernelGetUIDClassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x85336A1C<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceClass *sceKernelGetUIDClassForDriver(void);</source><br />
<br />
=== sceKernelIsSubclassForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x6484D03E<br />
|-<br />
| 1.691 || 0x55F4826F<br />
|-<br />
| 3.60 || not present. Moved to ForKernel<br />
|}<br />
<br />
See [[SceSysmem#sceUIDClassIsSubclassForKernel|sceUIDClassIsSubclassForKernel]]<br />
<br />
=== SceSysmemForDriver_6F2ACDAE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x6F2ACDAE<br />
|-<br />
| 1.80-3.74 || not present<br />
|}<br />
<br />
Temp name was switch_ttb_for_pid.<br />
<br />
Changes the TTBR to point to the tables for a given PID.<br />
<br />
<source lang="c">int SceSysmemForDriver_6F2ACDAE(SceUID pid);</source><br />
<br />
=== sceKernelAllocMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.65 || 0xC94850C9<br />
|}<br />
<br />
The interface is the same as the usermode version of this function, however more types can be specified and more options are in the pOpt argument.<br />
<br />
To allocate a kernel RW block of memory, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TMP_RW</code>.<br />
<br />
To allocate a block of memory with a specific physical address, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_SO_RW</code> or <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_IO_RW</code>, <code>pOpt->attr = 2</code>, and <code>pOpt->pbase = physical address</code>.<br />
<br />
To allocate a block of memory that is kernel executable, specify <code>type = SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.<br />
<br />
To allocate a block of memory that is physically contiguous, specify <code>type = 0x30808006</code>, <code>pOpt->attr = 0x200004</code> and an alignment to <code>pOpt->alignment</code>.<br />
<br />
To allocate a block of memory inside the CDRAM, specify <code>type = 0x40404006</code>.<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source><br />
<br />
=== sceKernelAllocMemBlockForDebuggerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.50 || 0x59F3159C<br />
|}<br />
<br />
Same as [[#sceKernelAllocMemBlockForDriver]] but authorizes null pOpt.<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockForDebuggerForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, SceKernelAllocMemBlockOptKernel *pOpt);</source><br />
<br />
=== sceKernelAllocMemBlockWithInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD44F464D<br />
|}<br />
<br />
Temp name was sceKernelAllocMemBlockExtForDriver.<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockWithInfoForDriver(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt, SceKernelMemBlockInfo *pInfo);</source><br />
<br />
=== sceKernelFreeMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.65 || 0x009E1C61<br />
|}<br />
<br />
<source lang="C">int sceKernelFreeMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelFindMemBlockByAddrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8A1742F6<br />
|}<br />
<br />
<source lang="c">SceUID sceKernelFindMemBlockByAddrForDriver(const void *addr, SceSize size);</source><br />
<br />
=== sceKernelFindProcMemBlockByAddrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x857F1D5A<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockByAddrForPidForDriver.<br />
<br />
<source lang="c">SceUID sceKernelFindProcMemBlockByAddrForDriver(SceUID pid, const void *addr, SceSize size);</source><br />
<br />
=== sceKernelGetMemBlockAllocSizeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.120.011 || 0x63E5754B<br />
|-<br />
| 2.500.071-3.740.011 || not present<br />
|}<br />
<br />
This function was replaced since System Software version 2.500.071 by [[#sceKernelGetMemBlockAllocMapSizeForDriver]].<br />
<br />
<source lang="C">int sceKernelGetMemBlockAllocSizeForDriver(SceUID memid, SceSize *pAllocSize);</source><br />
<br />
=== sceKernelGetMemBlockAllocMapSizeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.120.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x78337B62<br />
|}<br />
<br />
Temp name was sceKernelMemBlockGetSomeSizeForDriver.<br />
<br />
This function is a replacement since System Software version 2.500.071 of [[#sceKernelGetMemBlockAllocSizeForDriver]].<br />
<br />
<source lang="C">int sceKernelGetMemBlockAllocMapSizeForDriver(SceUID memid, SceSize *pAllocMapSize);</source><br />
<br />
=== sceKernelGetMemBlockMemtypeByAddrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF3BBE2E1<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockByAddrForDefaultSizeForDriver.<br />
<br />
<source lang="c">SceKernelMemoryType sceKernelGetMemBlockMemtypeByAddrForDriver(const void *addr);</source><br />
<br />
=== sceKernelGetMemBlockPARangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x98C15666<br />
|}<br />
<br />
Temp name was sceKernelGetMemBlockAddrPairForUidForDriver.<br />
<br />
Returns the physical address and size (pRange) of the memory block if it is physically continuous.<br />
<br />
<source lang="c">int sceKernelGetMemBlockPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelGetMemBlockBaseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.74 || 0xA841EDDA<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Get mapped base address of memory block.<br />
*<br />
* Get base address of memory block.<br />
* @param[in] uid block id<br />
* @param[out] ppBase base address of memory block<br />
* @retval SCE_OK success<br />
* @retval <SCE_OK Error<br />
*/<br />
int sceKernelGetMemBlockBaseForDriver(SceUID uid, void **ppBase);<br />
</source><br />
<br />
=== sceKernelGetMemBlockVBaseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB81CF0A3<br />
|}<br />
<br />
Temp name was sceKernelGetMemBlockKernelPageForDriver.<br />
<br />
<source lang="c">int sceKernelGetMemBlockVBaseForDriver(SceUID uid, void **kernel_page);</source><br />
<br />
=== sceKernelGetMemBlockMappedBaseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0B1FD5C3<br />
|}<br />
<br />
<source lang="c">int sceKernelGetMemBlockMappedBaseForDriver(SceUID uid, void **basep);</source><br />
<br />
=== sceKernelGetMemBlockPAVectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x19A51AC7<br />
|}<br />
<br />
Temp name was sceKernelGetMemBlockPaddrListForUidForDriver.<br />
<br />
<source lang="c">int sceKernelGetMemBlockPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelGetMemBlockInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA73CFFEF<br />
|}<br />
<br />
Temp name was sceKernelMemBlockGetInfoExForVisibilityLevelForDriver.<br />
<br />
<source lang="c">int sceKernelGetMemBlockInfoForDriver(SceUID uid, uint32_t level, SceKernelMemBlockInfoEx *pInfo);</source><br />
<br />
=== sceKernelGetMemBlockInfoExForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x24A99FFF<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">int sceKernelGetMemBlockInfoExForDriver(SceUID uid, SceKernelMemBlockInfoEx *pInfo);</source><br />
<br />
=== sceKernelDecRefCountMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF50BDC0C<br />
|}<br />
<br />
Temp name was sceKernelMemBlockDecRefCounterAndReleaseUidForDriver.<br />
<br />
<source lang="c">int sceKernelDecRefCountMemBlockDriver(SceUID uid);</source><br />
<br />
=== sceKernelIncRefCountMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xEAF3849B<br />
|}<br />
<br />
Temp name was sceKernelMemBlockIncRefCounterAndReleaseUidForDriver.<br />
<br />
<source lang="c">int sceKernelIncRefCountMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelMemBlockType2MemtypeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x20C811FA<br />
|}<br />
<br />
<source lang="c">int sceKernelMemBlockType2MemtypeForDriver(SceKernelMemBlockType type);</source><br />
<br />
=== sceKernelMemBlockTypeGetPrivilegesForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6A0792A3<br />
|}<br />
<br />
<source lang="c">int sceKernelMemBlockTypeGetPrivilegesForDriver(SceKernelMemBlockType type);</source><br />
<br />
=== sceKernelMemBlockType2SourceMemTypeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCB0F3A33<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemBlockTypeGetUnknownForDriver.<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_IO 0x100000<br />
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_LPDDR 0x200000<br />
#define SCE_KERNEL_SOURCE_MEMORY_TYPE_CDRAM 0x400000<br />
<br />
int sceKernelMemBlockType2SourceMemTypeForDriver (SceKernelMemBlockType type);<br />
</source><br />
<br />
=== sceKernelMapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x58D21746<br />
|}<br />
<br />
Temp name was sceKernelMapBlockUserVisibleForDriver, sceKernelPartitionMapMemBlockForDriver.<br />
<br />
<source lang="c">int sceKernelMapMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelMapMemBlockWithFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x04059C4B<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMapBlockUserVisibleWithFlagForDriver.<br />
<br />
<source lang="c"><br />
/**<br />
* Map a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock to map.<br />
* @param[in] flag - Set to 1 to prevent DCache invalidation before mapping.<br />
*<br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelMapMemBlockWithFlagForDriver(SceUID uid, int flag);<br />
</source><br />
<br />
=== sceKernelRemapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xDFE2C8CB<br />
|}<br />
<br />
Temp name was sceKernelRemapBlockForDriver, sceKernelPartialRemapMemBlockForDriver.<br />
<br />
This can be used to remap RW memory as RX. To do this, first allocate a memory block of type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW</code>. After you are done writing, call sceKernelRemapMemBlockForDriver with type <code>SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RX</code>.<br />
<br />
<source lang="c">int sceKernelRemapMemBlockForDriver(SceUID uid, SceKernelMemBlockType type);</source><br />
<br />
=== sceKernelUnmapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFFCD9B60<br />
|}<br />
<br />
<source lang="c">int sceKernelUnmapMemBlockForDriver(SceUID uid);</source><br />
<br />
=== sceKernelGetPhysicalMemoryTypeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x0AAA4FDD<br />
|}<br />
<br />
Temp name was sceKernelVaddrMaybeGetSectionTypeForDriver<br />
<br />
<source lang="c">int sceKernelGetPhysicalMemoryTypeForDriver(void *vaddr);</source><br />
<br />
=== sceKernelGetPhyMemInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x89475192<br />
|}<br />
<br />
<source lang="c"><br />
typedef struct SceKernelPhyMemInfo { // Size is 0xC on 0.931-3.60<br />
SceSize size; // Size of this structure<br />
void* pbase; // Base physical address<br />
SceSize psize; // Physical size<br />
} SceKernelPhyMemInfo;<br />
<br />
// as of FW 0.931-0.990, pindex must be one of these values: 1 PhyPartKernel, 8 PageVenezia, 9 PageVIP<br />
#define SCE_KERNEL_PHYMEMPART_KERNEL_INDEX 1<br />
#define SCE_KERNEL_PHYMEMPART_LPDDR2MAIN_KERNEL_INDEX 6<br />
#define SCE_KERNEL_PAGE_VENEZIA_INDEX 8<br />
#define SCE_KERNEL_PAGE_VIP_INDEX 9<br />
<br />
SceInt32 sceKernelGetPhyMemInfoForDriver(SceUInt32 pindex, SceKernelPhyMemInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelPartialAllocMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x16713BE8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Allocates PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[FREE|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialAllocMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 opCheck);<br />
</source><br />
<br />
=== sceKernelPartialFreeMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8C43B052<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Unmaps and frees PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialFreeMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);<br />
</source><br />
<br />
=== sceKernelPartialMapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x13805CA8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Maps PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[ALLOCATED|FREE|ALLOCNOMAP|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialMapMemBlockForDriver (SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);<br />
</source><br />
<br />
=== sceKernelPartialRemapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4C584B29<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Remaps PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] op - SCE_KERNEL_MEMBLOCK_PARTIAL_OP_[REMAP_RO|REMAP_RW] | SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED_RW|MAPPED_RO|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialRemapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 op);<br />
</source><br />
<br />
=== sceKernelPartialUnmapMemBlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6C76AD89<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c"><br />
/**<br />
* Unmaps PhyPages for a partial range of a memblock.<br />
*<br />
* @param[in] uid - GUID of the memblock.<br />
* @param[in] vbase - Start of the range.<br />
* @param[in] vsize - Size of the range.<br />
* @param[in] check - SCE_KERNEL_MEMBLOCK_PARTIAL_CHECK_[MAPPED|NONE]<br />
* <br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelPartialUnmapMemBlockForDriver(SceUID uid, void* vbase, SceSize vsize, SceUInt32 check);<br />
</source><br />
<br />
=== sceKernelGetMemBlockProcessForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x1EFC96EA<br />
|}<br />
<br />
<source lang="c">int sceKernelGetMemBlockProcessForDriver(SceUID uid);</source><br />
<br />
=== sceKernelMemBlockToPARangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x64DBE472<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelMemBlockGetVirPageForDriver.<br />
<br />
Gets a single PARange from the memblock. Returns an error if the memblock has more than one PARange.<br />
<br />
<source lang="c">int sceKernelMemBlockToPARangeForDriver(SceUID uid, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelMemBlockToPAVectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x987EE587<br />
|}<br />
<br />
<source lang="c">int sceKernelMemBlockToPAVectorForDriver(SceUID uid, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelCreateHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9328E0E8<br />
|}<br />
<br />
The heap pool is thread safe.<br />
<br />
has list "SCE_KERNEL_HEAP_HAS_HEAPCB".<br />
<br />
<source lang="C"><br />
// pOpt can be NULL<br />
SceUID sceKernelCreateHeapForDriver(const char *name, SceSize size, SceKernelHeapCreateOpt *pOpt);<br />
</source><br />
<br />
=== sceKernelDeleteHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xD6437637<br />
|}<br />
<br />
<source lang="c">int sceKernelDeleteHeapForDriver(SceUID uid);</source><br />
<br />
=== sceKernelVerifyHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC50A9C0D<br />
|}<br />
<br />
<source lang="c">int sceKernelVerifyHeapForDriver(SceUID uid, void *ptr);</source><br />
<br />
=== sceKernelShrinkHeapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x856FA2E3<br />
|}<br />
<br />
<source lang="c">int sceKernelShrinkHeapForDriver(SceUID heapid);</source><br />
<br />
=== sceKernelAllocHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x7B4CB60A<br />
|}<br />
<br />
Temp name was sceKernelMemPoolAlloc. Official name might also be sceUIDKernelCreateForDriver.<br />
<br />
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with a3 = 0.<br />
<br />
<source lang="c">void *sceKernelAllocHeapMemoryForDriver(SceUID uid, SceSize size);</source><br />
<br />
=== sceKernelAllocUncacheHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7750CEA7<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryFromGlobalHeapForDriver.<br />
<br />
Calls [[SceSysmem#sceKernelAllocHeapMemoryForDriver|sceKernelAllocHeapMemoryForDriver]] with uncache heap.<br />
<br />
<source lang="c">void* sceKernelAllocUncacheHeapMemoryForDriver(SceSize size);</source><br />
<br />
=== sceKernelAllocUncacheHeapMemoryWithOptionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x0B4ED16A<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryFromGlobalHeapWithOptForDriver.<br />
<br />
Calls [[SceSysmem#sceKernelAllocHeapMemoryWithOptionForDriver|sceKernelAllocHeapMemoryWithOptionForDriver]] with uncache heap.<br />
<br />
<source lang="c">void* sceKernelAllocUncacheHeapMemoryWithOptionForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelAllocHeapMemoryWithOptForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB415B5A8<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryWithOpt1ForDriver.<br />
<br />
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.<br />
<br />
<source lang="c">void* sceKernelAllocHeapMemoryWithOptForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelAllocHeapMemoryWithOptionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x49D4DD9B<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryWithOpt2ForDriver.<br />
<br />
Same as <code>sceKernelAllocHeapMemoryForDriver</code> but uses <code>pOpt</code>.<br />
<br />
<source lang="c">void* sceKernelAllocHeapMemoryWithOptionForDriver(SceUID uid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelFreeHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3EBCE343<br />
|}<br />
<br />
Temp name was sceKernelMemPoolFreeForDriver.<br />
<br />
<source lang="c">int sceKernelFreeHeapMemoryForDriver(SceUID uid, void *ptr);</source><br />
<br />
=== sceKernelFreeUncacheHeapMemoryForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFB817A59<br />
|}<br />
<br />
Temp name was sceKernelFreeHeapMemoryFromGlobalHeapForDriver.<br />
<br />
<source lang="c">int sceKernelFreeUncacheHeapMemoryForDriver(void *ptr);</source><br />
<br />
=== sceKernelCountFillValueFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBDA6E42B<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock32UserForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValueFromUserForDriver(unsigned int *ptr, int value, int byte_size);</source><br />
<br />
=== sceKernelCountFillValueFromUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8334454F<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock32UserForPidForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValueFromUserProcForDriver(SceUID pid, unsigned int *ptr, int value, int byte_size);</source><br />
<br />
=== sceKernelCountFillValue64FromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.120.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0xBB3B02C2<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock64UserForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValue64FromUserForDriver(unsigned long long *ptr, int unused, unsigned long long value, int byte_size);</source><br />
<br />
=== sceKernelCountFillValue64FromUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.120.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0xE83855FD<br />
|}<br />
<br />
Temp name was sceKernelFirstDifferentBlock64UserForPidForDriver.<br />
<br />
<source lang="c">int sceKernelCountFillValue64FromUserProcForDriver(SceUID pid, unsigned long long *ptr, unsigned long long value, int byte_size);</source><br />
<br />
=== sceKernelVAtoPAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x8D160E65<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrForDriver.<br />
<br />
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.<br />
<br />
Returns <0 on error, values >=0 indicate success.<br />
<br />
<source lang="c">int sceKernelVAtoPAForDriver(ScePVoid pVA, SceUIntPtr *pPA);</source><br />
<br />
=== sceKernelVAtoPABySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x65419BD3<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrWithSectionTypeCheckForDriver, sceKernelAddressSpaceVAtoPABySWForDriver.<br />
<br />
<source lang="c">int sceKernelVAtoPABySWForDriver(void *pVA, void **pPA);</source><br />
<br />
=== sceKernelProcVAtoPAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.120.011 || 0xC51934BD<br />
|-<br />
| 2.500.071-3.740.011 || not present<br />
|}<br />
<br />
<source lang="c">int sceKernelProcVAtoPAForDriver(SceUID pid, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelProcModeVAtoPAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x61A67D32<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrForPidForDriver.<br />
<br />
<source lang="c">int sceKernelProcModeVAtoPAForDriver(SceUID pid, SceUInt32 mode, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelVARangeToPAVectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE68BEEBD<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrListForDriver.<br />
<br />
This function writes into <code>pVector->output_buffer</code> an array of <code>vRange</code> that encompasses the block of memory specified in the input. <code>pVector->ret_count</code> will contain the number of entries written. If <code>pVector->output_buffer</code> is null, it will just write the count.<br />
<br />
<source lang="c">int sceKernelVARangeToPAVectorForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelVARangeToPAVectorBySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x08A8A7E8<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetPaddrListForLargePageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPAVectorBySWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelVARangeToPAVectorByHWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x16844CE6<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrListForSmallPageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPAVectorByHWForDriver(const SceKernelVARange *vRange, SceKernelPAVector *pPAV);</source><br />
<br />
=== sceKernelVARangeToPARangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0xAE36C775<br />
|}<br />
<br />
Temp name was sceKernelGetPaddrPairForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPARangeForDriver(const SceKernelVARange *vRange, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelVARangeToPARangeBySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x32257A24<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetPaddrPairForLargePageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPARangeBySWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelVARangeToPARangeByHWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xB3575090<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetPaddrPairForSmallPageForDriver.<br />
<br />
<source lang="c">int sceKernelVARangeToPARangeByHWForDriver(SceKernelVARange *vRange, SceKernelPARange *pRange);</source><br />
<br />
=== sceKernelIsAccessibleRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9C78064C<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockForDriver.<br />
<br />
Also exported as [[#sceKernelIsAccessibleRangeForDebugger]].<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="c">int sceKernelIsAccessibleRangeForDriver(SceUInt32 permission_type, const void *pVA, SceSize len);</source><br />
<br />
=== sceKernelIsAccessibleRangeProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9F6E45E3<br />
|}<br />
<br />
Temp name was sceKernelFindMemBlockForPidForDriver.<br />
<br />
Also exported as [[#sceKernelIsAccessibleRangeProcForDebugger]].<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="C">int sceKernelIsAccessibleRangeProcForDriver(SceUID pid, SceUInt32 permission_type, const void *pVA, SceSize len);</source><br />
<br />
=== sceKernelIsEqualAccessibleRangeProcBySWForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xF4AD89D8<br />
|}<br />
<br />
Temp name was sceKernelProcIsPAWithinSameSection, sceKernelIsPaddrWithinSameSectionForUidForDriver.<br />
<br />
<source lang="C">int sceKernelIsEqualAccessibleRangeProcBySWForDriver(SceUID pid, int permission_type, void *pVA, SceSize len);</source><br />
<br />
=== sceKernelGetDebugPADramRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xC9928F5E<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelGetUnknownValidPhysAddressSpaceForDriver.<br />
<br />
<source lang="C">int sceKernelGetDebugPADramRangeForDriver(SceUIntPtr *address, SceSize *length);</source><br />
<br />
=== sceKernelIsVAWithinDebugPADramRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xA7C0D1FC<br />
|}<br />
<br />
This is a guessed and bad name. Temp name was sceKernelIsPaddrWithinUnknownValidPhysAddressSpaceForDriver.<br />
<br />
<source lang="C">int sceKernelIsVAWithinDebugPADramRangeForDriver(const void *pVA);</source><br />
<br />
=== sceKernelUserMapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x278BC201<br />
|}<br />
<br />
Temp name was sceKernelMapUserBlockDefaultTypeForDriver.<br />
<br />
Assigns type 0.<br />
<br />
<source lang="C">SceUID sceKernelUserMapForDriver(const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source><br />
<br />
=== sceKernelProcUserMapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.000-3.740.011 || 0x0091D74D<br />
|}<br />
<br />
Temp name was sceKernelMapUserBlockForDefaultTypeForPidForDriver. sceKernelProcUserMapForDriver is certainly the real name.<br />
<br />
Assigns type 0.<br />
<br />
<source lang="C">SceUID sceKernelProcUserMapForDriver(SceUID pid, const char *name, SceKernelMemoryRefPerm permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, SceUInt32 *kernel_offset);</source><br />
<br />
=== sceKernelUserMapWithFlagsForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.030-1.060.031 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0x7D4F8B5F<br />
|}<br />
<br />
Temp name was sceKernelMapUserBlockForDriver.<br />
<br />
Permission is either "1" for read only, no execute or "2"/"3" for read write, no execute. Type is either 0, 1, or 17 and affects the block type. 0 is default. This will allocate kernel memory starting at kernel_page. To get the same memory as the user pointer, add the kernel_offset. kernel_size is how much is allocated.<br />
<br />
<source lang="c"><br />
// this signature is for FW 1.50-1.69<br />
int sceKernelUserMapWithFlagsForDriver(SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);<br />
<br />
// this signature is for FW 3.60 - it now allows to give a name<br />
int sceKernelUserMapWithFlagsForDriver(char *name, SceKernelMemoryRefPerm permission, int type, void *user_buf, int size, void **kernel_page, int *kernel_size, int *kernel_offset);<br />
</source><br />
<br />
=== sceKernelUserUnmapForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x00575B00<br />
|}<br />
<br />
Temp name was sceKernelMemBlockReleaseForDriver.<br />
<br />
<source lang="c">int sceKernelUserUnmapForDriver(SceUID uid);</source><br />
<br />
=== sceKernelUnlockRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x75C70DE0<br />
|}<br />
<br />
Temp name was sceKernelMemRangeReleaseForDriver.<br />
<br />
<source lang="c">int sceKernelUnlockRangeForDriver(void *addr, SceSize size);</source><br />
<br />
=== sceKernelUnlockRangeProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA8525B06<br />
|}<br />
<br />
Temp name was sceKernelMemRangeReleaseForPidForDriver.<br />
<br />
<source lang="c">int sceKernelUnlockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source><br />
<br />
=== sceKernelUnlockRangeWithModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x22CBE925<br />
|}<br />
<br />
Temp name was sceKernelMemRangeReleaseWithPermForDriver, sceKernelUnlockRangeWithPermForDriver.<br />
<br />
Decreases references to pages.<br />
<br />
<source lang="c">int sceKernelUnlockRangeWithModeForDriver(SceKernelLockMode mode, void *addr, SceSize size);</source><br />
<br />
=== sceKernelLockRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x59A4402F<br />
|}<br />
<br />
Temp name was sceKernelMemRangeRetainForDriver.<br />
<br />
<source lang="c">int sceKernelLockRangeForDriver(void *addr, SceSize size);</source><br />
<br />
=== sceKernelLockRangeProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x659586BF<br />
|}<br />
<br />
Temp name was sceKernelMemRangeRetainForPidForDriver.<br />
<br />
<source lang="c">int sceKernelLockRangeProcForDriver(SceUID pid, void *addr, SceSize size);</source><br />
<br />
=== sceKernelLockRangeWithModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBC0A1D60<br />
|}<br />
<br />
Temp name was sceKernelMemRangeRetainWithPermForDriver, sceKernelLockRangeWithPermForDriver.<br />
<br />
Increases references to pages.<br />
<br />
<source lang="c">int sceKernelLockRangeWithModeForDriver(SceKernelLockMode mode, const void *addr, SceSize size);</source><br />
<br />
=== sceKernelReadUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xE08F3967<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUserForDriver(void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6D88EF8A<br />
|}<br />
<br />
Temp name was sceKernelMemcpyKernelToUserForDriver.<br />
<br />
Copies <code>size</code> bytes from a kernel buffer to a user buffer. Writes to <code>uaddr</code> are performed using <code>strt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserForDriver(void *uaddr, const void *kaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6B825479<br />
|}<br />
<br />
Temp name was sceKernelMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserForDriver.<br />
<br />
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyToUserForDriver|sceKernelCopyToUser]].<br />
<br />
<source lang="c">SceInt32 sceKernelProcCopyToUserForDriver(ScePID pid, void *uaddr, const void *kaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyToUserProcDomainForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.69 || 0x571D2739<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelRoMemcpyKernelToUserForPidForDriver, sceKernelProcCopyToUserRoForDriver.<br />
<br />
Same as [[SceSysmem#sceKernelCopyToUserProcForDriver|sceKernelCopyToUserProc]], but sets DACR to 0xFFFFFFFF (ignore access permission bits in page table) before the copy then restores it. Use this function instead of sceKernelCopyToUserProc if you need to write data to read-only pages.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyToUserProcDomainForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBC996A7A<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToKernelForDriver.<br />
<br />
Copies <code>size</code> bytes from a user buffer to a kernel buffer. Reads from <code>uaddr</code> are performed using <code>ldrt</code>-type instructions which cause a Data Abort if the pages are not user-accessible. If any Data Abort occurs during the operation, the exception is swallowed and an error is returned. Otherwise, the function returns <code>SCE_OK</code>.<br />
<br />
<source lang="c">SceInt32 sceKernelCopyFromUserForDriver(void *kaddr, const void *uaddr, SceSize size);</source><br />
<br />
=== sceKernelCopyFromUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.60 || 0x605275F8<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToKernelForPidForDriver, sceKernelProcCopyFromUserForDriver.<br />
<br />
Temporarily switches to specified process' address space for a call to [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUser]].<br />
<br />
<source lang="c">SceInt32 sceKernelCopyFromUserProcForDriver(SceUID pid, void *dst, void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyFromToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x1BD44DD5<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToUserForDriver, sceKernelUserCopyForDriver.<br />
<br />
<source lang="C">int sceKernelCopyFromToUserForDriver(void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelCopyFromToUserProcForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x8E086C33<br />
|}<br />
<br />
Temp name was sceKernelMemcpyUserToUserForPidForDriver, sceKernelProcUserCopyForDriver.<br />
<br />
<source lang="c">int sceKernelCopyFromToUserProcForDriver(SceUID pid, void *dst, const void *src, SceSize size);</source><br />
<br />
=== sceKernelUserStrnlenForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present (in ForKernel)<br />
|-<br />
| 0.940-0.990 || 0xFF06898A<br />
|-<br />
| 1.50-3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelStrnlenFromUserForDriver.<br />
<br />
<source lang="C">SceSize sceKernelUserStrnlenForDriver(const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelStrnlenUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0xB429D419<br />
|}<br />
<br />
<source lang="c">SceSize sceKernelStrnlenUserForDriver(const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelProcStrnlenUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x9929EB07<br />
|}<br />
<br />
<source lang="c">SceSize sceKernelProcStrnlenUserForDriver(SceUID pid, const char *s, SceSize maxlen);</source><br />
<br />
=== sceKernelProcUserStrcpyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0xEBCB3970<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelProcUserStrcpyForDriver(SceUID pid, char *dst, const char *src);</source><br />
<br />
=== sceKernelStrncpyFromUserSpecialForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0x7440BCDA<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStrncpyFromUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source><br />
<br />
=== sceKernelStrncpyToUserSpecialForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0x369355F1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStrncpyToUserSpecialForDriver(char *dst, const char *src, SceSize maxlen, SceSize *dst_size);</source><br />
<br />
=== sceKernelUserStrncpyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present. Present but not exported.<br />
|-<br />
| 0.940-0.990 || 0xE6D5EFE4<br />
|-<br />
| 1.50-3.60 || not present<br />
|}<br />
<br />
Returns 0 on success.<br />
<br />
<source lang="C">int sceKernelUserStrncpyForDriver(char *dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelStrncpyFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0xDB3EC244<br />
|}<br />
<br />
Temp name was sceKernelStrncpyUserToKernelForDriver.<br />
<br />
<source lang="c">int sceKernelStrncpyFromUserForDriver(char *dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelProcStrncpyFromUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x75AAF178<br />
|}<br />
<br />
Temp name was sceKernelStrncpyUserForPidForDriver.<br />
<br />
<source lang="c">int sceKernelProcStrncpyFromUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelStrncpyToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0x80BD6FEB<br />
|}<br />
<br />
Temp name was sceKernelStrncpyKernelToUserForDriver.<br />
<br />
<source lang="c">int sceKernelStrncpyToUserForDriver(char* dst, const char *src, SceSize maxlen);</source><br />
<br />
=== sceKernelProcStrncpyToUserForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.50-3.60 || 0xFED82F2D<br />
|}<br />
<br />
Temp name was sceKernelMemcpyKernelToUserForPidUncheckedForDriver.<br />
<br />
<source lang="c">int sceKernelProcStrncpyToUserForDriver(SceUID pid, char *dst, const char *src, SceSize maxlen);</source><br />
<br />
== SceSysmemForDebugger ==<br />
<br />
This library was removed on FW 1.80.<br />
<br />
=== sceKernelPhysicalAddressSpaceStartForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x6AE2188F<br />
|-<br />
| 1.691-3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelPhysicalAddressSpaceStartForDebugger(void);</source><br />
<br />
=== sceKernelGetPhysicalAddressSpaceForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xE8905626<br />
|-<br />
| 1.691-3.60 || not present<br />
|}<br />
<br />
In FW 0.931, it calls sceKernelPhysicalAddressSpaceStartForDebugger.<br />
<br />
<source lang="C">void *sceKernelGetPhysicalAddressSpaceForDebugger(void);</source><br />
<br />
=== sceKernelIsAccessibleRangeProcForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-1.692 || 0x01DFC193<br />
|-<br />
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeProcForDriver]].<br />
|}<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="C">int sceKernelIsAccessibleRangeProcForDebugger(SceUID pid, SceUInt32 mode, const void *pVA, SceSize size);</source><br />
<br />
=== sceKernelIsAccessibleRangeForDebugger ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-1.692 || 0xD027761F<br />
|-<br />
| 1.80-3.60 || not present. Exported as [[#sceKernelIsAccessibleRangeForDriver]].<br />
|}<br />
<br />
?Returns 0 on success (if is accessible range)?<br />
<br />
<source lang="C">int sceKernelIsAccessibleRangeForDebugger(SceUInt32 mode, const void *pVA, SceSize size);</source><br />
<br />
== SceSysmem ==<br />
<br />
The SceSysmem library is responsible for both low-level and high-level memory management. There are functions for allocating raw blocks of memory (similar to Linux <code>sbrk</code>) as well as functions for maintaining a heap-like structure (similar to <code>malloc</code>) for kernel, however [[SceLibKernel]] implements a proper heap and that is used for user code.<br />
<br />
=== sceKernelMapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.69 || 0x7B763A21<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelRemapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.69 || 0x3B29E0F5<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelPartialMapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.69 || 0xC0A59868<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelUnmapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.69 || 0xEE30D976<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source><br />
<br />
=== sceKernelPartialUnmapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.69 || 0xCA99929B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelGetMemBlockInfoByRange ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 0.996-3.60 || 0x006F3DB4<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* @brief Get memory block informaton by virtual address range<br />
<br />
* @param[in] vbase base address<br />
* @param[in] vsize size<br />
* @param[inout] pInfo information structure<br />
*/<br />
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetMemBlockInfoByAddr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4010AD65<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* @brief Get memory block information.<br />
*<br />
* Get information about a memory block.<br />
* @param[in] vbase Base address<br />
* @param[inout] pInfo Information structure<br />
*/<br />
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetSubbudgetInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 1.69-3.60 || 0x832B4A65<br />
|}<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_SUBBUDGET_ID_MAIN (0)<br />
#define SCE_KERNEL_SUBBUDGET_ID_CDLG (1)<br />
<br />
typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60<br />
int size; // Size of this structure<br />
SceUInt32 totalSize;<br />
SceUInt32 freeSize;<br />
} SceKernelSubbudgetInfo;<br />
<br />
/**<br />
* Get the subbudget info<br />
*<br />
* @param[in] subbudget - The subbudget ID <br />
* @param[out] pInfo - The subbudget info<br />
*<br />
* @return 0 on success, < 0 on error.<br />
*/<br />
int sceKernelGetSubbudgetInfo(SceInt subbudget, SceKernelSubbudgetInfo *pInfo);<br />
</source><br />
<br />
=== sceKernelGetFreeMemorySize ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x87CC580B<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* Get free memory size<br />
*/<br />
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);<br />
</source><br />
<br />
=== sceKernelOpenMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8EB8DFBB<br />
|}<br />
<br />
<source lang="c"><br />
// on FW <= 1.691, flags is not used<br />
SceUID sceKernelOpenMemBlock(const char *name, int flags);<br />
</source><br />
<br />
=== sceKernelFindMemBlockByAddr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA33B99D1<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* Find memory block by virtual range (base address and size)<br />
* If size == 0, API returns a memory block which contains 'start'<br />
* If size > 0, API returns a memory block just fit range [start, start + size].<br />
* @param[in] vaddr base address<br />
* @param[in] size address size<br />
* @retval >=SCE_OK block id<br />
* @retval <SCE_OK error<br />
*/<br />
SceUID sceKernelFindMemBlockByAddr(void *vaddr, SceSize size);<br />
</source><br />
<br />
=== sceKernelFreeMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA91E15EE<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* Free memory block.<br />
*<br />
* @param[in] uid block uid<br />
* @retval SCE_OK Success<br />
* @retval <SCE_OK Error code<br />
*/<br />
int sceKernelFreeMemBlock(SceUID uid);<br />
</source><br />
<br />
=== sceKernelFreeMemBlockForVM ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4EA13FEA<br />
|}<br />
<br />
<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source><br />
<br />
=== sceKernelCloseMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB680E3A0<br />
|}<br />
<br />
<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source><br />
<br />
=== sceKernelGetMemBlockBase ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.996-3.60 || 0xB8EF5818<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Get mapped base address of memory block.<br />
*<br />
* Get base address of memory block.<br />
* @param[in] uid block id<br />
* @param[out] ppBase base address of memory block<br />
* @retval SCE_OK success<br />
* @retval <SCE_OK Error<br />
*/<br />
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);<br />
</source><br />
<br />
=== sceKernelAllocMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB9D5EBDE<br />
|}<br />
<br />
<source lang="c"><br />
/**<br />
* Reserve a new memory block.<br />
*<br />
* The memory types that can be specified for type are as follows.<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW<br />
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW<br />
*<br />
* Allocate a memory block.<br />
*<br />
* @param[in] name Memory block name<br />
* @param[in] vsize Memory block virtual size<br />
* @param[in] flags Options<br />
* @retval id UID of memory block<br />
* @retval <SCE_OK Error code<br />
*/<br />
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);<br />
</source><br />
<br />
=== sceKernelAllocUnmapMemBlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEC636BCB<br />
|}<br />
<br />
<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source><br />
<br />
=== sceKernelOpenVMDomain ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x9CA3EB2B<br />
|}<br />
<br />
<source lang="c">int sceKernelOpenVMDomain();</source><br />
<br />
=== sceKernelSyncVMDomain ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x19D2A81A<br />
|}<br />
<br />
<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source><br />
<br />
=== sceKernelCloseVMDomain ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD6CA56CA<br />
|}<br />
<br />
<source lang="c">int sceKernelCloseVMDomain();</source><br />
<br />
=== sceKernelAllocMemBlockForVM ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE2D7E137<br />
|}<br />
<br />
<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source><br />
<br />
=== sceKernelCheckModelCapability ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.570.011 || 0x0144FBD9<br />
|}<br />
<br />
Only bits 7 and 10 are supported.<br />
<br />
Returns 0x80020005 if <code>bit</code> is not supported.<br />
<br />
On success, returns SCE_TRUE if the model has capability, else SCE_FALSE.<br />
<br />
<source lang="c">int sceKernelCheckModelCapability(int bit);</source><br />
<br />
=== sceKernelGetModelForCDialog ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA2CB322F<br />
|}<br />
<br />
<source lang="c">int sceKernelGetModelForCDialog();</source><br />
<br />
=== sceKernelGetModel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD0D4F729<br />
|}<br />
<br />
<source lang="c">int sceKernelGetModel();</source><br />
<br />
=== sceKernelIsPSVitaTV ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1453A5E5<br />
|}<br />
<br />
<source lang="c">int sceKernelIsPSVitaTV();</source><br />
<br />
== SceDipsw ==<br />
<br />
=== sceKernelCheckDipsw ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1C783FB2<br />
|}<br />
<br />
=== sceKernelClearDipsw ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x800EDCC1<br />
|}<br />
<br />
=== sceKernelSetDipsw ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x817053D4<br />
|}<br />
<br />
== SceDipswForDriver ==<br />
<br />
=== sceKernelCheckDipswForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xA98FC2FD<br />
|}<br />
<br />
<source lang="C">int sceKernelCheckDipswForDriver(int no);</source><br />
<br />
=== sceKernelClearDipswForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xF1F3E9FE<br />
|}<br />
<br />
<source lang="C">void sceKernelClearDipswForDriver(int no);</source><br />
<br />
=== sceKernelSetDipswForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x82E45FBF<br />
|}<br />
<br />
<source lang="C">void sceKernelSetDipswForDriver(int no);</source><br />
<br />
=== sceKernelGetDipswInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.800.071-3.740.011 || 0xB2AD48BE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
All it does is:<br />
<source lang="C">return *(int *)(dipsw_addr + 4 * info_id);</source><br />
<br />
info_id possible values:<br />
* 0: CP timestamp 1<br />
* 1: CP Version, CP Board ID<br />
* 2: CP timestamp 2<br />
* 3: ASLR Seed<br />
<br />
See [[KBL Param#DIP Switches]].<br />
<br />
<source lang="C">int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);</source><br />
<br />
== SceUartForKernel ==<br />
<br />
=== sceKernelUartChStartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xA9C74212<br />
|}<br />
<br />
Temp name was sceKernelUartInitForKernel, sceUartInitForKernel.<br />
<br />
It initializes the clock generator registers for the UART <code>channel</code>. See [[UART Registers]]. The default baud rate is 115200 for channels 0-5 and 250000 for channel 6.<br />
<br />
<source lang="C"><br />
// channel: 0-6<br />
int sceKernelUartChStartForKernel(SceUInt32 channel);<br />
</source><br />
<br />
=== sceKernelUartReadAvailableForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x38DB7629<br />
|}<br />
<br />
Temp name was sceUartReadAvailableForKernel.<br />
<br />
Returns the number of words available to read from the read FIFO.<br />
<br />
<source lang="c">int sceKernelUartReadAvailableForKernel(int channel);</source><br />
<br />
=== sceKernelUartReadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9BBF1255<br />
|}<br />
<br />
Temp name was sceUartReadForKernel.<br />
<br />
<source lang="c">int sceKernelUartReadForKernel(int channel);</source><br />
<br />
=== sceKernelUartWriteForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x41973874<br />
|}<br />
<br />
Temp name was sceUartWriteForKernel.<br />
<br />
<source lang="c">int sceKernelUartWriteForKernel(int channel, char c);</source><br />
<br />
=== sceKernelUartPutcharForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xAF243C6A<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="c">int sceKernelUartPutcharForKernel(char c);</source><br />
<br />
== SceCpu ==<br />
<br />
=== sceKernelCpuId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x2704CFEE<br />
|}<br />
<br />
Returns the CPU ID of the current core.<br />
<br />
<source lang="c">SceUInt sceKernelCpuId(void);</source><br />
<br />
== SceCpuForKernel ==<br />
<br />
=== sceKernelSendEventForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x45885327<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">void sceKernelSendEventForKernel(void);</source><br />
<br />
=== sceKernelWaitForEventForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xD2629465<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">void sceKernelWaitForEventForKernel(void);</source><br />
<br />
=== sceKernelPrintCpuModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xDC99515C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelTlsKernelSetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x7A180AA4<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// thread_index must be < 8<br />
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);<br />
</source><br />
<br />
=== sceKernelTlsKernelGetForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x28E080BC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// thread_index must be < 8<br />
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);<br />
</source><br />
<br />
=== sceKernelRoundupDCacheLineForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xED512F50<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls the function previously registered by [[SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel]].<br />
<br />
<source lang="C">int sceKernelRoundupDCacheLineForKernel(int a1);</source><br />
<br />
=== sceKernelSetRoundupDCacheLineFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x66C3AA93<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Uses CTR and CTR-DMINLINE to determine which function to return.<br />
<br />
<source lang="C">(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);</source><br />
<br />
=== sceKernelReadUser8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x942B92C3<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);</source><br />
<br />
=== sceKernelReadUser16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || maybe present<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);</source><br />
<br />
=== sceKernelReadUser32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x6091086F<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);</source><br />
<br />
=== sceKernelWriteUser8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x13B7B151<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);</source><br />
<br />
=== sceKernelWriteUser16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || maybe present<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);</source><br />
<br />
=== sceKernelWriteUser32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x101894E0<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);</source><br />
<br />
=== sceKernelVMRead8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xA2F0FE9D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);</source><br />
<br />
=== sceKernelVMRead16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xF31D4D10<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);</source><br />
<br />
=== sceKernelVMRead32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x316574B1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);</source><br />
<br />
=== sceKernelVMWrite8ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xA3C65664<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);</source><br />
<br />
=== sceKernelVMWrite16ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xBF38A460<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);</source><br />
<br />
=== sceKernelVMWrite32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x04D129B2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);</source><br />
<br />
=== sceKernelMMUIsValidMapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4891F923<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);</source><br />
<br />
=== sceKernelMMUIsValidUnmapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x60EA8433<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);</source><br />
<br />
=== sceKernelMMUL1GetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x9D346F87<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Parses a L1PT for information about a specific entry. Pass the address of the L1PT in <code>l1pt</code>. Used by [[SceSysmem#sceKernelAddressSpaceGetMMUL1InfoForKernel|sceKernelAddressSpaceGetMMUL1InfoForKernel]].<br />
<br />
<source lang="C">SceInt32 sceKernelMMUL1GetInfoForKernel(void* l1pt, const void *addr, SceKernelMMUL1Info *pInfo);</source><br />
<br />
=== sceKernelMMUL2GetInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x247629A7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);</source><br />
<br />
=== sceKernelMMUMapSectionsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x868B471A<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUMapSupersectionsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x0D9DA15F<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUMapSmallPagesForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xB953E022<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUMapSmallPageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xCC7C16F8<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);</source><br />
<br />
=== sceKernelMMUMapLargePagesForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x78D32D38<br />
|-<br />
| 3.60 || not present<br />
|-<br />
| 3.65 || Present, but not exported<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source><br />
<br />
=== sceKernelMMUUnmapSectionsWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xFC657FD1<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUUnmapSupersectionsWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x0E4D29C6<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUUnmapSmallPagesWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x11EBA8CE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUUnmapLargePagesWithFlagsForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x44319918<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source><br />
<br />
=== sceKernelMMUL1VAtoPABySWForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x8E4ECF17<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelMMUSetL2PageTableForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xAECA0820<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);</source><br />
<br />
=== sceKernelMMUUnsetL2PageTableForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xCB519DF3<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);</source><br />
<br />
=== SceCpuForKernel_CA4124DE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0xCA4124DE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Returns 1, 2 or 6 based on some page/section properties.<br />
<br />
<source lang="C">int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelMMUGetContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x211B89DA<br />
|-<br />
| 1.03-3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelCpuSaveContextForKernel.<br />
<br />
<source lang="C">int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);</source><br />
<br />
=== sceKernelMMUChangeContextForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x0A4F0FB9<br />
|-<br />
| 1.03-3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelCpuRestoreContextForKernel.<br />
<br />
<source lang="C">int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);</source><br />
<br />
=== sceKernelMMUVAtoPAWithModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x67343A07<br />
|}<br />
<br />
Temp name was sceKernelCpuGetPaddrWithMaskForKernel.<br />
<br />
mode (maskPAR) is usually 0x33, sometimes 2.<br />
<br />
<source lang="c">int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);</source><br />
<br />
=== sceKernelMMUCheckRangeWithModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xCCDA3B8C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Return 0 if all pages are valid, < 0 else.<br />
<br />
<source lang="C">int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);</source><br />
<br />
=== sceKernelMMUVAtoPAForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2A46E800<br />
|}<br />
<br />
Temp name was sceKernelCpuGetPaddrForKernel.<br />
<br />
Uses mode (maskPAR) 0x33.<br />
<br />
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.<br />
<br />
Returns <0 on error, values >=0 indicate success.<br />
<br />
<source lang="c">int sceKernelMMUVAtoPAForKernel(void *pVA, void **pPA);</source><br />
<br />
=== sceKernelCpuGetCONTEXTIDRForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5B6B3274<br />
|}<br />
<br />
<source lang="C"><br />
return (SceUInt8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)<br />
</source><br />
<br />
<source lang="C">SceUInt8 sceKernelCpuGetCONTEXTIDRForKernel(void);</source><br />
<br />
=== sceKernelCpuUpdateSCTLRForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x04008CF7<br />
|}<br />
<br />
<source lang="C"><br />
int result;<br />
result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)<br />
__mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)<br />
return result;<br />
</source><br />
<br />
<source lang="C">void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)</source><br />
<br />
=== sceKernelCpuBranchPredictorInvalidateAllISForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1BB2BB8D<br />
|}<br />
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)</source><br />
<br />
=== sceKernelCpuBranchPredictorInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4C4C7D6B<br />
|}<br />
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all</source><br />
<br />
=== sceKernelDcacheCleanInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || 0x85A27F98<br />
|}<br />
<br />
Flushes PLE then cleans and invalidates L1 Dcache and L2 cache in this order.<br />
<br />
<source lang="C">void sceKernelDcacheCleanInvalidateAllForKernel(void);</source><br />
<br />
=== sceKernelL1DcacheInvalidateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x470EAE1E<br />
|}<br />
<br />
Temp name was sceKernelCpuDcacheInvalidateMVACForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheInvalidateForKernel(void* addr); // DCIMVAC, Data cache invalidate by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x583F30D1<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateMVACRangeForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheCleanInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6BA2E51C<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel, sceKernelDcacheWritebackInvalidateRangeForKernel.<br />
<br />
<source lang="C"><br />
// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)<br />
void sceKernelL1DcacheCleanInvalidateRangeForKernel(const void *addr, unsigned int size);<br />
</source><br />
<br />
=== sceKernelL1DcacheInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2F3BF020<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateSWForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheInvalidateAllForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)</source><br />
<br />
=== sceKernelL1DcacheCleanAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x73A30DB2<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheCleanSWForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanAllForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)</source><br />
<br />
=== sceKernelL1DcacheCleanInvalidateAllForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x76DAB4D0<br />
|}<br />
<br />
Guessed name was sceKernelCpuDcacheCleanInvalidateSWForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanInvalidateAllForKernel(void);</source><br />
<br />
=== sceKernelL1DcacheCleanForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF7159B55<br />
|}<br />
<br />
Temp name was sceKernelCpuDcacheCleanMVACForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanForKernel(void* addr); // DCCMVAC, Data cache clean by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheCleanRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xC5C1EE4E<br />
|}<br />
<br />
Guessed name was sceKernelCpuDcacheCleanMVACRangeForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)</source><br />
<br />
=== sceKernelL1DcacheCleanInvalidateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC8E8C9E9<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACForKernel.<br />
<br />
<source lang="C">void sceKernelL1DcacheCleanInvalidateForKernel(void *start); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)</source><br />
<br />
=== sceKernelL1IcacheInvalidateEntireAllCoreForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x264DA250<br />
|-<br />
| 3.65 || 0x803C84BF<br />
|}<br />
<br />
Guessed name was sceKernelCpuIcacheInvalidateAllUISForKernel.<br />
<br />
Invalidates the L1 Icache for all cores.<br />
<br />
<source lang="C">void sceKernelL1IcacheInvalidateEntireAllCoreForKernel(void);</source><br />
<br />
=== sceKernelL1IcacheInvalidateEntireForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAEE0B489<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuIcacheInvalidateAllUForKernel.<br />
<br />
Invalidates the entire L1 Icache of this core.<br />
<br />
<source lang="C">void sceKernelL1IcacheInvalidateEntireForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)</source><br />
<br />
=== sceKernelL1IcacheInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF4C7F578<br />
|}<br />
<br />
Temp name was sceKernelCpuIcacheInvalidateRangeForKernel, sceKernelCpuIcacheInvalidateMVAURange.<br />
<br />
Invalidates a range in L1 Icache of this core.<br />
<br />
<source lang="C"><br />
// ICIMVAU, Instruction cache invalidate by MVA (PoU)<br />
void sceKernelL1IcacheInvalidateRangeForKernel(void *start, SceSize size);<br />
</source><br />
<br />
=== sceKernelIcacheInvalidateRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x19F17BD0<br />
|-<br />
| 3.65-3.68 || 0x73E895EA<br />
|}<br />
<br />
Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.<br />
<br />
Cleans and invalidates range in L2 cache, then in L1 Icache of core.<br />
<br />
<source lang="c">int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);</source><br />
<br />
=== sceKernelPleFlushRequestForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD0D85FF8<br />
|}<br />
<br />
Temp name was sceKernelCpuPreloadEngineKillForKernel.<br />
<br />
*NSACR (Non-Secure Access Control Register)<br />
*Test bit NS access to the Preload Engine resources<br />
*[>] PLEFF (Preload Engine FIFO flush operation)<br />
*[>] PLEKC (Preload Engine kill channel operation)<br />
*[<] PLEASR (Preload Engine Activity Status Register)<br />
<br />
<source lang="c">void sceKernelPleFlushRequestForKernel(void);</source><br />
<br />
=== sceKernelDomainTextMemcpyForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8C683DEC<br />
|-<br />
| 3.63-3.65 || not present. Removed from library.<br />
|}<br />
<br />
Temp name was sceKernelCpuUnrestrictedMemcpyForKernel.<br />
<br />
Unrestricted memcpy by first setting the <code>DACR</code> register to <code>0xFFFF0000</code> then doing a memcpy.<br />
<br />
In FW 0.931, <code>DACR</code> is set to <code>0xFFFFFFFF</code> instead and interrupts are disabled for the operation.<br />
<br />
<source lang="c">int sceKernelDomainTextMemcpyForKernel(void *dest, const void *src, SceSize len);</source><br />
<br />
=== sceKernelMMUGetMemoryTypeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9B8173F4<br />
|}<br />
<br />
Return value can be:<br />
* 2<br />
* 8<br />
* 0x40<br />
* 0x80<br />
* 0xD0<br />
* 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)<br />
<br />
<source lang="c">int sceKernelMMUGetMemoryTypeForKernel(void *vaddr);</source><br />
<br />
=== sceKernelCorelockUnlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA5C9DBBA<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.<br />
<br />
<source lang="c"><br />
typedef struct SceKernelCorelockContext {<br />
int lock;<br />
int16_t core_count;<br />
int16_t last_wait_core;<br />
} SceKernelCorelockContext;<br />
<br />
void sceKernelCorelockUnlockForKernel(SceKernelCorelockContext *pCtx);<br />
</source><br />
<br />
=== sceKernelCorelockLockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9D72DD1B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">void sceKernelCorelockLockForKernel(SceKernelCorelockContext *pCtx, int core);</source><br />
<br />
=== sceKernelCorelockInitializeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x4CD4D921<br />
|-<br />
| 3.65 || 0xA65F6F14<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelCorelockInitializeForKernel(SceKernelCorelockContext *pCtx);</source><br />
<br />
=== SceCpuForKernel_43CC6E20 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x43CC6E20<br />
|}<br />
<br />
DACR off<br />
<br />
Does some memory copies between the args.<br />
<br />
<source lang="c">int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);</source><br />
<br />
=== sceKernelDomainTextBzeroIntForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x76EB0DD4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceCpuUnrestrictedBzeroIntForKernel.<br />
<br />
DACR off<br />
<br />
<source lang="c">int sceKernelDomainTextBzeroIntForKernel(int *addr);</source><br />
<br />
=== SceCpuForKernel_337473B5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x337473B5<br />
|}<br />
<br />
DACR off<br />
<br />
If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.<br />
<br />
<source lang="C">int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);</source><br />
<br />
=== sceKernelAtomicSubIfGreater64ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x37FBFD12<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);</source><br />
<br />
=== sceKernelAtomicLimit64ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6190A018<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicLimit64ForKernel(unsigned long long *result, int limit);</source><br />
<br />
=== sceKernelAtomicAdd32AndGet64InRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD8A7216C<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);</source><br />
<br />
=== sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD37AABE5<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="C">int sceKernelAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);</source><br />
<br />
=== sceKernelAtomicGet32AndSet64ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x4553FBDE<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="c">int sceKernelAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);</source><br />
<br />
=== sceKernelAtomicGet32AndSet64_2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x7FB4E7AC<br />
|}<br />
<br />
Exact same code as SceCpuForKernel_4553FBDE.<br />
<br />
DACR is not disabled<br />
<br />
<source lang="c">int sceKernelAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);</source><br />
<br />
=== sceKernelAtomicDecIfLowPositive32ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8510FA52<br />
|}<br />
<br />
DACR is not disabled<br />
<br />
<source lang="c">int sceKernelAtomicDecIfLowPositive32ForKernel(unsigned int *addr);</source><br />
<br />
=== sceKernelAtomicIncrementHighwaterCounterForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.610.011 || 0x5F64E5ED<br />
|-<br />
| 3.630.011-3.740.011 || 0x9DA58A9E<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuAtomicHiLoAlgorithmForKernel.<br />
<br />
Atomically increments a highwater counter.<br />
<br />
Highwater counters are 32-bit values holding a <code>current</code> count in the low 16 bits, and a <code>highwater</code> count in the high 16 bits.<br />
<br />
This routine increments the <code>current</code> count, and the <code>highwater</code> count if the new <code>current</code> value is higher than <code>highwater</code>.<br />
<br />
DACR is not disabled.<br />
<br />
Returns the value of the counter after the increment.<br />
<br />
<source lang="C">SceUInt32 sceKernelAtomicIncrementHighwaterCounterForKernel(SceUInt32 *pCounter);</source><br />
<br />
=== sceKernelAtomicAddAndGetPositive32InRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.610.011 || 0x98E91C1C<br />
|-<br />
| 3.630.011-3.740.011 || 0x8F40D0FD<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
DACR is not disabled<br />
<br />
If val is negative, returns 2 and does not override val.<br />
<br />
<source lang="C">int sceKernelAtomicAddAndGetPositive32InRangeForKernel(int* val, int add_val, int limit);</source><br />
<br />
=== SceCpuForKernel_6C7E7B57 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6C7E7B57<br />
|}<br />
<br />
Set TTBR lower value (0x4A).<br />
<br />
<source lang="c">int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);</source><br />
<br />
=== SceCpuForKernel_AED8F8D7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xAED8F8D7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Initialize TTBR.<br />
<br />
<source lang="C">int SceCpuForKernel_AED8F8D7(const void *ttbr);</source><br />
<br />
=== sceKernelGetVmaccessRangeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.610.011 || 0x9A3281C0<br />
|-<br />
| 3.630.011-3.740.011 || 0xC32687D0<br />
|}<br />
<br />
Returns the start and end address of the Virtual Memory access range. Functions such as [[SceSysmem#sceKernelCopyFromUserForDriver|sceKernelCopyFromUserForDriver]] (i.e. kernel<->usermode transfer routines) are located in this range. All functions in the Virtual Memory access range run in ARM mode not in Thumb mode.<br />
<br />
See [[SceExcpmgr|the SceExcpmgr page]] for more information about how the values returned by this function are used.<br />
<br />
Note that the Virtual Memory access range excludes the endpoint. <code>*pRangeEnd</code> is not considered part of the range however <code>*pRangeStart</code> is.<br />
<br />
<source lang="C"><br />
// 0.931.010<br />
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);<br />
<br />
// 0.940-0.990<br />
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pOldModelRangeStart, SceUIntPtr *pOldModelRangeEnd, SceUIntPtr *pNewModelRangeStart, SceUIntPtr *pNewModelRangeEnd)<br />
<br />
// 3.600.011-3.740.011<br />
void sceKernelGetVmaccessRangeForKernel(SceUIntPtr *pRangeStart, SceUIntPtr *pRangeEnd);<br />
</source><br />
<br />
=== SceCpuForKernel_9CB82EB0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9CB82EB0<br />
|}<br />
<br />
<source lang="C"><br />
return;<br />
</source><br />
<br />
<source lang="c">int SceCpuForKernel_9CB82EB0(void);</source><br />
<br />
== SceCpuForDriver ==<br />
<br />
=== SceCpuForDriver_9A9D9C94 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-0.996.090 || 0x9A9D9C94<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
=== SceCpuForDriver_A2E3E4EB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-0.996.090 || 0xA2E3E4EB<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
=== sceKernelRoundupDCacheLine3ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0xF0849812<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelRoundupDCacheLine3ForDriver(int a1);</source><br />
<br />
=== sceKernelAbortForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.060.031 || 0x6DCA6903<br />
|-<br />
| 1.50-3.740.011 || not present<br />
|}<br />
<br />
<source lang="C">void sceKernelAbortForDriver(void);</source><br />
<br />
=== sceKernelCpuIdForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x5E4D5DE1<br />
|}<br />
<br />
Returns the CPU ID of the current core.<br />
<br />
<source lang="c">int sceKernelCpuIdForDriver(void);</source><br />
<br />
=== sceKernelAtomicAddAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1E850481<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicAddAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x59F74E94<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicAddAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x5F6A8743<br />
|}<br />
<br />
Adds <code>val</code> to <code>*addr</code> atomically, and returns the result.<br />
<br />
<source lang="c">unsigned int sceKernelAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicAddAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4E459A03<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicAddUnless8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5CC62CEC<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);</source><br />
<br />
=== sceKernelAtomicAddUnless16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0F84AFE9<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);</source><br />
<br />
=== sceKernelAtomicAddUnless32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1F157DC3<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);</source><br />
<br />
=== sceKernelAtomicAddUnless64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x06CCFA4B<br />
|}<br />
<br />
<source lang="c">int sceKernelAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicAndAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x32B62B1A<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicAndAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB281D52A<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicAndAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDF899E4B<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicAndAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD18E7B54<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicClearAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8E538AB5<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicClearAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6B050D7C<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicClearAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78C1F148<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicClearAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2149CD4C<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicClearMask8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1B3336B0<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicClearMask16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1BE58599<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicClearMask32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4AE1BCC0<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicClearMask64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x55760309<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicCompareAndSet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3627F4E0<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);</source><br />
<br />
=== sceKernelAtomicCompareAndSet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6F63F56D<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);</source><br />
<br />
=== sceKernelAtomicCompareAndSet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCDA96E81<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);</source><br />
<br />
=== sceKernelAtomicCompareAndSet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4B527009<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicDecIfPositive8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x45153D4E<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicDecIfPositive8ForDriver(unsigned char *addr);</source><br />
<br />
=== sceKernelAtomicDecIfPositive16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9A693F5B<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicDecIfPositive16ForDriver(unsigned short *addr);</source><br />
<br />
=== sceKernelAtomicDecIfPositive32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2A71B03C<br />
|}<br />
<br />
This is a guessed name. Official name might be sceKernelAddressSpaceReleaseForDriver.<br />
<br />
<source lang="c">unsigned int sceKernelAtomicDecIfPositive32ForDriver(unsigned int* addr);</source><br />
<br />
=== sceKernelAtomicDecIfPositive64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x267D0B33<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicDecIfPositive64ForDriver(unsigned long long *addr);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndAdd8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFCDCD4DE<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndAdd16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x225DF91A<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndAdd32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x341B6E81<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndAdd64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x043FD446<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndAnd8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD8E675C0<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);</source><br />
<br />
=== sceKernelAtomicGetAndAnd16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4A820BC5<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndAnd32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x10EB35EB<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndAnd64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x18A17E07<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndClear8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x382D1466<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndClear16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8E9C086D<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndClear32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE36F3A46<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndClear64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x88BA6002<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndOr8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBDF6F8E4<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);</source><br />
<br />
=== sceKernelAtomicGetAndOr16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x004F09D1<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndOr32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2A40BB93<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndOr64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCB73D6D5<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndSet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x29599FC8<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndSet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x085532C8<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndSet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0EE04C03<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndSet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD2DEE625<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);</source><br />
<br />
=== sceKernelAtomicGetAndSub8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7B43D0D7<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndSub16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3EE9B5B8<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndSub32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF891CF2A<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndSub64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA7585370<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicGetAndXor8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBAF47F7B<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicGetAndXor16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x711801E6<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicGetAndXor32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x77E34309<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicGetAndXor64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE212ECAD<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicOrAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5D515F1B<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicOrAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xADD39B84<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicOrAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBC248C30<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicOrAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3E218AF7<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicSet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0836537E<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicSet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x532CA3E8<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicSet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3168BC57<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicSet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC381CE8C<br />
|}<br />
<br />
<source lang="c">void sceKernelAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicSetIfGreaterGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC3868071<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicSetIfGreaterGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x875B094D<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicSetIfGreaterGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x26F71995<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicSubAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEB085370<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);</source><br />
<br />
=== sceKernelAtomicSubAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x515682C9<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicSubAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA4884C4E<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicSubAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB5F8919C<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelAtomicXorAndGet8ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x03887992<br />
|}<br />
<br />
<source lang="c">unsigned char sceKernelAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);</source><br />
<br />
=== sceKernelAtomicXorAndGet16ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x646003D6<br />
|}<br />
<br />
<source lang="c">unsigned short sceKernelAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);</source><br />
<br />
=== sceKernelAtomicXorAndGet32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4244BE65<br />
|}<br />
<br />
<source lang="c">unsigned int sceKernelAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);</source><br />
<br />
=== sceKernelAtomicXorAndGet64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x692C51B3<br />
|}<br />
<br />
<source lang="c">unsigned long long sceKernelAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source><br />
<br />
<hr><br />
<br />
=== sceKernelDcacheInvalidateRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x02796361<br />
|}<br />
<br />
Temp name was sceKernelDcacheInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheInvalidateRangeForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheInvalidateRangeForL2WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x614C6698<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelDcacheInvalidateRange_0x10ForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheInvalidateRangeForL2WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheInvalidateRangeForL1WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8B4C26DF<br />
|}<br />
<br />
Temp name was sceKernelDcacheInvalidateRange_0x20ForDriver, sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheInvalidateRangeForL1WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanInvalidateRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x364E68A4<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanInvalidateRange_1ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver, sceKernelDcacheCleanInvalidateRange_0x10ForDriver.<br />
<br />
Also have another name "sceKernelDcacheCleanInvalidateRangeForL2WBWAForDriver" in 0.990.<br />
<br />
<source lang="c">int sceKernelDcacheCleanInvalidateRangeForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xE551F99B<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanInvalidateRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanInvalidateRangeForL1WBWAForDriver(const void *start, SceSize);</source><br />
<br />
=== sceKernelDcacheCleanRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x103872A5<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanRangeForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanRangeForL2WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.350.011 || 0x2A5344B7<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
Temp name was sceKernelDcacheCleanRange_0x10ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanRangeForL2WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== sceKernelDcacheCleanRangeForL1WBWAForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9CB9F0CE<br />
|}<br />
<br />
Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelDcacheCleanRange_0x20ForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.<br />
<br />
<source lang="c">int sceKernelDcacheCleanRangeForL1WBWAForDriver(const void *start, SceSize size);</source><br />
<br />
=== SceCpuForDriver_E813EBB2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE813EBB2<br />
|}<br />
<br />
Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.<br />
<br />
<source lang="C"><br />
#define SceL2CacheReg 0x1A002000<br />
__dsb();<br />
*(int *)(SceL2CacheReg + 0x730) = 0;<br />
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )<br />
;<br />
__dmb();<br />
</source><br />
<br />
<source lang="c">int SceCpuForDriver_E813EBB2(void);</source><br />
<br />
=== sceKernelIsUncacheAddressInTmpFsGameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x337CBDF3<br />
|}<br />
<br />
Temp name was sceKernelCpuIsVaddrMappedForDriver.<br />
<br />
<source lang="C"><br />
uint32_t vaddr_memory_type = sceKernelMMUGetMemoryTypeForKernel(vaddr);<br />
if (vaddr_memory_type != 8) {<br />
if (vaddr_memory_type <= 8) {<br />
if (vaddr_memory_type != 2)<br />
return 0;<br />
} else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)<br />
return 0;<br />
}<br />
return 1;<br />
</source><br />
<br />
<source lang="C">SceBool sceKernelIsUncacheAddressInTmpFsGameForDriver(void *address);</source><br />
<br />
=== sceKernelCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x821FC0EE<br />
|}<br />
<br />
Temp name was sceKernelCpuDisableInterruptsForDriver.<br />
<br />
Disables IRQ (FIQ are not disabled, but they're routed to Secure state anyways...) and returns previous interrupt bit status (either 0 or 0x80).<br />
<br />
<source lang="c"><br />
//Return CPSR.I and disable IRQ.<br />
SceKernelIntrStatus sceKernelCpuSuspendIntrForDriver(void);<br />
</source><br />
<br />
=== sceKernelCpuResumeIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xF5BAD43B<br />
|}<br />
<br />
Temp name was sceKernelCpuEnableInterruptsForDriver.<br />
<br />
Restore previous IRQ state. Pass the return value of the previous call to [[SceSysmem#sceKernelCpuSuspendIntrForDriver|sceKernelCpuSuspendIntrForDriver]].<br />
<br />
<source lang="c"><br />
//Enable IRQ if prev_state & 0x80.<br />
SceKernelIntrStatus sceKernelCpuResumeIntrForDriver(SceKernelIntrStatus prev_state);<br />
</source><br />
<br />
<hr><br />
'''Spinlock functions'''<br />
<br />
The following functions implement a simple mutal exclusion mechanism using atomic operation (LDREX/STREX). Spinlocks are owned by a single thread or CPU at a time. Unlike other lock/sync objects of the kernel, spinlocks can be used under any context. Use spinlocks if the data to protect may be accessed from an IRQ or exception handler.<br />
<br />
There are two version of the Spinlock functions: normal functions do not change the CPU state, while the <code>SuspendIntr</code> functions ensure the CPU cannot be interrupted while the lock is held.<br />
<br />
The same type of function must be used to lock and unlock a spinlock: for example, '''calling <code>sceKernelSpinlockLowLockCpuResumeIntr</code> followed by <code>sceKernelSpinlockLowUnlock</code> is an invalid usage of this API'''.<br />
<br />
Spinlocks can take two values: <code>0</code> means the spinlock is unlocked, and <code>1</code> means the spinlock is locked.<br />
<br />
<source lang="c"><br />
//Unofficial names<br />
typedef int SceKernelSpinlock;<br />
typedef int SceKernelRWSpinlock;<br />
typedef int SceKernelIntrStatus;<br />
<br />
//Sample usage:<br />
void function(Object* object) {<br />
sceKernelSpinlockLowLock(&object->lock);<br />
/* ... work on object ... */<br />
sceKernelSpinlockUnlock(&object->lock);<br />
}<br />
<br />
void trylock_function(Object* object) {<br />
int res = sceKernelSpinlockLowTrylock(&object->lock);<br />
if (res >= 0) {<br />
/* ... work on object ... */<br />
}<br />
}<br />
<br />
void uninterruptible_function(Object* object) {<br />
SceKernelIntrStatus status = sceKernelSpinlockLowLockCpuSuspendIntr(&object->lock);<br />
/* ... work on object ... */<br />
/* interrupts are disabled here */<br />
sceKernelSpinlockUnlock(&object->lock, status);<br />
}<br />
<br />
void uninterruptible_trylock_function(Object* object) {<br />
SceKernelIntrStatus status = sceKernelSpinlockLowTrylockCpuSuspendIntr(&object->lock);<br />
if (status >= 0) {<br />
/* ... work on object ... */<br />
/* interrupts are disabled here */<br />
sceKernelSpinlockLowUnlockCpuResumeIntr(&object->lock, status);<br />
}<br />
}<br />
</source><br />
<br />
=== sceKernelSpinlockLowLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xBF82DEB2<br />
|}<br />
<br />
Temp name was sceKernelCpuLockStoreLRForDriver.<br />
<br />
Acquires a spinlock.<br />
<br />
<source lang="c">void sceKernelSpinlockLowLockForDriver(SceKernelSpinlock *pLock);</source><br />
<br />
=== sceKernelSpinlockLowTrylockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x5AC9D394<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTryLockStoreLRForDriver, sceKernelSpinlockLowTryLockForDriver.<br />
<br />
Attempts to acquire a spinlock.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval SCE_OK if the spinlock is acquired<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
int sceKernelSpinlockLowTrylockForDriver(SceKernelSpinlock *pLock);<br />
</source><br />
<br />
=== sceKernelSpinlockLowUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xD6ED0C46<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockStoreLRForDriver.<br />
<br />
Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockForDriver|sceKernelSpinlockLowLockForDriver]] or [[SceSysmem#sceKernelSpinlockLowTrylockForDriver|sceKernelSpinlockLowTrylockForDriver]].<br />
<br />
<source lang="c">void sceKernelSpinlockLowUnlockForDriver(SceKernelSpinlock *pLock);</source><br />
<br />
=== sceKernelSpinlockLowLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD32ACE9E<br />
|}<br />
<br />
Temp name was sceKernelCpuSuspendIntrForDriver, sceKernelCpuLockSuspendIntrStoreLRForDriver.<br />
<br />
Acquires a spinlock and suspend interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @return An opaque value describing the interrupt state<br />
*/<br />
SceKernelIntrStatus sceKernelSpinlockLowLockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);<br />
</source><br />
<br />
=== sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x27C0B340<br />
|}<br />
<br />
Temp name was sceKernelCpuTryLockSuspendIntrStoreLRForDriver.<br />
<br />
Attempts to acquire a spinlock. If successfully acquired, suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
SceKernelIntrStatus sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver(SceKernelSpinlock *pLock);<br />
</source><br />
<br />
=== sceKernelSpinlockLowUnlockCpuResumeIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x7BB9D5DF<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockResumeIntrStoreLRForDriver, sceKernelCpuResumeIntrForDriver.<br />
<br />
Unlocks a spinlock previously acquired with either [[SceSysmem#sceKernelSpinlockLowLockCpuSuspendIntrForDriver|sceKernelSpinlockLowLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver|sceKernelSpinlockLowTrylockCpuSuspendIntrForDriver]] and resumes interrupts if necessary.<br />
<br />
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.<br />
<br />
<source lang="c">void sceKernelSpinlockLowUnlockCpuResumeIntrForDriver(SceKernelSpinlock *pLock, SceKernelIntrStatus prev_state);<br />
</source><br />
<br />
<hr><br />
'''RW Spinlock functions'''<br />
<br />
The following functions implement RW spinlocks. This variant of the spinlock allows multiple threads/CPUs to access data at the same time as long as only reads are performed. When acquired for writing, a single thread at a time can access the data and is thus free to modify it. Like regular spinlocks, the RW spinlocks can be used under any context. Use RW spinlocks if the data to protect may be accessed from an IRQ or exception handler.<br />
<br />
Like for regular spinlocks, all RWSpinlock functions are available in a normal and <code>SuspendIntr</code> version. Additionally, every function exists in <code>Read</code> and <code>Write</code> variants, depending on whether the caller wants to read or write to the object protected by the lock.<br />
<br />
Like for regular spinlocks, the same type of function must be used to lock and unlock a RW spinlock.<br />
'''Calling <code>sceKernelRWSpinlockLowReadLock</code> followed by <code>sceKernelRWSpinlockLowWriteUnlock</code> is an invalid usage of this API'''. '''Calling <code>sceKernelRWSpinlockLowReadLockCpuSuspendIntr</code> followed by <code>sceKernelRWSpinlockLowReadUnlockCpu</code> is also an invalid usage of this API'''.<br />
<br />
RW Spinlocks can take three kind of values: <code>0</code> means the spinlock is unlocked, <code>-0x80000000</code> means the spinlock is write-locked, and a positive value <code>x</code> means that <code>x</code> readers have read-locked the spinlock.<br />
<br />
=== sceKernelRWSpinlockLowReadLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCAC9AE80<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuSpinLockStoreLRForDriver.<br />
<br />
Acquires a RW spinlock for reading data. '''Modifying the data protected by the spinlock is not allowed'''.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowReadLockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowTryReadLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x093925BD<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTrySpinLockStoreLRForDriver.<br />
<br />
Attempts to acquire a RW spinlock for reading data.<br />
<br />
'''Even if the spinlock is acquired, modifying the data protected by the spinlock is not allowed'''.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval SCE_OK if the spinlock is acquired<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
int sceKernelRWSpinlockLowTryReadLockForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowReadUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF5FD5676<br />
|}<br />
<br />
Temp name was sceKernelCpuSpinUnlockStoreLRForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockForDriver|sceKernelRWSpinlockLowReadLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockForDriver|sceKernelRWSpinlockLowTryReadLockForDriver]].<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowReadUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowWriteLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3F42B434<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuLockStoreFlagForDriver.<br />
<br />
Acquires a RW spinlock for writing data.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowWriteLockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowTryWriteLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4F7790B4<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTryLockStoreFlagForDriver.<br />
<br />
Attempts to acquire a RW spinlock for writing data.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval SCE_OK if the spinlock is acquired<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
int sceKernelRWSpinlockLowTryWriteLockForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowWriteUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCB8ABDF0<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockStoreFlagForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockForDriver|sceKernelRWSpinlockLowWriteLockForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockForDriver|sceKernelRWSpinlockLowTryWriteLockForDriver]].<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowWriteUnlockForDriver(SceKernelRWSpinlock *pRWLock);</source><br />
<br />
=== sceKernelRWSpinlockLowReadLockCpuSuspendIntr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xEC53D007<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuSpinLockSuspendIntrStoreLRForDriver, sceKernelCpuSpinLockIrqSaveForDriver.<br />
<br />
Acquires a RW spinlock for reading data and suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @return An opaque value describing the interrupt state<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF02467D1<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver.<br />
<br />
Attempts to acquire a RW spinlock for reading data. If successfully acquired, suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x740A0750<br />
|}<br />
<br />
Temp name was sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver, sceKernelCpuSpinLockIrqRestoreForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowReadLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryReadLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.<br />
<br />
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowReadUnlockCpuResumeIntrForDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source><br />
<br />
=== sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x4C38CE4D<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuLockSuspendIntrStoreFlagForDriver.<br />
<br />
Acquires a RW spinlock for writing data and suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @return An opaque value describing the interrupt state<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDE6482C6<br />
|}<br />
<br />
This is a guessed name. Temp name was sceKernelCpuTryLockSuspendIntrStoreFlagForDriver.<br />
<br />
Attempts to acquire a RW spinlock for writing data. If successfully acquired, suspends interrupts if necessary.<br />
<br />
<source lang="c"><br />
/**<br />
* @param pLock Pointer to the spinlock<br />
* @retval >=0 if the spinlock is acquired - opaque value describing the interrupt state<br />
* @retval <0 if the spinlock could not be acquired<br />
*/<br />
SceKernelIntrStatus sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver(SceKernelRWSpinlock *pRWLock);<br />
</source><br />
<br />
=== sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9EC91017<br />
|}<br />
<br />
Temp name was sceKernelCpuUnlockResumeIntrStoreFlagForDriver.<br />
<br />
Unlocks a RW spinlock previously acquired with either [[SceSysmem#sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowWriteLockCpuSuspendIntrForDriver]] or [[SceSysmem#sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver|sceKernelRWSpinlockLowTryWriteLockCpuSuspendIntrForDriver]], and resumes interrupts if necessary.<br />
<br />
If interrupts were disabled before acquiring the spinlock, they will remain disabled after this call.<br />
<br />
<source lang="c">void sceKernelRWSpinlockLowWriteUnlockCpuResumeIntrDriver(SceKernelRWSpinlock *pRWLock, SceKernelIntrStatus prev_state);</source><br />
<br />
== SceSysclibForKernel ==<br />
<br />
This library was removed on FW 1.80.<br />
<br />
=== __prnt ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-1.50 || 0xE38E7605<br />
|-<br />
| 1.80-3.60 || not present. Moved to ForDriver.<br />
|}<br />
<br />
This is a guessed name. from PSP.<br />
<br />
=== SceSysclibForKernel_F7E34376 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.50 || 0xF7E34376<br />
|}<br />
<br />
=== SceSysclibForKernel_FA746181 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-1.50 || 0xFA746181<br />
|}<br />
<br />
return a1 * (- 0x6e19295b) - 0x6e19295b;<br />
<br />
In SceSysmem, it is used internally to modify a global variable, like a multiplication hash function would do.<br />
<br />
<source lang="C">int SceSysclibForKernel_FA746181(int a1);</source><br />
<br />
== SceSysclibForDriver ==<br />
<br />
The C standard library for use in kernel only. Usermode has access to [[SceLibKernel]], which confusingly is usermode only.<br />
<br />
Includes standard string functions (no insecure variants like <code>strcpy</code>).<br />
<br />
=== memset2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.69 || 0x502B000D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sortof_vsnprintf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x589BAF6B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
=== sortof_vsnprintf_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x658EA38E<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
=== SceSysclibForDriver_33388DBC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x33388DBC<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calculates xor of a1 and a2, then does some calculation with a3.<br />
<br />
=== SceSysclibForDriver_72429909 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x72429909<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== SceSysclibForDriver_32373DF7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x32373DF7<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Helper for strtol in base 10.<br />
<br />
<source lang="C">int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);</source><br />
<br />
=== __aeabi_idiv ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2518CD9E<br />
|}<br />
<br />
=== __aeabi_idivmod ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAC86B4BA<br />
|}<br />
<br />
=== __aeabi_lcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x709077A1<br />
|}<br />
<br />
=== __aeabi_lmul ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFEE5E751<br />
|}<br />
<br />
=== __aeabi_uidiv ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA9FF1205<br />
|}<br />
<br />
=== __aeabi_uidivmod ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xA46CB7DE<br />
|}<br />
<br />
=== __aeabi_ldivmod ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7554AB04<br />
|}<br />
<br />
=== __aeabi_uldivmod ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9D148CDE<br />
|}<br />
<br />
Returns the 64-bit quotient of the division of dividend by divisor.<br />
<br />
Used for example to convert [[SceRtc]] ticks to a simpler format (divide by time unit in ms) or to compute the number of storage device blocks in [[SceSdstor]] (divide by block size).<br />
<br />
<source lang="C"><br />
// ex: __aeabi_uldivmod(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000, 0);<br />
SceUInt64 __aeabi_uldivmod(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);<br />
</source><br />
<br />
=== __aeabi_ulcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFE900DE8<br />
|}<br />
<br />
=== __aeabi_llsr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xE46C47E6<br />
|}<br />
<br />
=== __aeabi_llsl ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x72D31F9D<br />
|}<br />
<br />
=== __aeabi_lasr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1D89F6C0<br />
|}<br />
<br />
Temp name was rshift.<br />
<br />
=== __memcpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8A0B0815<br />
|}<br />
<br />
=== __memmove_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x35DBB110<br />
|}<br />
<br />
=== __memset_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1A30BB28<br />
|}<br />
<br />
=== __stack_chk_fail ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0xB997493D<br />
|}<br />
<br />
=== __stack_chk_guard ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x99EEBD1F<br />
|}<br />
<br />
This is a variable.<br />
<br />
=== __strlcat_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x224BE33F<br />
|}<br />
<br />
=== __strlcpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCF86EA38<br />
|}<br />
<br />
=== __strncat_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x33EE298B<br />
|}<br />
<br />
=== __strncpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x96268C53<br />
|}<br />
<br />
=== __snprintf_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7DBE7007<br />
|}<br />
<br />
=== __vsnprintf_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xCBF64DF6<br />
|}<br />
<br />
=== __prnt ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present. Present in ForKernel.<br />
|-<br />
| 3.60 || 0xE38E7605<br />
|}<br />
<br />
This is a guessed name. from PSP.<br />
<br />
<source lang="C">void __prnt(void (* cb)(void *argp, int ch), void *argp, const char *fmt, va_list list);</source><br />
<br />
Supported formats:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Format !! Description<br />
|-<br />
| \x20 || maybe space fill<br />
|-<br />
| # || unknown<br />
|-<br />
| * || unknown<br />
|-<br />
| - || Left align<br />
|-<br />
| + || unknown<br />
|-<br />
| . || unknown<br />
|-<br />
| 0 || Padding number and Enter zero padding<br />
|-<br />
| 1~9 || Padding number<br />
|-<br />
| D || unknown (maybe with long?)<br />
|-<br />
| L || unknown (maybe with long?)<br />
|-<br />
| O || unknown (maybe with long?)<br />
|-<br />
| U || unknown (maybe with long?)<br />
|-<br />
| X || print hex number as uppercase<br />
|-<br />
| c || print char<br />
|-<br />
| d || print decimal number<br />
|-<br />
| h || unknown<br />
|-<br />
| l || long<br />
|-<br />
| o || unknown<br />
|-<br />
| p || print pointer as lowercase<br />
|-<br />
| s || print strings<br />
|-<br />
| u || unsigned number<br />
|-<br />
| x || print hex number as lowercase<br />
|}<br />
<br />
=== vsnprintf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x3DDBE2E1<br />
|}<br />
<br />
<source lang="C">int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);</source><br />
<br />
=== get_ctype_table ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x0614B013<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== look_ctype_table ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCDF7F155<br />
|}<br />
<br />
<source lang="C"><br />
typedef enum SceCTypeFlag {<br />
SCE_CTYPE_NONE = 0,<br />
SCE_CTYPE_UPPERCASE = 1,<br />
SCE_CTYPE_LOWERCASE = 2,<br />
SCE_CTYPE_NUMBER = 4,<br />
SCE_CTYPE_CONTROL = 8,<br />
SCE_CTYPE_SYMBOL = 0x10,<br />
SCE_CTYPE_INVISIBLE = 0x20,<br />
SCE_CTYPE_HEX_CASE = 0x40<br />
} SceCTypeFlag;<br />
<br />
char look_ctype_table(char ch);<br />
</source><br />
<br />
=== memchr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x60DAEA30<br />
|}<br />
<br />
=== timingsafe_memcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB5A4D745<br />
|}<br />
<br />
timing constant memcmp<br />
<br />
=== memcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF939E83D<br />
|}<br />
<br />
=== memcpy ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x40C88316<br />
|}<br />
<br />
=== memmove ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0x6CC9C1A1<br />
|}<br />
<br />
On FW 1.69, this seems to be implemented incorrectly.<br />
<br />
=== memset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x0AB9BF5C<br />
|}<br />
<br />
=== snprintf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xAE7A8981<br />
|}<br />
<br />
=== strchr ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.50-3.60 || 0x38463759<br />
|}<br />
<br />
=== strcmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x0B33BC43<br />
|}<br />
<br />
=== strlcat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x12504E09<br />
|}<br />
<br />
=== strlcpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7FB4EBEC<br />
|}<br />
<br />
=== strlen ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xCFC6A9AC<br />
|}<br />
<br />
=== strncat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xA1D1C32C<br />
|}<br />
<br />
<source lang="C">char *strncat(char *s1, const char *s2, size_t n);</source><br />
<br />
=== strncmp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x12CEE649<br />
|}<br />
<br />
<source lang="C">int strncmp(const char *s0, const char *s1, int n);</source><br />
<br />
=== strncpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6D286146<br />
|}<br />
<br />
=== strncpy_s ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.60 || 0xFE39AEAC<br />
|}<br />
<br />
=== strnlen ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xCD4BD884<br />
|}<br />
<br />
=== strrchr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x7F0E0835<br />
|}<br />
<br />
=== strstr ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1304A69D<br />
|}<br />
<br />
=== strtol ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xAB77C5AA<br />
|}<br />
<br />
=== strtoll ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x87AAAFA2<br />
|}<br />
<br />
=== strtoul ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4E5042DA<br />
|}<br />
<br />
=== tolower ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0021DAF9<br />
|}<br />
<br />
<source lang="C">char tolower(char ch);</source><br />
<br />
=== toupper ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA685DCB1<br />
|}<br />
<br />
<source lang="C">char toupper(char ch);</source><br />
<br />
=== __strcpy_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x545DA5FD<br />
|}<br />
<br />
Copy a string, with buffer overflow checking.<br />
<br />
<source lang="C">char * __strcpy_chk(char * dest, const char * src, size_t destlen);</source><br />
<br />
=== __strcat_chk ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xDE4666F0<br />
|}<br />
<br />
Concatenate two strings, with buffer overflow checking.<br />
<br />
<source lang="C">char *__strcat_chk(char *dest, const char *src, SceSize destlen);</source><br />
<br />
== SceSysrootForKernel ==<br />
<br />
=== sceKernelSysrootSWBkptGetOriginalOpcodeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9CFF80F9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[#sceKernelSysrootSWBkptGetOriginalOpcodeForDriver]].<br />
<br />
=== sceKernelSysrootSetGetPrxDebugFlagFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-2.060.011 || 0xE635DFCC<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the function called by [[#sceKernelSysrootGetPrxDebugFlagForKernel]] which is also the fallback function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].<br />
<br />
This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_26458702]].<br />
<br />
<source lang="C">int sceKernelSysrootSetGetPrxDebugFlagFuncForKernel(void *func);</source>3999F917<br />
<br />
=== sceKernelSysrootGetPrxDebugFlagForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x73522F65<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetGetPrxDebugFlagFuncForKernel]] on System Software version < 2.100.081 and by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]] on System Software version >= 2.100.081.<br />
<br />
<source lang="C">int sceKernelSysrootGetPrxDebugFlagForKernel(SceUID pid, SceUInt32 *pFlag);</source><br />
<br />
=== SceSysrootForKernel_5E7ECC37 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-2.060.011 || 0x5E7ECC37<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_5C86E49B]].<br />
<br />
This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].<br />
<br />
<source lang="C">int SceSysrootForKernel_5E7ECC37(void *func);</source><br />
<br />
=== SceSysrootForKernel_5C86E49B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x5C86E49B<br />
|}<br />
<br />
Calls the handler stored in SceSysrootDbgpHandler at offset 0x10 and registered by [[#SceSysrootForKernel_5E7ECC37]] or [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].<br />
<br />
=== sceKernelSysrootSetProcessDebugSuspendFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.010.031 || 0x4337841F<br />
|-<br />
| 3.10-3.740.011 || 0x4337841F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the function called by [[#sceKernelSysrootProcessDebugSuspendForKernel]].<br />
<br />
This function has been removed since System Software version 3.10 because its feature is already provided by [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
<source lang="C">int sceKernelSysrootSetProcessDebugSuspendFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootProcessDebugSuspendForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x1247A825<br />
|}<br />
<br />
This is a guessed name. Official name might be as well sceKernelProcessDebugSuspendForKernel.<br />
<br />
Calls the function registered by either [[#sceKernelSysrootSetProcessDebugSuspendFuncForKernel]] or [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
<source lang="C">int sceKernelSysrootProcessDebugSuspendForKernel(SceUID pid, int status);</source><br />
<br />
=== SceSysrootForKernel_150DBA2B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.360.011 || 0x150DBA2B<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
=== SceSysrootForKernel_273EAE53 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.360.011 || 0x273EAE53<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
=== sceKernelSysrootIsKernelProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.360.011 || 0xE0FC42C3<br />
|-<br />
| 3.500.011-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceBool sceKernelSysrootIsKernelProcessForKernel(void);</source><br />
<br />
=== sceKernelSysrootRegisterKPLSForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-1.70 || 0x23BEAF6B<br />
|-<br />
| 1.800.071-3.740.011 || not present<br />
|}<br />
<br />
=== SceSysrootForKernel_571E5B79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x571E5B79<br />
|}<br />
<br />
See [[#SceSysrootForDriver_571E5B79]].<br />
<br />
=== sceKernelSysrootRegisterDbgpHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x3999F917<br />
|}<br />
<br />
Registers a debug process handler.<br />
<br />
<source lang="C">int sceKernelSysrootRegisterDbgpHandlerForKernel(SceSysrootDbgpHandler *handler);</source><br />
<br />
=== SceSysrootForKernel_611F17A4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x611F17A4<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_118657C6]].<br />
<br />
<source lang="C">int SceSysrootForKernel_611F17A4(void *func);</source><br />
<br />
=== SceSysrootForKernel_118657C6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x118657C6<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForKernel_611F17A4]].<br />
<br />
Used in [[SceExcpmgr]].<br />
<br />
<source lang="C">SceKernelMMUContext* SceSysrootForKernel_118657C6(void);</source><br />
<br />
=== SceSysrootForKernel_081F2C20 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 1.60-1.69 || 0x081F2C20<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Registers sceKernelGetProcessId_2 from [[SceKernelThreadMgr]].<br />
<br />
<source lang="C">int SceSysrootForKernel_081F2C20(void *func);</source><br />
<br />
=== SceSysrootForKernel_C5EAF5F7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC5EAF5F7<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_47724459]].<br />
<br />
<source lang="C">int SceSysrootForKernel_C5EAF5F7(void *func);</source><br />
<br />
=== SceSysrootForKernel_47724459 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x47724459<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForKernel_C5EAF5F7]].<br />
<br />
=== SceSysrootForKernel_8747D415 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8747D415<br />
|}<br />
<br />
Registers the function used by [[#SceSysrootForKernel_B27B7530]].<br />
<br />
<source lang="C">int SceSysrootForKernel_8747D415(void *func);</source><br />
<br />
=== SceSysrootForKernel_B27B7530 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB27B7530<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForKernel_8747D415]].<br />
<br />
Used by [[SceKernelBusError]].<br />
<br />
=== SceSysrootForKernel_82FC6405 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x82FC6405<br />
|}<br />
<br />
Registers the function used by [[#SceSysrootForKernel_CD4B84F7]].<br />
<br />
Used by [[SceKernelBusError]].<br />
<br />
<source lang="C">int SceSysrootForKernel_82FC6405(void *func);</source><br />
<br />
=== SceSysrootForKernel_CD4B84F7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCD4B84F7<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForKernel_82FC6405]].<br />
<br />
Used by [[SceKernelBusError]].<br />
<br />
=== SceSysrootForKernel_733C243E ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x733C243E<br />
|}<br />
<br />
Registers many Sysroot [[SceProcessmgr]] callbacks.<br />
<br />
<source lang="C">int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);</source><br />
<br />
=== SceSysrootForKernel_7334F1E8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7334F1E8<br />
|}<br />
<br />
Calls [[SceProcessmgr#SceProcessmgrForKernel_C77C2085]] function registered by [[#SceSysrootForKernel_733C243E]].<br />
<br />
<source lang="C">int SceSysrootForKernel_7334F1E8(SceUID pid);</source><br />
<br />
=== SceSysrootForKernel_D29BCA77 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xD29BCA77<br />
|}<br />
<br />
Registers many Sysroot [[SceProcessmgr]] callbacks.<br />
<br />
<source lang="C">int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);</source><br />
<br />
=== SceSysrootForKernel_DD7821AA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xDD7821AA<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_340575CB]].<br />
<br />
<source lang="C">int SceSysrootForKernel_DD7821AA(void *func);</source><br />
<br />
=== SceSysrootForKernel_340575CB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x340575CB<br />
|}<br />
<br />
Return some PID.<br />
<br />
<source lang="C">SceUID SceSysrootForKernel_340575CB(void);</source><br />
<br />
=== sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xBE1EF51C<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootCheckRemapCodeForUserForKernel]].<br />
<br />
<source lang="C">int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootCheckRemapCodeForUserForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF8769E86<br />
|}<br />
<br />
=== sceKernelSysrootAllocCurrentProcessHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2F75C1DC<br />
|}<br />
<br />
<source lang="C">void *sceKernelSysrootAllocCurrentProcessHeapForKernel(SceSize size);</source><br />
<br />
=== sceKernelSysrootCorelockUnlockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xAE55B7CC<br />
|}<br />
<br />
Calls [[#SceCpuForKernel_A5C9DBBA]].<br />
<br />
<source lang="C">void sceKernelSysrootCorelockUnlockForKernel(void);</source><br />
<br />
=== SceSysrootForKernel_21F5790B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x21F5790B<br />
|}<br />
<br />
Registers a function related to kernel panic.<br />
<br />
<source lang="C">int SceSysrootForKernel_21F5790B(void *func);</source><br />
<br />
=== SceSysrootForKernel_0DF574A9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x0DF574A9<br />
|}<br />
<br />
Calls the function related to kernel panic registered by [[#SceSysrootForKernel_21F5790B]].<br />
<br />
<source lang="C">int SceSysrootForKernel_0DF574A9(void);</source><br />
<br />
=== SceSysrootForKernel_2D6B2A79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2D6B2A79<br />
|}<br />
<br />
Registers a function related to kernel panic, called by [[#SceSysrootForKernel_CC7A0E63]].<br />
<br />
=== SceSysrootForKernel_CC7A0E63 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCC7A0E63<br />
|}<br />
<br />
Calls a function related to kernel panic, registered by [[#SceSysrootForKernel_2D6B2A79]].<br />
<br />
<source lang="C"><br />
// type: 1: kernel_assertion_or_panic, 3: kernel_exception<br />
// size: must be <= 0x1000<br />
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2<br />
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);<br />
</source><br />
<br />
=== SceSysrootForKernel_1D84C4D4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x1D84C4D4<br />
|}<br />
<br />
Get module name, fingerprint and base from address.<br />
<br />
<source lang="C">int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);</source><br />
<br />
=== SceSysrootForKernel_5B5EBFB1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x5B5EBFB1<br />
|}<br />
<br />
Registers pointer to SceLT5 used by [[#SceSysrootForKernel_E20F6FC8]].<br />
<br />
<source lang="C">int SceSysrootForKernel_5B5EBFB1(uint a1);</source><br />
<br />
=== SceSysrootForKernel_41636522 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x41636522<br />
|}<br />
<br />
Returns current SceLT5 value pointed by pointer registered using [[#SceSysrootForKernel_E20F6FC8]]. Long/low (64bit) time in microseconds. It is about "awake" uptime from system boot.<br />
<br />
<source lang="C">uint64_t SceSysrootForKernel_41636522(void);</source><br />
<br />
=== SceSysrootForKernel_E20F6FC8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xE20F6FC8<br />
|}<br />
<br />
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".<br />
<br />
Used by SceDebug Kernel Exceptions handlers.<br />
<br />
<source lang="C">uint64_t SceSysrootForKernel_E20F6FC8(void);</source><br />
<br />
=== SceSysrootForKernel_1D8DB3A5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x1D8DB3A5<br />
|}<br />
<br />
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".<br />
<br />
Returns 0 on success, 0x80020006 if pTime is a NULL pointer.<br />
<br />
<source lang="C">int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);</source><br />
<br />
=== sceKernelSysrootCorelockLockForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8E4B61F1<br />
|}<br />
<br />
Calls [[#SceCpuForKernel_9D72DD1B]].<br />
<br />
<source lang="C">int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);</source><br />
<br />
=== SceSysrootForKernel_06182D59 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x06182D59<br />
|}<br />
<br />
Reimplementation:<br />
<source lang="C"><br />
int SceSysrootForKernel_06182D59(int idx) {<br />
return *(uint32_t *)(pSysroot + 0x20) + (idx << 0x5);<br />
}<br />
</source><br />
<br />
<source lang="C">int SceSysrootForKernel_06182D59(int idx);</source><br />
<br />
=== SceSysrootForKernel_7385CADE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x7385CADE<br />
|}<br />
<br />
Get current syscall's PID.<br />
<br />
<source lang="C"><br />
// Returns KERNEL_PID if the function has not been set<br />
SceUID SceSysrootForKernel_7385CADE(void);<br />
</source><br />
<br />
=== SceSysrootForKernel_D441DC34 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0xD441DC34<br />
|}<br />
<br />
Calls a callback registered by [[#SceSysrootForKernel_26458702]], related to syscall frame printing on kernel panic.<br />
<br />
=== sceKernelSysrootGetSysrootClassItemsizeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xEEB867C0<br />
|}<br />
<br />
This is a guessed name. Derived from get_SceKernelSysrootClass_itemsize.<br />
<br />
On System Software version 0.990, returns hardcoded value 0x470.<br />
<br />
On System Software version 3.200.010, returns hardcoded value 0x440.<br />
<br />
On System Software version 3.600.011, returns hardcoded value 0x41C.<br />
<br />
<source lang="C">SceSize sceKernelSysrootGetSysrootClassItemsizeForKernel(void);</source><br />
<br />
=== sceKernelGetSysrootClassObjectForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x085C2BCB<br />
|}<br />
<br />
This is a guessed name. Derived from get_SceKernelSysrootClass_object.<br />
<br />
<source lang="C">SceKernelObject *sceKernelGetSysrootClassObjectForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetLibraryDBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xCD70C9D7<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(0x10005)]] in 3.60<br />
<br />
<source lang="C"><br />
// size is 0x34-bytes on FW 2.00<br />
void *sceKernelSysrootGetLibraryDBForKernel(void *pSysroot);<br />
</source><br />
<br />
=== sceKernelSysrootSetLibraryDBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xCB58A0F4<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Maybe sets a pointer to the library stub structure. See [[Modules]].<br />
<br />
<source lang="C"><br />
// size is 0x34-bytes on FW 2.00<br />
int sceKernelSysrootSetLibraryDBForKernel(void *pSysroot, void *pLibDb);<br />
</source><br />
<br />
=== sceKernelSysrootGetProcessLibraryDBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xF1037820<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Equivalent to [[SceProcessmgr#sceKernelGetProcessLibdbForKernel|sceKernelGetProcessLibdbForKernel(pid)]] in System Software version 3.600.011.<br />
<br />
The return value of this function is an integer on error, but returns a pointer to LibraryDB on success.<br />
<br />
<source lang="C"><br />
// size is 0x34-bytes on FW 2.00<br />
int sceKernelSysrootGetProcessLibraryDBForKernel(SceUID pid);<br />
</source><br />
<br />
=== sceKernelSysrootAllocForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || 0xB0149E69<br />
|-<br />
| 3.500.011-3.740.011 || Not present<br />
|}<br />
<br />
Allocates memory from the "Sysroot heap". The Sysroot heap is located after <code>SceSysroot</code> structure and consumes the rest of the page. Allocations from this "heap" are permanent and cannot be returned - there is no <code>sceKernelSysrootFreeForKernel</code>.<br />
<br />
Usage of this function is not recommended because of the lack of a "free" function. Use [[SceSysmem#sceKernelAllocForKernel]] instead.<br />
<br />
<source lang="C">void *sceKernelSysrootAllocForKernel(SceSize size);</source><br />
<br />
=== sceKernelSysrootSetStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xA84676E3<br />
|}<br />
<br />
{| class="wikitable"<br />
|-<br />
! status !! description<br />
|-<br />
| 3 || Global malloc heap initialization completed.<br />
|-<br />
| 4 || Start initialization for load the module<br />
|-<br />
| 0x10 || Initialization to load the module is complete<br />
|-<br />
| 0x100 || First process create<br />
|-<br />
| 0x1000 || Kernel boot completed.<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetStatusForKernel(SceUInt32 status);</source><br />
<br />
=== sceKernelSysrootGetProcessCBExitDeleteThreadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xBBFD2E3C<br />
|}<br />
<br />
=== sceKernelSysrootGetCurrentProcessCBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9991B1AF<br />
|}<br />
<br />
=== sceKernelSysrootGetCurrentThreadAttrForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x73601453<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);</source><br />
<br />
=== sceKernelSysrootGetCurrentTimeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || 0x4FCFA359<br />
|}<br />
<br />
<source lang="C">SceRtcTick *sceKernelSysrootGetCurrentTimeForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSystemTimeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.692.000 || 0xE0D41319<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)</source><br />
<br />
=== sceKernelSysrootGetSystemTimeLowForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.692.000 || 0x2464329D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetSystemTimeLowForKernel(void);</source><br />
<br />
=== sceKernelSysrootAssertSysrootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.692.000 || 0x1B7F150F<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).<br />
<br />
<source lang="C">int sceKernelSysrootAssertSysrootForKernel(void *sysroot);</source><br />
<br />
=== sceKernelSysrootSetVbaseResetVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x0F2F2B4E<br />
|}<br />
<br />
=== sceKernelSysrootThreadMgrStartAfterProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x0EB5D7CD<br />
|}<br />
<br />
=== sceKernelSysrootGetCurrentProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.996.090 || 0x5B7570C5<br />
|}<br />
<br />
Return the current process id.<br />
<br />
<source lang="C">SceUID sceKernelSysrootGetCurrentProcessForKernel(void);</source><br />
<br />
=== sceKernelSysrootTrapThreadAfterSyscallForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x9139E22B<br />
|}<br />
<br />
Calls a callback registered by [[#SceSysrootForKernel_26458702]].<br />
<br />
Prints syscall_critical_usage.<br />
<br />
=== sceKernelSysrootReturnFromExcpToThreadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xDADFF828<br />
|}<br />
<br />
Used in [[SceExcpmgr]].<br />
<br />
<source lang="C">int sceKernelSysrootReturnFromExcpToThreadForKernel(void);</source><br />
<br />
=== sceKernelSysrootBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xCC893F37<br />
|}<br />
<br />
See also [[SceKernelModulemgr#SceBacktraceForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);</source><br />
<br />
=== sceKernelSysrootPrintBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x491CE8DF<br />
|}<br />
<br />
See also [[SceKernelModulemgr#SceBacktraceForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);</source><br />
<br />
=== sceKernelSysrootRegisterBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.010.031 || 0x1C307A31<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="c">int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());</source><br />
<br />
=== sceKernelSysrootGetSharedMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xC8C8C321<br />
|}<br />
<br />
=== sceKernelSysrootSetSharedMemoryForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xFBB91741<br />
|}<br />
<br />
=== sceKernelSysrootGetUIDEntryHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x88DE85EF<br />
|}<br />
<br />
Temp name was sceKernelSysrootGetPUIDEntryHeapForKernel.<br />
<br />
Gets the UID Entry Heap of the process.<br />
<br />
Kernel process's UID entry heap is the GUIDEntryHeap. All other process' UID entry heaps are PUID heaps.<br />
<br />
<source lang="C">int sceKernelSysrootGetUIDEntryHeapForKernel(SceUID pid, void **entryHeap);</source><br />
<br />
=== sceKernelSysrootGetStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x5C426B19<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetStatusForKernel(void);</source><br />
<br />
=== sceKernelSysrootIofilemgrStartForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF6A6D205<br />
|}<br />
<br />
=== SceSysrootForKernel_F9FB9A2A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-2.060.011 || 0xF9FB9A2A<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].<br />
<br />
This function has been removed since System Software 2.100.081 because its feature was moved to [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
<source lang="C">int SceSysrootForKernel_F9FB9A2A(void *func);</source><br />
<br />
=== sceKernelSysrootGetCurrentAddressSpaceCBForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0x63EBB05B<br />
|}<br />
<br />
Gets the current Address Space's control block via TPIDRPRW.<br />
<br />
This function calls a callback registered by [[#SceSysrootForKernel_F9FB9A2A]] on System Software version < 2.10 and by [[#SceSysrootForKernel_D29BCA77]] on System Software version >= 2.10, if it was registered, else a fallback callback. The fallback callback is registered by [[#SceSysrootForKernel_E635DFCC]] on System Software version < 2.10 and by [[#SceSysrootForKernel_26458702]] on System Software version >= 2.10.<br />
<br />
<source lang="C">SceUIDAddressSpaceObject *sceKernelSysrootGetCurrentAddressSpaceCBForKernel(void);</source><br />
<br />
=== SceSysrootForKernel_BF82931F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0xBF82931F<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_2BE874EF]].<br />
<br />
No usage seen on CEX OS. Maybe used in DEX/TOOL OS.<br />
<br />
<source lang="C">int SceSysrootForKernel_BF82931F(int maybe_app_id, void *pOut);</source><br />
<br />
=== SceSysrootForKernel_6D111FA7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x6D111FA7<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_3B19B06B]].<br />
<br />
Used only in [[SceCoredump]].<br />
<br />
<source lang="C">int SceSysrootForKernel_6D111FA7(int maybe_app_id, void *pOut);</source><br />
<br />
=== SceSysrootForKernel_2A03DFA1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2A03DFA1<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_70AD47A9]].<br />
<br />
Used only in [[SceCoredump]].<br />
<br />
<source lang="C"><br />
// pOut: A buffer of at least 0xF8 bytes<br />
int SceSysrootForKernel_2A03DFA1(void *pOut);<br />
</source><br />
<br />
=== sceKernelSysrootAppMgrSpawnProcessForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3ACACD22<br />
|}<br />
<br />
=== sceKernelSysrootGetCachedSecureModuleInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF10AB792<br />
|}<br />
<br />
Temp name was sceKernelSysrootGetSmSelfInfoForKernel.<br />
<br />
{| class="wikitable"<br />
! Index !! SM SELF location<br />
|-<br />
| 0 || os0:sm/gcauthmgr_sm.self<br />
|-<br />
| 1 || os0:sm/rmauth_sm.self<br />
|-<br />
| 2 || os0:sm/encdec_w_portability_sm.self<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootGetCachedSecureModuleForKernel(SceCachedSecureModule id, SceCachedSecureModuleInfo *pInfo);</source><br />
<br />
=== sceKernelSysrootGetProcessSelfAuthInfoForKernel ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x4F0A4066<br />
|}<br />
<br />
Temp name was sceSysrootGetSelfAuthInfoForKernel.<br />
<br />
<source lang="C">int sceKernelSysrootGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *pSelfAuthInfo);</source><br />
<br />
=== sceKernelSysrootGetProcessTitleIdForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEC3124A3<br />
|}<br />
<br />
Temp name was sceSysrootGetProcessTitleIdForPidForKernel.<br />
<br />
<source lang="C">int sceKernelSysrootGetProcessTitleIdForKernel(SceUID pid, char *title_id, SceSize len);</source><br />
<br />
=== sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xB39CD708<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootGetFunctionNameByNIDForKernel]].<br />
<br />
<source lang="c">int sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootGetFunctionNameByNIDForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x0B79E220<br />
|}<br />
<br />
Mirror of [[SceSysLibTrace#sceNidsymtblGetFunctionNameByNIDForDriver]].<br />
<br />
<source lang="c">int sceKernelSysrootGetFunctionNameByNIDForKernel(SceNID funcnid, const char **name);</source><br />
<br />
=== SceSysrootForKernel_26458702 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x26458702<br />
|}<br />
<br />
Registers some callbacks for example the fallback callback called by [[#sceKernelSysrootGetCurrentAddressSpaceCBForKernel]].<br />
<br />
=== SceSysrootForKernel_B171CC2D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xB171CC2D<br />
|}<br />
<br />
Register some ModuleMgr handlers.<br />
<br />
Used by [[SceKernelModulemgr]].<br />
<br />
<source lang="C">int SceSysrootForKernel_B171CC2D(SceSysrootModulemgrHandlers *pHandlers);</source><br />
<br />
=== sceKernelSysrootGetProcessSyscallInfoForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFF9F80FF<br />
|}<br />
<br />
<source lang="c">int sceKernelSysrootGetProcessSyscallInfoForKernel(SceUID pid, const void *PC, SceSyscallInfo *pInfo);</source><br />
<br />
=== sceKernelSysrootGetVbaseResetVectorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCC85905B<br />
|}<br />
<br />
Returns the exception vectors base address. The address of the exception vectors for the CPU <code>i</code> is: <code>sceKernelSysrootGetVbaseResetVectorForKernel() + 0x40 * i</code>.<br />
<br />
<source lang="C">void *sceKernelSysrootGetVbaseResetVectorForKernel(void);</source><br />
<br />
=== sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x71DB83A2<br />
|}<br />
<br />
Registers [[SceSblPostSsMgr#sceSblLicMgrGetLicenseStatusForDriver]].<br />
<br />
<source lang="c">int sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel(int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)());</source><br />
<br />
=== sceKernelSysrootLicMgrGetLicenseStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x377895EB<br />
|}<br />
<br />
Called by [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel|sceSblAuthMgrAuthHeaderForKernel]] before Cmep request.<br />
<br />
<source lang="C">int sceKernelSysrootLicMgrGetLicenseStatusForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSysrootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x3E455842<br />
|}<br />
<br />
Temp name was sceKernelGetSysbaseForKernel.<br />
<br />
Returns pointer to SceUIDSysrootObject in SceSysmem.<br />
<br />
<source lang="C">SceUIDSysrootObject *sceKernelSysrootGetSysrootForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetKblParamForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x9DB56D1F<br />
|}<br />
<br />
Temp name was sceKernelGetSysrootBufferForKernel, sceSysrootGetSysrootBufferForKernel.<br />
<br />
Returns pointer to [[KBL Param]].<br />
<br />
<source lang="C">SceKblParam *sceKernelSysrootGetKblParamForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSoCRevisionForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xD3872270<br />
|}<br />
<br />
return pSysroot->soc_revision;<br />
<br />
<source lang="C">int sceKernelSysrootGetSoCRevisionForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetPervasiveUnkDwordForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xFFD6E24D<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns value initially read from physical address 0xE3100004 (ScePervasiveMisc + 0x4).<br />
<br />
return pSysroot->pervasive_unk_dword;<br />
<br />
<source lang="C">int sceKernelSysrootGetPervasiveUnkDwordForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetKermitRevisionForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x403B509E<br />
|}<br />
<br />
return pSysroot->kermit_revision;<br />
<br />
Used by [[SceKernelBusError]], [[SceSysStateMgr]].<br />
<br />
<source lang="C"><br />
// Return value is 0x1FFFF-masked, at least on recent System Software versions.<br />
SceUInt32 sceKernelSysrootGetKermitRevisionForKernel(void);<br />
</source><br />
<br />
=== sceKernelSysrootGetErnieSleepFactorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0xAB3CC7D0<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[KBL Param#Sleep Factor]].<br />
<br />
return kbl_param->sleep_factor;<br />
<br />
<source lang="C">int sceKernelSysrootGetErnieSleepFactorForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetErnieWakeupFactorForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2F97041A<br />
|}<br />
<br />
This is the official name. Temp name was sceSysrootGetWakeupFactorForKernel.<br />
<br />
See [[KBL Param#Wakeup Factor]].<br />
<br />
return kbl_param->wakeup_factor;<br />
<br />
<source lang="C">int sceKernelSysrootGetErnieWakeupFactorForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetSessionIdForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.740.011 || 0x84783B71<br />
|}<br />
<br />
Writes kbl_param->session_id to buffer.<br />
<br />
pSessionId buffer size is 0x10 bytes.<br />
<br />
<source lang="C">int sceKernelSysrootGetSessionIdForKernel(char *pSessionId);</source><br />
<br />
=== sceKernelSysrootIsExternalBootModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x89D19090<br />
|}<br />
<br />
return *(int *)(kbl_param->boot_type_indicator_1) & 1;<br />
<br />
<source lang="C">int sceKernelSysrootIsExternalBootModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsSomeBootModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x7B7F8171<br />
|}<br />
<br />
This is a guessed name. A possible name is sceKernelIsAllowSdCardFromMgmt.<br />
<br />
Used by [[SceSdif]], [[SceExfatfs]].<br />
<br />
[[SceExfatfs]] will mount sd0: instead of gro0:/grw0: when this function returns SCE_TRUE.<br />
<br />
return (*(int *)(kbl_param->boot_type_indicator_1) >> 19) & 1;<br />
<br />
Returns true if boot_type_indicator_1 has flag 0x80000 ?sd mode? - (Mgmt bit 1)<br />
<br />
<source lang="C">int sceKernelSysrootIsSomeBootModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsExternalBootMode2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x7918D44E<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootIsSomeBootMode2ForKernel. A possible name is sceKernelIsAllowFwCheckSkip.<br />
<br />
return kbl_param->boot_type_indicator_1[2] & 1;<br />
<br />
Return true if boot_type_indicator_1 has flag 0x10000 but it seems to be never set in external (release) second_loader. It allows to bypass current fw version check for module loading.<br />
<br />
<source lang="C">int sceKernelSysrootIsExternalBootMode2ForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUartModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xAE7A8F1D<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootIsSomeModeForKernel.<br />
<br />
Returns true if (kbl_param->boot_flags[1] != 0xFF).<br />
<br />
Used to check if UART must be initialized or not.<br />
<br />
<source lang="C">int sceKernelSysrootIsUartModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsSafeModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x834439A7<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsSafeModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUpdateModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xB0E1FC67<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsUpdateModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsBsodRebootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4373AC96<br />
|}<br />
<br />
return ((pKblParam->wakeup_factor) & 0x7Fu) == 0x17;<br />
<br />
<source lang="C">int sceKernelSysrootIsBsodRebootForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUsbEnumWakeupForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x79C9AE10<br />
|}<br />
<br />
<source lang="C"><br />
if ( *(int *)(kbl_param->unk_C0) & 0x90000 )<br />
return 1;<br />
else<br />
return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) == 0xF;<br />
</source><br />
<br />
<source lang="C">int sceKernelSysrootIsUsbEnumWakeupForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsUnknownRebootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE4EA1960<br />
|}<br />
<br />
return (*(int *)(kbl_param->wakeup_factor) & 0x7Fu) <= 1;<br />
<br />
<source lang="C">int sceKernelSysrootIsUnknownRebootForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsManufacturingModeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0x55392965<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootUseExternalStorageForKernel.<br />
<br />
When returns true it allows loading sd0:psp2config.skprx.<br />
<br />
Returns true when Manufacturing Mode flag is set:<br />
<br />
return (*(int *)(kbl_param->boot_type_indicator_1) >> 2) & 1;<br />
<br />
<source lang="C">int sceKernelSysrootIsManufacturingModeForKernel(void);</source><br />
<br />
=== sceKernelSysrootUseInternalStorageForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x50FE3B4D<br />
|}<br />
<br />
Returns true when use internal storage flag is not set:<br />
<br />
return *(char *)(kbl_param->boot_flags[5]) & 1 ^ 1;<br />
<br />
<source lang="C">int sceKernelSysrootUseInternalStorageForKernel(void);</source><br />
<br />
=== sceKernelSysrootGetThreadAccessLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x20009397<br />
|}<br />
<br />
Calls int (__cdecl *GetThreadAccessLevel)(); // 0x344 on 3.60<br />
<br />
<source lang="c">int sceKernelSysrootGetThreadAccessLevelForKernel(void);</source><br />
<br />
=== sceKernelSysrootAllocRemoteProcessHeapForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD351EBC8<br />
|}<br />
<br />
Temp name was sceKernelAllocHeapMemoryForKernel.<br />
<br />
Same as <code>sceKernelAllocHeapMemoryWithOptForDriver</code> but does set <code>pid</code> to 0x1000B.<br />
<br />
Checks that pid is 0x10013 or 0x10005 (kernel).<br />
<br />
<source lang="C">void* sceKernelSysrootAllocRemoteProcessHeapForKernel(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source><br />
<br />
=== sceKernelSysrootGetModulePrivateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x37EC12BB<br />
|}<br />
<br />
data : 3: system memory (0xDC-bytes), 7: some process data (?-bytes), 9: kbl module cb (0xAC-bytes)<br />
<br />
<source lang="C">void *sceKernelSysrootGetModulePrivateForKernel(int idx);</source><br />
<br />
=== sceKernelSysrootSetModulePrivateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x7A7E7C0C<br />
|}<br />
<br />
<source lang="C">void sceKernelSysrootSetModulePrivateForKernel(int idx, void *data);</source><br />
<br />
=== sceKernelSysrootSetSysrootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x36916C30<br />
|}<br />
<br />
<source lang="C">void sceKernelSysrootSetSysrootForKernel(SceUID sysroot_uid);</source><br />
<br />
=== sceKernelSysrootProcessmgrStart2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.011-3.740.011 || 0x62E8F511<br />
|}<br />
<br />
=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.740.011 || 0x256B2394<br />
|}<br />
<br />
<source lang="C">sceKernelSysrootDbgpSuspendProcessAndWaitResumeForKernel(SceUID pid, SceUID modid, SceUInt32 stopReason, SceUInt64 time);</source><br />
<br />
=== sceKernelSysrootSetIsUserModeThreadFuncForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || 0x5BD911A8<br />
|-<br />
| 2.100.081-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
This function has been removed since System Software version 2.100.081 because its feature is now provided by [[#sceKernelSysrootRegisterDbgpHandlerForKernel]].<br />
<br />
<source lang="C">int sceKernelSysrootSetIsUserModeThreadFuncForKernel(void *func);</source><br />
<br />
=== sceKernelSysrootIsUserModeThreadForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.011-3.740.011 || 0x7FC7A163<br />
|}<br />
<br />
=== sceKernelSysrootGetSecureStatusForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x0A63CA5E<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
return *(uint *)some_buf->field_0x28 & 1;<br />
<br />
<source lang="C">int sceKernelSysrootGetSecureStatusForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsSecureStateForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0x3193DAB2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
return (*(uint *)some_buf->field_0x28 ^ 1) & 1;<br />
<br />
<source lang="C">SceBool sceKernelSysrootIsSecureStateForKernel(void);</source><br />
<br />
=== sceKernelSysrootIsColdBootForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xD7198963<br />
|}<br />
<br />
return (*(uint *)some_buf->field_0x28 & 10; // FW 3.60 in IDA PRO<br />
<br />
return ((*(uint *)some_buf->field_0x28 ^ 0x10) << 0x1b) >> 0x1f; // FW 0.940 in Ghidra<br />
<br />
<source lang="C">int sceKernelSysrootIsColdBootForKernel(void);</source><br />
<br />
== SceSysrootForDriver ==<br />
<br />
=== SceSysrootForDriver_6219CC14 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x6219CC14<br />
|}<br />
<br />
Used in [[SceUlobjMgr#SceUlobjMgrForDriver_332F2E58]].<br />
<br />
<source lang="C">int SceSysrootForDriver_6219CC14(int a1, int a2, int a3, int a4, int a5);</source><br />
<br />
=== SceSysrootForDriver_F804F761 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xF804F761<br />
|}<br />
<br />
Official name might be sceKernelSysrootHasSDCardSupportForDriver.<br />
<br />
This function always returns <code>SCE_FALSE</code> on some release System Software versions, for example 3.500.000 and 3.600.011.<br />
<br />
Used in [[SceSdstor]] and [[SceVshBridge#vshSdGetCardInfo]].<br />
<br />
If this function returns <code>SCE_TRUE</code>, then <code>[[SceSdif#get_sd_context_part_validate_sd]](1)</code> is called.<br />
<br />
<source lang="C">SceBool SceSysrootForDriver_F804F761(void);</source><br />
<br />
=== sceKernelSysrootSetVipRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA6A0A038<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootSetVipRpcDebugFuncForDriver(SceKernelSysrootVipRpcDebugFunc func);</source><br />
<br />
=== sceKernelSysrootClearVipRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0ECD711E<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootClearVipRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelSysrootGetVipRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x483EF108<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelSysrootVipRpcDebugFunc sceKernelSysrootGetVipRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelSysrootSetVeneziaRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x47F19DD3<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootSetVeneziaRpcDebugFuncForDriver(SceKernelSysrootVeneziaRpcDebugFunc func);</source><br />
<br />
=== sceKernelSysrootClearVeneziaRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5B106EB3<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">void sceKernelSysrootClearVeneziaRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelSysrootGetVeneziaRpcDebugFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x49843C16<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">SceKernelSysrootVeneziaRpcDebugFunc sceKernelSysrootGetVeneziaRpcDebugFuncForDriver();</source><br />
<br />
=== sceKernelApiDeclareErrorMsgForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x8CD02748<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeRawForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x8A760856<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeInt32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0xD86BD6DC<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeUInt32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x6E0BC27C<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeInt64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.65 || 0x08B8F1D0<br />
|}<br />
<br />
=== sceKernelApiDeclareTypeUInt64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60-3.65 || 0x2A5DBD38<br />
|}<br />
<br />
Sets a value to 3.<br />
<br />
<source lang="C">void sceKernelApiDeclareTypeUInt64ForDriver(void);</source><br />
<br />
=== sceKernelSysrootGetTimebaseClockFrequencyForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0xBFD8F2A2<br />
|}<br />
<br />
Calls a function registered by [[#SceSysrootForDriver_C94C76FA]].<br />
<br />
Used by [[SceGpuEs4]], only on DevKit.<br />
<br />
<source lang="C">SceUInt32 sceKernelSysrootGetTimebaseClockFrequencyForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_C94C76FA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0xC94C76FA<br />
|}<br />
<br />
Registers some Sysroot functions related to clock frequency.<br />
<br />
<source lang="C">int SceSysrootForDriver_C94C76FA(SceSysrootForDriver_C94C76FA_struct *pParam);</source><br />
<br />
=== SceSysrootForDriver_2BE874EF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x2BE874EF<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_BF82931F]].<br />
<br />
Used only in [[SceAppMgr]].<br />
<br />
<source lang="C">int SceSysrootForDriver_2BE874EF(void *func);</source><br />
<br />
=== SceSysrootForDriver_3B19B06B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x3B19B06B<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_6D111FA7]].<br />
<br />
Used only in [[SceAppMgr]].<br />
<br />
<source lang="C">int SceSysrootForDriver_3B19B06B(void *func);</source><br />
<br />
=== SceSysrootForDriver_70AD47A9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.500.151-3.740.011 || 0x70AD47A9<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForKernel_2A03DFA1]].<br />
<br />
Used only in [[SceAppMgr]].<br />
<br />
<source lang="C">int SceSysrootForDriver_70AD47A9(void *func);</source><br />
<br />
=== SceSysrootForDriver_AA770EF7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0xAA770EF7<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForDriver_591BB490]].<br />
<br />
The function is registered from [[SceTty2uart]] only if [[KBL Param|DIP Switch]] 211 is set.<br />
<br />
<source lang="C">int SceSysrootForDriver_AA770EF7(void *func);</source><br />
<br />
=== SceSysrootForDriver_591BB490 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.360.011 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x591BB490<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_AA770EF7]].<br />
<br />
Gets tty2uart information into a 0x1000-sized buffer, similarly to [[#sceKernelGetTtyInfoForDriver]]. Returns some size, maybe size of the written tty2uart buffer.<br />
<br />
Used only in [[SceCoredump]].<br />
<br />
<source lang="C"><br />
// size: usually 0x1000<br />
int SceSysrootForDriver_591BB490(int magic_or_size, void *pBuf, SceSize size);<br />
</source><br />
<br />
=== SceSysrootForDriver_C5EAF5F7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xC5EAF5F7<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForDriver_47724459]].<br />
<br />
<source lang="C">int SceSysrootForDriver_C5EAF5F7(void *func);</source><br />
<br />
=== SceSysrootForDriver_47724459 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x47724459<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_C5EAF5F7]].<br />
<br />
=== SceSysrootForDriver_D4457D4F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xD4457D4F<br />
|}<br />
<br />
Registers the function called by [[#SceSysrootForDriver_40F28DC6]].<br />
<br />
<source lang="C">int SceSysrootForDriver_D4457D4F(void *func);</source><br />
<br />
=== SceSysrootForDriver_40F28DC6 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x40F28DC6<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_D4457D4F]].<br />
<br />
=== sceKernelSysrootGetCompiledSdkVersionByPidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xCAE820B2<br />
|}<br />
<br />
Temp name was sceKernelGetProcessHeapIDForDriver.<br />
<br />
Calls a callback registered by [[#SceSysrootForKernel_D29BCA77]].<br />
<br />
Used in [[SceKernelModulemgr]] functions that load modules, for example [[SceKernelModulemgr#sceKernelStartModuleForPidForKernel]].<br />
<br />
<source lang="C">int sceKernelSysrootGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);</source><br />
<br />
=== SceSysrootForDriver_8747D415 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x8747D415<br />
|}<br />
<br />
Used by [[SceDeci4pSDfMgr]].<br />
<br />
Registers the function called by [[#SceSysrootForDriver_B27B7530]].<br />
<br />
<source lang="C">int SceSysrootForDriver_8747D415(void *func);</source><br />
<br />
=== SceSysrootForDriver_B27B7530 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xB27B7530<br />
|}<br />
<br />
Calls the function registered by [[#SceSysrootForDriver_8747D415]].<br />
<br />
=== sceKernelSysrootSetGetBuserrorDataFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x82FC6405<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the function called by [[#sceKernelSysrootGetBuserrorDataForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSetGetBuserrorDataFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootGetBuserrorDataForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCD4B84F7<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetGetBuserrorDataFuncForDriver]].<br />
<br />
=== SceSysrootForDriver_FF2DD7AB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFF2DD7AB<br />
|}<br />
<br />
Registers something.<br />
<br />
<source lang="C"><br />
typedef struct SceSysrootForDriver_FF2DD7AB_struct { // size is 0x1C on FW 3.60<br />
SceSize size; // Size of this structure<br />
char unk_4[0x18];<br />
} SceSysrootForDriver_FF2DD7AB_struct;<br />
<br />
int SceSysrootForDriver_FF2DD7AB(SceSysrootForDriver_FF2DD7AB_struct *pData);<br />
</source><br />
<br />
=== SceSysrootForDriver_3AE319DA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3AE319DA<br />
|}<br />
<br />
Used by [[SceSyscon]].<br />
<br />
Get something registered by [[#SceSysrootForDriver_FF2DD7AB]].<br />
<br />
<source lang="C">int SceSysrootForDriver_3AE319DA(void);</source><br />
<br />
=== sceKernelSysrootGetHardwareFlagsForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x46E72428<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysrootIsAuCodecIcConexantForDriver.<br />
<br />
Writes kbl_param->hardware_flags to buffer.<br />
<br />
pFlags buffer size is 0x10 bytes.<br />
<br />
<source lang="C">int sceKernelSysrootGetHardwareFlagsForDriver(void *pFlags);</source><br />
<br />
=== sceKernelSysrootGetHardwareInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x930B1342<br />
|}<br />
<br />
return kbl_param->hardware_info;<br />
<br />
<source lang="C">int sceKernelSysrootGetHardwareInfoForDriver(void);</source><br />
<br />
=== sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE541959B<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSDfCtlSetBootParameterFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9421B223<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootClearSDfCtlSetBootParameterFuncForDriver(void);</source><br />
<br />
=== sceKernelSysrootSDfCtlSetBootParameterForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7AAC4EE7<br />
|}<br />
<br />
<source lang="C"><br />
// bootparam max size is 0x80 bytes<br />
int sceKernelSysrootSDfCtlSetBootParameterForDriver(const char *bootparam);<br />
</source><br />
<br />
=== sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x35875119<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootUtMgrGetTrilithiumBufferForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSetUtMgrGetTrilithiumBufferFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootUtMgrGetTrilithiumBufferForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.180.011-3.740.011 || 0xD75D4F37<br />
|}<br />
<br />
Used in [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel]] to overwrite fSELF authinfo.<br />
<br />
Returns 0 on success, 0x800f1a02 on error.<br />
<br />
<source lang="C">int sceKernelSysrootUtMgrGetTrilithiumBufferForDriver(SceUtokenDecrypted *buffer);</source><br />
<br />
=== sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xA12C9950<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver]].<br />
<br />
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].<br />
<br />
<source lang="C">int sceKernelSysrootSetSceSblPostSsMgrForDriver_A12C9950FuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootSceSblPostSsMgrForDriver_56D85EB0ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x56D85EB0<br />
|}<br />
<br />
Used by [[SceSblACMgr]].<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetSceSblPostSsMgrForDriver_56D85EB0FuncForDriver]].<br />
<br />
The function is [[SceSblPostSsMgr#SceSblPostSsMgrForDriver_D8A2D465]].<br />
<br />
=== sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0xE25D2FD5<br />
|}<br />
<br />
Registers the functions called by [[#sceKernelSysrootSblUtMgrHasUNK1FlagForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootSblUtMgrHasUNK1FlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x26AA237C<br />
|}<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK1FlagFuncForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSblUtMgrHasUNK1FlagForDriver(void);</source><br />
<br />
=== sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE2E88E3E<br />
|}<br />
<br />
Registers the function called by [[#sceKernelSysrootSblUtMgrHasUNK2FlagForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootsceSetSblUtMgrHasUNK2FlagFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootSblUtMgrHasUNK2FlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE2515A08<br />
|}<br />
<br />
Calls the function registered by [[#sceKernelSysrootSetSblUtMgrHasUNK2FlagFuncForDriver]].<br />
<br />
Used by [[SceSblACMgr#sceSblACMgrHasSystemDataFilePlayReadyFlagForDriver]].<br />
<br />
<source lang="C">int sceKernelSysrootSblUtMgrHasUNK2FlagForDriver(void);</source><br />
<br />
=== sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xEE5D6CE9<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetUtMgrHasNpTestFlagFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootUtMgrHasNpTestFlagForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0xA43599E9<br />
|}<br />
<br />
<source lang="c">int sceKernelSysrootUtMgrHasNpTestFlagForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_2D6B2A79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2D6B2A79<br />
|}<br />
<br />
Registers a function related to kernel panic, called by [[#SceSysrootForDriver_CC7A0E63]] or [[#SceSysrootForKernel_CC7A0E63]].<br />
<br />
=== SceSysrootForDriver_CC7A0E63 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCC7A0E63<br />
|}<br />
<br />
Calls a function related to kernel panic, registered by [[#SceSysrootForDriver_2D6B2A79]] or [[#SceSysrootForKernel_2D6B2A79]].<br />
<br />
<source lang="C"><br />
// type: 1: kernel_assertion_or_panic, 3: kernel_exception<br />
// size: must be <= 0x1000<br />
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2<br />
int SceSysrootForDriver_CC7A0E63(int type, SceSize size, const char *pBuf);<br />
</source><br />
<br />
=== sceKernelSysrootDisableAutoClockDownForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0xEE934615<br />
|}<br />
<br />
Derived from [[SceVshBridge#vshKernelDisableAutoClockDown]].<br />
<br />
return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0x10);<br />
<br />
Adds 0x10 from a SceSysmem global variable and returns it.<br />
<br />
<source lang="C">int sceKernelSysrootDisableAutoClockDownForDriver(void);</source><br />
<br />
=== sceKernelSysrootEnableAutoClockDownForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0xEEF091A7<br />
|}<br />
<br />
Derived from [[SceVshBridge#vshKernelEnableAutoClockDown]].<br />
<br />
return sceKernelCpuAtomicGetAndAdd32ForDriver(&a_flag_based_on_mgmt_bit0, 0xfffffff0);<br />
<br />
Subtracts 0x10 from a SceSysmem global variable and returns it.<br />
<br />
Used by SceCompat, ScePower, SceKernelDmacMgr, SceSblAuthMgr, SceSblSmschedProxy, SceSblSsSmComm.<br />
<br />
<source lang="C">int sceKernelSysrootEnableAutoClockDownForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_6050A467 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6050A467<br />
|}<br />
<br />
Debug related. Returns an error when called because there is no handler set for retail.<br />
<br />
<source lang="C">int SceSysrootForDriver_6050A467(SceUID pid);</source><br />
<br />
=== SceSysrootForDriver_F4340469 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF4340469<br />
|}<br />
<br />
Coredump related. Called during process load. Something is same as in [[#SceSysrootForDriver_6050A467]].<br />
<br />
<source lang="C">int SceSysrootForDriver_F4340469(int something, SceUID pid, ...);</source><br />
<br />
=== sceKernelSysrootRegisterCoredumpTriggerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xDD473B05<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootRegisterCoredumpTriggerForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootCoredumpTriggerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCD8CD242<br />
|}<br />
<br />
Used by [[SceDeci4pDbgp]].<br />
<br />
<source lang="C">int sceKernelSysrootCoredumpTriggerForDriver(int a1, int a2, int a3, SceCoredumpForDriver_A7D214A7_Opt *pOpt);</source><br />
<br />
=== sceKernelSysrootRegisterCoredumpCancelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x400B9793<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootRegisterCoredumpCancelForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootCoredumpCancelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x80FBC69D<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootCoredumpCancelForDriver(int a1);</source><br />
<br />
=== sceKernelSysrootSetProcessHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x0F07C3FC<br />
|}<br />
<br />
Registers some handlers.<br />
<br />
<source lang="C">int sceKernelSysrootSetProcessHandlerForDriver(SceSysrootProcessHandler *pHandler);</source><br />
<br />
=== sceKernelSysrootClearProcessHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x5A7FFDC1<br />
|}<br />
<br />
<source lang="C">void sceKernelSysrootClearProcessHandlerForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_421EFC96 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.692 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x421EFC96<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's on_process_created.<br />
<br />
Used only by [[SceAppMgr]] and called on process creation.<br />
<br />
Hooked to make it return 0 (success) for example in:<br />
* [https://github.com/henkaku/henkaku/blob/master/payload/payload.c#L423 HENkaku payload by Team Molecule]<br />
* [https://github.com/TheOfficialFloW/update365/blob/2d175c3d2cb6618ba048aee5776acace68ac4493/installer/src/kernel.c#L1058 update365 by TheFloW]<br />
<br />
<source lang="C">int SceSysrootForDriver_421EFC96(int maybe_pid, int maybe_modid, int a3);</source><br />
<br />
=== sceKernelSysrootSWBkptGetOriginalOpcodeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9CFF80F9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C">int sceKernelSysrootSWBkptGetOriginalOpcodeForDriver(SceUID pid, void *address, SceUInt32 *opcode);</source><br />
<br />
=== SceSysrootForDriver_571E5B79 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x571E5B79<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's unk_4.<br />
<br />
=== SceSysrootForDriver_51F9C118 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x51F9C118<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's unk_18.<br />
<br />
Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].<br />
<br />
<source lang="C"><br />
// a3: second argument of SceProcessmgrForKernel_8729DE79<br />
int SceSysrootForDriver_51F9C118(SceUID pid, SceUID modid, int a3, void* maybe_process_info, SceUInt64 time);<br />
</source><br />
<br />
=== SceSysrootForDriver_582616EC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x582616EC<br />
|}<br />
<br />
Calls SceSysrootProcessHandler's unk_24.<br />
<br />
Used in [[SceProcessmgr#SceProcessmgrForKernel_8729DE79]].<br />
<br />
<source lang="C"><br />
// a3: second argument of SceProcessmgrForKernel_8729DE79<br />
int SceSysrootForDriver_582616EC(SceUID pid, SceUID modid, int a3);<br />
</source><br />
<br />
=== sceKernelSysrootDbgpSuspendProcessAndWaitResumeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x256B2394<br />
|}<br />
<br />
=== sceKernelSysrootGetShellPidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x05093E7B<br />
|}<br />
<br />
<source lang="C">SceUID sceKernelSysrootGetShellPidForDriver(void);</source><br />
<br />
=== sceKernelSysrootAppMgrSpawnProcessForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3ACACD22<br />
|}<br />
<br />
=== sceKernelSysrootInformUpdateStartedForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9A486846<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootInformUpdateStartedForDriver(int number1, int number2, const char *str, SceSize len);</source><br />
<br />
=== sceKernelSysrootInformUpdateOngoingForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9EC02A41<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootInformUpdateOngoingForDriver(int number1, int number2);</source><br />
<br />
=== sceKernelSysrootInformUpdateFinishedForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x217B2871<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootInformUpdateFinishedForDriver(int number, const char *str, SceSize len);</source><br />
<br />
=== sceKernelSysrootSetSwInfoIntForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x631141E2<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSwInfoIntForDriver(char *str, SceSize len, SceUInt32 number);</source><br />
<br />
=== sceKernelSysrootSetSwInfoStrForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x17DD213C<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSwInfoStrForDriver(char *str1, SceSize len1, char *str2, SceSize len2);</source><br />
<br />
=== sceKernelSysrootSetSwInfoBinForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x9E96D990<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootSetSwInfoBinForDriver(char *str1, SceSize size1, char *str2, SceSize size2);</source><br />
<br />
=== sceKernelSysrootSetGetSystemSwVersionFuncForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3276086B<br />
|}<br />
<br />
Temp name was sceKernelSysrootSetSystemSwVersionForDriver.<br />
<br />
Used by [[SceSblUpdateMgr]].<br />
<br />
<source lang="c">void sceKernelSysrootSetGetSystemSwVersionFuncForDriver(void *func);</source><br />
<br />
=== sceKernelSysrootGetSystemSwVersionForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x67AAB627<br />
|}<br />
<br />
Returns System Software version as int from SceSysmem memory. For exemple: 0x0365000 on 3.65.<br />
<br />
<source lang="c">int sceKernelSysrootGetSystemSwVersionForDriver(void);</source><br />
<br />
=== sceKernelSysrootIsSafeModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x834439A7<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsSafeModeForDriver(void);</source><br />
<br />
=== sceKernelSysrootIsUpdateModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB0E1FC67<br />
|}<br />
<br />
<source lang="C">int sceKernelSysrootIsUpdateModeForDriver(void);</source><br />
<br />
=== sceKernelSysrootGetModelInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x4D98B15B<br />
|}<br />
<br />
This is a guessed name, based on "sysroot->model_info".<br />
<br />
Returns sysroot->model_info.<br />
<br />
Used only in [[SceProcessmgr]] initializeBudget() on module start. According to model_info, ScePhyMemPartShell is allocated with different parameters.<br />
<br />
<source lang="C">SceUInt32 sceKernelSysrootGetModelInfoForDriver(void);</source><br />
<br />
=== SceSysrootForDriver_ED688AEE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xED688AEE<br />
|}<br />
<br />
Registers the callback called by [[#SceSysrootForDriver_F404026C]].<br />
<br />
<source lang="C">SceSysrootForDriver_ED688AEE(void* cb);</source><br />
<br />
=== SceSysrootForDriver_F404026C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xF404026C<br />
|}<br />
<br />
Calls the callback registered by [[#SceSysrootForDriver_ED688AEE]].<br />
<br />
=== sceKernelSysrootCheckModelCapabilityForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x8AA268D6<br />
|}<br />
<br />
This is an official name. Name derived from [[#sceKernelSysrootCheckModelCapability]].<br />
<br />
Each model capability corresponds to a bit in a Sysroot field derived from Syscon [[KBL_Param#Hardware_Info|Hardware Info]] and [[KBL_Param#Hardware_Info_2|Hardware Info 2]].<br />
<br />
Model capabilities:<br />
* 0: unknown<br />
* 1: Multi-controllers support<br />
* 2: unknown<br />
* 4: unknown<br />
* 5: unknown<br />
* 6: unknown<br />
* 7: unknown, ?OLED display?<br />
* 8: unknown, ?LCD display?<br />
* 9: unknown, set on almost all models<br />
* 10: unknown<br />
* 11: SD card support<br />
* 12: unknown<br />
* 13: unknown<br />
<br />
{| class="wikitable"<br />
|-<br />
! Case !! Model !! Model capabilities (raw) !! Model capabilities (bits set)<br />
|-<br />
| ErnieHwInfo & 0xFF0000 <= 0x410000 / Unknown Model || 0x10100 || 0x604 || 2, 9, 10<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x510000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x600000 || 0x10150 || 0x604 || 2, 9, 10<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x700000 || 0x20100 || 0x1232 || 1, 4, 5, 9, 12<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x720000 || 0x20110 || 0x232 || 1, 4, 5, 9<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x800000 || 0x10200 || 0x604 || 2, 9, 10<br />
|-<br />
| ErnieHwInfo & 0xFF0000 == 0x820000 || 0x10220 || 0x604 || 2, 9, 10<br />
|-<br />
| PDEL-10xx in PS TV Emulation mode || 0x20101 || 0x252 || 1, 4, 6, 9<br />
|-<br />
| (ErnieHwInfo2 & 0x9 == 0) && PSTV or PSTVEmu || - || 0x80 || 7<br />
|-<br />
| ErnieHwInfo2 & 0x9 != 0 || - || 0x100 || 8<br />
|-<br />
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 != 0) || - || 0x1000 || 12<br />
|-<br />
| (Model == 0x20110) && (ErnieHwInfo2 & 0x100 == 0) || - || & ~0x1000 || UNSET 12<br />
|-<br />
| ErnieHwInfo2 & 0x200 != 0 || - || 0x2000 || 13<br />
|}<br />
<br />
Used in [[SceCtrl]], [[SceSdstor]], [[SceUsbEtherRtl]] and [[SceVshBridge]].<br />
<br />
<source lang="C">int sceKernelSysrootCheckModelCapabilityForDriver(int capability);</source><br />
<br />
=== sceKernelSysrootGetSyscallFrameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x44EA3197<br />
|}<br />
<br />
<source lang="C">SceSyscallFrame *sceKernelSysrootGetSyscallFrameForDriver(void);</source><br />
<br />
=== sceKernelSysrootRegisterInitCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x778D0966<br />
|}<br />
<br />
<source lang="C"><br />
// idx: 0-8<br />
// idx 8: func = ScePower/SceMsif functions<br />
int sceKernelSysrootRegisterInitCallbackForDriver(const void *func, SceUInt32 idx, SceUInt32 arg, SceUInt32 *ret);<br />
</source><br />
<br />
=== sceKernelSysrootInvokeInitCallbackForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x93CD44CD<br />
|}<br />
<br />
<source lang="C"><br />
// idx: 0-8, 5: disable NSKBL, more...?<br />
int sceKernelSysrootInvokeInitCallbackForDriver(int idx);<br />
</source><br />
<br />
=== sceKernelSysrootInvokeInitCallbackExForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 0.990-3.60 || 0x7C2C10E2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
// idx: 0-8, 5: disable NSKBL, more...?<br />
// unk: argument passed to the init callback<br />
int sceKernelSysrootInvokeInitCallbackExForDriver(int idx, int unk);<br />
</source><br />
<br />
== SceKernelUtilsForDriver ==<br />
<br />
=== sceAesDecrypt1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xD8678061<br />
|}<br />
<br />
Perform normal AES decrypt.<br />
<br />
<source lang="c">int sceAesDecrypt1ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesDecrypt2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE39CD272<br />
|}<br />
<br />
Perform AES decrypt using encryption round key.<br />
<br />
<source lang="c">int sceAesDecrypt2ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesEncrypt1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xC2A61770<br />
|}<br />
<br />
Perform AES encrypt. There are two functions that are the same on 1.69.<br />
<br />
<source lang="c">int sceAesEncrypt1ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesEncrypt2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x302947B6<br />
|}<br />
<br />
Perform AES encrypt. Similar to sceAesEncrypt1ForDriver.<br />
<br />
<source lang="c">int sceAesEncrypt2ForDriver(void *ctx, const void *src, void *dst);</source><br />
<br />
=== sceAesInit1ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xF12B6451<br />
|}<br />
<br />
This sets up the AES engine. <code>ctx</code> is a 0x3C0 byte buffer (on FW 1.69). <code>blocksize</code> and <code>keysize</code> values are in bits. 128/196/256 are supported values.<br />
<br />
last arg to subroutine is 0<br />
<br />
<source lang="c">int sceAesInit1ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source><br />
<br />
=== sceAesInit2ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEDA97D6D<br />
|}<br />
<br />
last arg to subroutine is 1<br />
<br />
<source lang="c">int sceAesInit2ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source><br />
<br />
=== sceAesInit3ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x72408E29<br />
|}<br />
<br />
last arg to subroutine is 2<br />
<br />
<source lang="c">int sceAesInit3ForDriver(void *ctx, int blocksize, int keysize, const void *key);</source><br />
<br />
=== SceKernelUtilsForDriver_C76A7685 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC76A7685<br />
|}<br />
<br />
Looks like it relates to AES InvMixColumns.<br />
<br />
=== SceKernelUtilsForDriver_60ED6EA9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x60ED6EA9<br />
|}<br />
<br />
Equivalent to AES getSBox32Value<br />
<br />
=== sceDeflateDecompressForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8AF1FAD4<br />
|}<br />
<br />
=== sceDeflateDecompressPartialForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3D74CCDF<br />
|}<br />
<br />
=== sceGzipDecompressForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x367EE3DF<br />
|}<br />
<br />
=== sceGzipGetCommentForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCD3AE08F<br />
|}<br />
<br />
=== sceGzipGetCompressedDataForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x63619124<br />
|}<br />
<br />
=== sceGzipGetInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFFC6A10F<br />
|}<br />
<br />
=== sceGzipGetNameForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF901FD3E<br />
|}<br />
<br />
=== sceGzipIsValidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD8FAEFD4<br />
|}<br />
<br />
=== sceHmacSha1DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x29A28957<br />
|}<br />
<br />
<source lang="C">int sceHmacSha1DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source><br />
<br />
=== sceHmacSha224DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7F2A7B99<br />
|}<br />
<br />
<source lang="C">int sceHmacSha224DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source><br />
<br />
=== sceHmacSha256DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x83EFA1CC<br />
|}<br />
<br />
<source lang="C">int sceHmacSha256DigestForDriver(const void *key, int key_len, const void *data, int data_len, void *digest);</source><br />
<br />
=== sceMt19937GlobalInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD428CC2A<br />
|}<br />
<br />
cp_timestamp_2 is gotten from SceKblParam.<br />
<br />
<source lang="C">int sceMt19937GlobalInitForDriver(uint32_t cp_timestamp_2);</source><br />
<br />
=== sceMt19937GlobalUIntInRangeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x875B2A1C<br />
|}<br />
<br />
Temp name was sceMt19937GlobalUninitForDriver.<br />
<br />
<source lang="C"><br />
// Both the address and size must be aligned on four bytes.<br />
int sceMt19937GlobalUIntInRangeForDriver(void *pBase, SceSize length);<br />
</source><br />
<br />
=== sceMt19937InitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4C9A5730<br />
|}<br />
<br />
=== sceMt19937UIntForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x92AEDFBC<br />
|}<br />
<br />
=== sceSfmt19937FillArray32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2B30548B<br />
|}<br />
<br />
=== sceSfmt19937FillArray64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x49B41540<br />
|}<br />
<br />
=== sceSfmt19937GenRand32ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBBE4701A<br />
|}<br />
<br />
=== sceSfmt19937GenRand64ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x45DEAAD6<br />
|}<br />
<br />
=== sceSfmt19937InitByArrayForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x33AE1203<br />
|}<br />
<br />
=== sceSfmt19937InitGenRandForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAB48C3CA<br />
|}<br />
<br />
=== sceSha1BlockInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE4390FFA<br />
|}<br />
<br />
<source lang="C">int sceSha1BlockInitForDriver(void* ctx);</source><br />
<br />
=== sceSha1BlockResultForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x48F24106<br />
|}<br />
<br />
<source lang="C">int sceSha1BlockResultForDriver(void* ctx, void *digest);</source><br />
<br />
=== sceSha1BlockUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x478A6F3C<br />
|}<br />
<br />
<source lang="C">int sceSha1BlockUpdateForDriver(void* ctx, const void *data, int size);</source><br />
<br />
=== sceSha1DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x87DC7F2F<br />
|}<br />
<br />
<source lang="C">int sceSha1DigestForDriver(const void *data, int size, void *digest);</source><br />
<br />
=== sceSha224BlockInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC762EA6D<br />
|}<br />
<br />
<source lang="C">int sceSha224BlockInitForDriver(void* ctx);</source><br />
<br />
=== sceSha224BlockResultForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFBF2A442<br />
|}<br />
<br />
<source lang="C">int sceSha224BlockResultForDriver(void* ctx, void *digest);</source><br />
<br />
=== sceSha224BlockUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7556E611<br />
|}<br />
<br />
<source lang="C">int sceSha224BlockUpdateForDriver(void* ctx, const void *data, int size);</source><br />
<br />
=== sceSha224DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9EA9D4DC<br />
|}<br />
<br />
<source lang="C">int sceSha224DigestForDriver(const void *data, int size, void *digest);</source><br />
<br />
=== sceSha256BlockInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD909FA2C<br />
|}<br />
<br />
<source lang="C">int sceSha256BlockInitForDriver(void* ctx);</source><br />
<br />
=== sceSha256BlockResultForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4899CD4B<br />
|}<br />
<br />
<source lang="C">int sceSha256BlockResultForDriver(void* ctx, void *digest);</source><br />
<br />
=== sceSha256BlockUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x236A9097<br />
|}<br />
<br />
<source lang="C">int sceSha256BlockUpdateForDriver(void* ctx, const void *data, int size);</source><br />
<br />
=== sceSha256DigestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xA773A6A8<br />
|}<br />
<br />
<source lang="C">int sceSha256DigestForDriver(const void *data, SceSize size, void *digest);</source><br />
<br />
=== sceZlibDecompressForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x900148DB<br />
|}<br />
<br />
=== sceZlibGetCompressedDataForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x01EB6C45<br />
|}<br />
<br />
=== sceZlibGetInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5B9BCD75<br />
|}<br />
<br />
=== sceXorshift128ForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990 || not present<br />
|-<br />
| 3.60 || 0x335AF34D<br />
|}<br />
<br />
Similar implementation as [https://github.com/RIOT-OS/RIOT/blob/master/sys/random/xorshift.c#L41 xorshift128].<br />
<br />
<source lang="C">int sceXorshift128ForDriver(SceUInt32 *state);</source><br />
<br />
=== SceKernelUtilsForDriver_B55C69B7 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB55C69B7<br />
|}<br />
<br />
If buffer is full of zeroes, then each of the four dwords of buffer are set to 1. Always success and always return 0.<br />
<br />
Used in [[SceProcessmgr]].<br />
<br />
<source lang="C">int SceKernelUtilsForDriver_B55C69B7(SceUInt32 *buffer);</source><br />
<br />
== SceZlibForDriver ==<br />
<br />
This library was moved to [[SceSblPostSsMgr#SceZlibForDriver]] on FW 1.800.071.<br />
<br />
[http://www.zlib.net/ zlib] compression library.<br />
<br />
=== zlibVersion ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x517BC5F7<br />
|}<br />
<br />
<source lang="C">const char *zlibVersion(void);</source><br />
<br />
=== inflateInit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x81D0667B<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_723495A5|alias]].<br />
<br />
<source lang="C">int inflateInit(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_723495A5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x723495A5<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_723495A5(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== inflateInit2_ ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x0BDDF66A<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_21A03034|alias]].<br />
<br />
<source lang="C">int inflateInit2_(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_21A03034 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x21A03034<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_21A03034(SceZlibStream *strm, int windowBits, const char *version, int stream_size);</source><br />
<br />
=== inflateInit_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x44DA19D2<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_B03E109B|alias]].<br />
<br />
<source lang="C">int inflateInit_2(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_B03E109B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xB03E109B<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_B03E109B(SceZlibStream *strm, const char *version, int stream_size);</source><br />
<br />
=== inflateInit2_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xA1E7E8B3<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_AC2F8437|alias]].<br />
<br />
<source lang="C">int inflateInit2_2(SceZlibStream *strm, int a2, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_AC2F8437 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xAC2F8437<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_AC2F8437(SceZlibStream *strm, int a2, const char *version, int stream_size);</source><br />
<br />
=== inflate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xD4A85178<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E4F34A68|alias]].<br />
<br />
<source lang="C">int inflate(SceZlibStream *strm, int flush);</source><br />
<br />
=== SceZlibForDriver_E4F34A68 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xE4F34A68<br />
|}<br />
<br />
=== inflateSetDictionary ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x7B16DBD6<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_00561385|alias]].<br />
<br />
<source lang="C">int inflateSetDictionary(SceZlibStream *strm, const void *dictionary, int dictLength);</source><br />
<br />
=== SceZlibForDriver_00561385 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x00561385<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_00561385(SceZlibStream *strm, const void *dictionary, int dictLength);</source><br />
<br />
=== inflateEnd ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x9030BAE4<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_134E91EA|alias]].<br />
<br />
<source lang="C">int inflateEnd(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_134E91EA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x134E91EA<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_134E91EA(SceZlibStream *strm);</source><br />
<br />
=== inflateCopy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x4C27A382<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_89B30588|alias]].<br />
<br />
<source lang="C">int inflateCopy(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== SceZlibForDriver_89B30588 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x89B30588<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_89B30588(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== inflateSyncPoint ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x4CB63BCD<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_834CC4A2|alias]].<br />
<br />
<source lang="C">int inflateSyncPoint(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_834CC4A2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x834CC4A2<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_834CC4A2(SceZlibStream *strm);</source><br />
<br />
=== deflate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xE859D60F<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_5B718E55|alias]].<br />
<br />
<source lang="C">int deflate(SceZlibStream *strm, int flush);</source><br />
<br />
=== SceZlibForDriver_5B718E55 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010-3.60 || 0x5B718E55<br />
|}<br />
<br />
Used by [[SceCoredump]].<br />
<br />
<source lang="C">int SceZlibForDriver_5B718E55(SceZlibStream *strm, int flush);</source><br />
<br />
=== deflateReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x68CFEA45<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_211D25F5|alias]].<br />
<br />
This function could be deflateResetKeep.<br />
<br />
<source lang="C">int deflateReset(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_211D25F5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x211D25F5<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_211D25F5(SceZlibStream *strm);</source><br />
<br />
=== crc32 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0xE0CE06C0<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_3370B9AD|alias]].<br />
<br />
<source lang="C">unsigned long crc32(unsigned long crc, const unsigned char *buf, z_size_t len);</source><br />
<br />
=== SceZlibForDriver_3370B9AD ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3370B9AD<br />
|}<br />
<br />
<source lang="C">unsigned long SceZlibForDriver_3370B9AD(unsigned long crc, const unsigned char *buf, z_size_t len);</source><br />
<br />
=== adler32 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.60-3.60 || 0x98619620<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_7E823337|alias]].<br />
<br />
=== SceZlibForDriver_7E823337 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7E823337<br />
|}<br />
<br />
=== deflateInit2_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x20A122F8<br />
|}<br />
<br />
May be an initialization function.<br />
<br />
Used by [[SceCoredump]].<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_BE5CE88A|alias]].<br />
<br />
<source lang="C">int deflateInit2_2(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_BE5CE88A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xBE5CE88A<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_BE5CE88A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
=== deflateEnd ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5492B3F2<br />
|}<br />
<br />
Used by [[SceCoredump]].<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_A5D70E95|alias]].<br />
<br />
<source lang="C">int deflateEnd(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_A5D70E95 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xA5D70E95<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_A5D70E95(SceZlibStream *strm);</source><br />
<br />
=== deflateInit_ ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x25F28DA7<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_520CAA7F|alias]].<br />
<br />
<source lang="C">int deflateInit_(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_520CAA7F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x520CAA7F<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_520CAA7F(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_05F712FE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x05F712FE<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_67A085C4|alias]].<br />
<br />
=== SceZlibForDriver_67A085C4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x67A085C4<br />
|}<br />
<br />
=== SceZlibForDriver_0FA805A3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x0FA805A3<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_1C344E27|alias]].<br />
<br />
<source lang="C">int SceZlibForDriver_0FA805A3(SceZlibStream *strm, int a2, SceUInt16 a3);</source><br />
<br />
=== SceZlibForDriver_1C344E27 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x1C344E27<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_1C344E27(SceZlibStream *strm, int a2, SceUInt16 a3);</source><br />
<br />
=== deflateCopy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x1E135CC1<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_3252D28C|alias]].<br />
<br />
<source lang="C">int deflateCopy(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== SceZlibForDriver_3252D28C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3252D28C<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_3252D28C(SceZlibStream *dst, SceZlibStream *src);</source><br />
<br />
=== SceZlibForDriver_35E0108C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x35E0108C<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E2DF5A8B|alias]].<br />
<br />
<source lang="C">int SceZlibForDriver_35E0108C(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_E2DF5A8B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE2DF5A8B<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_E2DF5A8B(SceZlibStream *strm);</source><br />
<br />
=== zError ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3B4466F4<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_3F33F55F|alias]].<br />
<br />
<source lang="C">const char *zError(int err);</source><br />
<br />
=== SceZlibForDriver_3F33F55F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x3F33F55F<br />
|}<br />
<br />
<source lang="C">const char *SceZlibForDriver_3F33F55F(int err);</source><br />
<br />
=== inflateReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x408311E8<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_EEC6D267|alias]].<br />
<br />
<source lang="C">int inflateReset(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_EEC6D267 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xEEC6D267<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_EEC6D267(SceZlibStream *strm);</source><br />
<br />
=== SceZlibForDriver_4EE6C080 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x4EE6C080<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_93168F72|alias]].<br />
<br />
=== SceZlibForDriver_93168F72 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x93168F72<br />
|}<br />
<br />
=== SceZlibForDriver_5377643A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x5377643A<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_7C40CC39|alias]].<br />
<br />
=== SceZlibForDriver_7C40CC39 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7C40CC39<br />
|}<br />
<br />
=== deflateInit_2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x5A0078D6<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_AD23EEBB|alias]].<br />
<br />
<source lang="C">int deflateInit_2(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_AD23EEBB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xAD23EEBB<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_AD23EEBB(SceZlibStream *strm, int level, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_6ED5B677 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x6ED5B677<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_7993ADAB|alias]].<br />
<br />
=== SceZlibForDriver_7993ADAB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7993ADAB<br />
|}<br />
<br />
=== SceZlibForDriver_7048F14C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x7048F14C<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E323828B|alias]].<br />
<br />
=== SceZlibForDriver_E323828B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE323828B<br />
|}<br />
<br />
=== SceZlibForDriver_82167CD9 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x82167CD9<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_E94663DD|alias]].<br />
<br />
=== SceZlibForDriver_E94663DD ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE94663DD<br />
|}<br />
<br />
=== SceZlibForDriver_86FF6C8B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x86FF6C8B<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_904AA7AE|alias]].<br />
<br />
=== SceZlibForDriver_904AA7AE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x904AA7AE<br />
|}<br />
<br />
=== SceZlibForDriver_89A13883 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x89A13883<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_D9BDC778|alias]].<br />
<br />
=== SceZlibForDriver_D9BDC778 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xD9BDC778<br />
|}<br />
<br />
=== SceZlibForDriver_938F34FA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0x938F34FA<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_BC022D38|alias]].<br />
<br />
=== SceZlibForDriver_BC022D38 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xBC022D38<br />
|}<br />
<br />
=== deflateInit2_ ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xE6EB524C<br />
|}<br />
<br />
This function have [[SceSysmem#SceZlibForDriver_F2D8FC1A|alias]].<br />
<br />
<source lang="C">int deflateInit2_(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
=== SceZlibForDriver_F2D8FC1A ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.200.010 || 0xF2D8FC1A<br />
|}<br />
<br />
<source lang="C">int SceZlibForDriver_F2D8FC1A(SceZlibStream *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);</source><br />
<br />
== SceKernelSuspendForDriver ==<br />
<br />
Used to register handlers for handling suspend/resume related events.<br />
<br />
=== sceKernelPowerLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x254525F8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Used in [[SceProcessmgr#sceKernelPowerLock]].<br />
<br />
<source lang="C">int sceKernelPowerLockForDriver(SceKernelPowerTickType type);</source><br />
<br />
=== sceKernelPowerUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0x230495ED<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Used in [[SceProcessmgr#sceKernelPowerUnlock]].<br />
<br />
<source lang="C">int sceKernelPowerUnlockForDriver(SceKernelPowerTickType type);</source><br />
<br />
=== SceKernelSuspendForDriver_FE2118BD ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xFE2118BD<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_E677B343 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE677B343<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_B4B13615 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xB4B13615<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_AEA9440D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xAEA9440D<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_81D9E41C ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x81D9E41C<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_6A503956 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x6A503956<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_250ACD90 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x250ACD90<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_0A6CA124 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x0A6CA124<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_0106C0F0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x0106C0F0<br />
|}<br />
<br />
=== SceKernelSuspendForDriver_4DF40893 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4DF40893<br />
|}<br />
<br />
Locks something.<br />
<br />
Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just before starting a process.<br />
<br />
Called just before NVS write.<br />
<br />
<source lang="C"><br />
// maybe pid: usually 0<br />
int SceKernelSuspendForDriver_4DF40893(int maybe_pid);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_2BB92967 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2BB92967<br />
|}<br />
<br />
Unlocks something.<br />
<br />
Called in [[SceProcessmgr#sceKernelStartProcessForKernel]] and [[SceProcessmgr#sceKernelStartProcessExtForKernel]] just after starting a process.<br />
<br />
Called just after NVS write.<br />
<br />
<source lang="C"><br />
// maybe pid: usually 0<br />
int SceKernelSuspendForDriver_2BB92967(int maybe_pid);<br />
</source><br />
<br />
=== sceKernelRegisterSysEventHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x04C05D10<br />
|}<br />
<br />
Temp name was sceKernelSuspendRegisterCallbackForDriver.<br />
<br />
Registers a function for handling suspend/resume. <code>resume</code> is 0 if we are currently suspending and 1 if we are currently resuming. <code>opt</code> is passed from the registration. Registration adds an entry to a linked list and returns the block id for the new entry.<br />
<br />
Returns the suspend_handler_id.<br />
<br />
<source lang="C"><br />
typedef int (* SceKernelSysEventHandler)(int resume, int event, void *param, void *argp);<br />
<br />
SceUID sceKernelRegisterSysEventHandlerForDriver(const char *name, SceKernelSysEventHandler handler, void *argp);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_CE7A2207 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xCE7A2207<br />
|}<br />
<br />
Registers a handler for a suspend event.<br />
<br />
<source lang="c"><br />
// idx: ex: 0x15<br />
// args: can be 0<br />
SceUID SceKernelSuspendForDriver_CE7A2207(SceUInt idx, void *handler, void *args);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_105C5752 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x105C5752<br />
|}<br />
<br />
Registers a handler for a resume event.<br />
<br />
<source lang="c"><br />
// idx: ex: 0x15<br />
// args: can be 0<br />
SceUID SceKernelSuspendForDriver_105C5752(SceUInt idx, void *handler, void *args);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_D4958E6F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xD4958E6F<br />
|}<br />
<br />
Dispatch handler registered by [[#SceKernelSuspendForDriver_CE7A2207]].<br />
<br />
<source lang="c">SceUID SceKernelSuspendForDriver_D4958E6F(void *args);</source><br />
<br />
=== sceKernelUnregisterSysEventHandlerForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xDD61D621<br />
|}<br />
<br />
Call with the id returned from <code>suspend_register_handler</code> to remove the entry from the linked list and free the memory.<br />
<br />
<source lang="c">int sceKernelUnregisterSysEventHandlerForDriver(SceUID id);</source><br />
<br />
=== sceKernelSysEventDispatchForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xD4622EA8<br />
|}<br />
<br />
This function goes through the linked list and calls each handler. If <code>ppFailed</code> is set, then the first handler that returns a negative value stops the call chain and returns the block id of the handler that broke the chain. Otherwise, this function invokes each handler and returns 0.<br />
<br />
<source lang="C"><br />
typedef struct _SceKernelSysEventDispatchSuspendParam {<br />
SceSize size;<br />
SceUInt32 unk_0x04;<br />
SceUInt32 unk_0x08;<br />
SceUInt32 unk_0x0C;<br />
void *pSuspendContextBuffer;<br />
SceUInt32 unk_0x14;<br />
} SceKernelSysEventDispatchSuspendParam;<br />
<br />
typedef struct _SceKernelSysEventDispatchResumeParam {<br />
SceSize size;<br />
SceUInt32 unk_0x04;<br />
} SceKernelSysEventDispatchResumeParam;<br />
<br />
int sceKernelSysEventDispatchForDriver(SceUInt32 resume, SceUInt32 eventid, void *param, void **ppFailed);<br />
</source><br />
<br />
=== sceKernelPowerTickForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE0489831<br />
|}<br />
<br />
Cancel specified idle timers to prevent entering in power save processing.<br />
<br />
Returns 0 on success.<br />
<br />
<source lang="c"><br />
typedef enum SceKernelPowerTickType {<br />
/** Cancel all timers */<br />
SCE_KERNEL_POWER_TICK_DEFAULT = 0,<br />
/** Cancel automatic suspension timer */<br />
SCE_KERNEL_POWER_TICK_DISABLE_AUTO_SUSPEND = 1,<br />
/** Cancel OLED-off timer */<br />
SCE_KERNEL_POWER_TICK_DISABLE_OLED_OFF = 4,<br />
/** Cancel OLED dimming timer */<br />
SCE_KERNEL_POWER_TICK_DISABLE_OLED_DIMMING = 6<br />
} SceKernelPowerTickType;<br />
<br />
int sceKernelPowerTickForDriver(int type);<br />
</source><br />
<br />
=== SceKernelSuspendForDriver_1FA2F8F1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x1FA2F8F1<br />
|}<br />
<br />
Calls a power handler.<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_1FA2F8F1(int a1, int a2);</source><br />
<br />
=== SceKernelSuspendForDriver_F2B07167 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xF2B07167<br />
|}<br />
<br />
Registers a global variable used by [[#sceKernelPowerTickForDriver]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_F2B07167(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_B5C58EE8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xB5C58EE8<br />
|}<br />
<br />
Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_B5C58EE8(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_D6124071 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xD6124071<br />
|}<br />
<br />
Registers a global variable used by [[#sceKernelSysEventDispatchForDriver]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_D6124071(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_0DE3CC02 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0x0DE3CC02<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_2BB92967]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_0DE3CC02(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_4E5A3A23 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0x4E5A3A23<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_4E5A3A23(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_C00826AC ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0xC00826AC<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_4DF40893]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_C00826AC(int a1);</source><br />
<br />
=== SceKernelSuspendForDriver_8B3F02B8 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.100.081-3.740.011 || 0x8B3F02B8<br />
|}<br />
<br />
Registers a global variable used by [[#SceKernelSuspendForDriver_1FA2F8F1]].<br />
<br />
<source lang="C">int SceKernelSuspendForDriver_8B3F02B8(int a1);</source><br />
<br />
== SceQafMgrForDriver ==<br />
<br />
Provides many device permission checks including running app privilege checks, debugging enabled checks, and so on.<br />
<br />
=== SceQafMgrForDriver_41E04800 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4F20A014<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== SceQafMgrForDriver_082A4FC2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x082A4FC2<br />
|}<br />
<br />
Temp name was sceSblQafMgrIsAllowHost0AccessForDriver. A potential name could be sceSblQafMgrIsAllowRemoteLoadForDriver.<br />
<br />
Used by [[SceSblFwLoader#sceSblFwLoaderLockForDriver|sceSblFwLoaderLockForDriver]], [[SceKernelModulemgr]], [[SceSysStateMgr]] and [[SceSblPostSsMgr]].<br />
<br />
Used by [[SceSblPostSsMgr#sceSblSpsfoMgrOpenForDriver|sceSblSpsfoMgrOpenForDriver]].<br />
<br />
When this flag is set, it allows for example to load some files from host0:, for example SPSFO and psp2config.skprx.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xE) & 1)<br />
int SceQafMgrForDriver_082A4FC2(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowGameDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x694D1096<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only used by [[SceSblACMgr]].<br />
<br />
Might be something like sceSblQafMgrIsAllowUserAppDebug.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xB) & 4)<br />
int sceSblQafMgrIsAllowGameDebugForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_0E588747 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x0E588747<br />
|}<br />
<br />
Only used by [[SceRegistryMgr]].<br />
<br />
Returns true if the PSVita is an "Internal system".<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int SceQafMgrForDriver_0E588747(void);<br />
</source><br />
<br />
=== SceSblQafMgrForDriver_4BC1883F ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x4BC1883F<br />
|}<br />
<br />
Like a sceSblQafMgrIsAllowPSPEmuDevelopmentForDriver.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int SceSblQafMgrForDriver_4BC1883F(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowSystemAppDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xCAD47130<br />
|}<br />
<br />
Used by [[SceDeci4pDtracep]] and [[SceSblACMgr]].<br />
<br />
If it returns false, syscalls debug trace printf is disabled.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int sceSblQafMgrIsAllowSystemAppDebugForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowKernelDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x382C71E8<br />
|}<br />
<br />
Used by [[SceKernelModulemgr]], [[SceExcpmgr]], [[SceCrashDump]], [[SceHdmi]], [[SceKernelBlueScreenOfDeath]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 1)<br />
int sceSblQafMgrIsAllowKernelDebugForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowQAUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x3CB55F98<br />
|}<br />
<br />
Only used by [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int sceSblQafMgrIsAllowQAUpdateForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowForceUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8C423C18<br />
|}<br />
<br />
Only used by [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 2)<br />
int sceSblQafMgrIsAllowForceUpdateForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_52B4E164 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x52B4E164<br />
|}<br />
<br />
Only used by [[SceWlanBt]] and [[SceEnumWakeUp]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 1)<br />
int SceQafMgrForDriver_52B4E164(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_883E9465 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x883E9465<br />
|}<br />
<br />
Temp name was sceSblQafMgrIsAllowDecryptedBootConfigLoadForDriver.<br />
<br />
Used by [[SceSysStateMgr]] only.<br />
<br />
Allows loading psp2config.skprx as plaintext format.<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xE) & 1)<br />
int SceQafMgrForDriver_883E9465(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_B9770A13 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xB9770A13<br />
|}<br />
<br />
Needed to be enabled to work with DIPSW 251 (Enable "dummytty0:"). Needed by [[SceSysStateMgr]] to allow loading <code>host0:psp2config.rpath</code>.<br />
<br />
Used by [[SceKernelModulemgr]] and [[SceSysmodule]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int SceQafMgrForDriver_B9770A13(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowRemotePlayDebugForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBFD5E463<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xC) & 2)<br />
int sceSblQafMgrIsAllowRemotePlayDebugForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_E573F124 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xE573F124<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x0) & 0x10)<br />
int SceQafMgrForDriver_E573F124(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowMarlinTestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.03-3.60 || 0x10283EB8<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int sceSblQafMgrIsAllowMarlinTestForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowNearTestForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.03-3.60 || 0x9644171D<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int sceSblQafMgrIsAllowNearTestForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_AE033133 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAE033133<br />
|}<br />
<br />
Only used by [[SceNpDrm]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x0) & 0x10)<br />
int SceQafMgrForDriver_AE033133(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_DEC6DF4E ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDEC6DF4E<br />
|}<br />
<br />
Only used by [[SceNpDrm]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int SceQafMgrForDriver_DEC6DF4E(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB7B195B2<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int sceSblQafMgrIsAllowPSPEmuShowQAInfoForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowLoadMagicGateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x36E5312E<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xB) & 0x10)<br />
int sceSblQafMgrIsAllowLoadMagicGateForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowDtcpIpResetForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE8B8F31F<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int sceSblQafMgrIsAllowDtcpIpResetForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowControlIduAutoUpdateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF8BFEE48<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0x6) & 2)<br />
int sceSblQafMgrIsAllowControlIduAutoUpdateForDriver(void);<br />
</source><br />
<br />
=== sceSblQafMgrIsAllowKeepCoreFileForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC1EA75C8<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int sceSblQafMgrIsAllowKeepCoreFileForDriver(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_70A67A4B ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x70A67A4B<br />
|}<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xF) & 1)<br />
int SceQafMgrForDriver_70A67A4B(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_41E04800 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x41E04800<br />
|}<br />
<br />
Only used by [[SceAppMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xB) & 4)<br />
int SceQafMgrForDriver_41E04800(void);<br />
</source><br />
<br />
=== SceQafMgrForDriver_7B14DC45 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7B14DC45<br />
|}<br />
<br />
Only used by [[SceAppMgr]].<br />
<br />
<source lang="C"><br />
// (*(uint8_t *)(qaf + 0xD) & 2)<br />
int SceQafMgrForDriver_7B14DC45(void);<br />
</source><br />
<br />
== ScePmMgrForDriver ==<br />
<br />
=== scePmMgrGetProductModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2AC815A2<br />
|}<br />
<br />
Returns 0 on success, 0x800f0a29 on failure.<br />
<br />
Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].<br />
<br />
result = ((int *)(kbl_param->boot_type_indicator_1) >> 2) & 1; // manufacturing mode flag<br />
<br />
<source lang="C">int scePmMgrGetProductModeForDriver(char* result);</source><br />
<br />
=== scePmMgrIsExternalBootModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBD1F193B<br />
|}<br />
<br />
Gets kbl_param using [[SceSysmem#sceKernelSysrootGetKblParamForKernel|sceKernelSysrootGetKblParamForKernel]].<br />
<br />
return (int *)(kbl_param->boot_type_indicator_1) & 1; // external boot mode flag<br />
<br />
<source lang="C">int scePmMgrIsExternalBootModeForDriver(void);</source><br />
<br />
== SceSblAIMgrForDriver ==<br />
<br />
=== sceSblAIMgrGetSMIForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x47D9CF13<br />
|}<br />
<br />
SMI means Service / Manufacturing Information.<br />
<br />
SMI is read from SceKblParam->min_fw_version.<br />
<br />
<source lang="C">int sceSblAIMgrGetSMIForDriver(SceUInt32 *pSMI);</source><br />
<br />
=== sceSblAIMgrGetProductCodeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x14345161<br />
|}<br />
<br />
Temp name was sceSblAIMgrGetTargetIdForDriver.<br />
<br />
Product Code = Target Id<br />
<br />
<source lang="C">int sceSblAIMgrGetProductCodeForDriver(void);</source><br />
<br />
=== sceSblAIMgrGetProductSubCodeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB33CEC8F<br />
|}<br />
<br />
Product Sub Code = model revision<br />
<br />
<source lang="C">int sceSblAIMgrGetProductSubCodeForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsTestForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3B638885<br />
|}<br />
<br />
TEST = Internal Test Unit<br />
<br />
Returns true if PsCode Product Code == 0x100.<br />
<br />
<source lang="C">int sceSblAIMgrIsTestForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x274663A0<br />
|}<br />
<br />
TOOL = DevKit<br />
<br />
Returns true if PsCode Product Code == 0x101.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsDEXForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF4B98F66<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x102.<br />
<br />
<source lang="C">int sceSblAIMgrIsDEXForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsCEXForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD78B04A2<br />
|}<br />
<br />
Returns true if PsCode Product Code 0x103-0x111 AND sceSblAIMgrIsSpecialCEXForDriver returns false.<br />
<br />
<source lang="C">int sceSblAIMgrIsCEXForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsVITAForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4273B97B<br />
|}<br />
<br />
Returns sceSblAIMgrIsGenuineVITAForDriver. If the console is a PS TV, it returns false.<br />
<br />
<source lang="C">int sceSblAIMgrIsVITAForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsDolceForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x71608CA3<br />
|}<br />
<br />
Returns sceSblAIMgrIsGenuineDolceForDriver if returns true else returns sceKernelCheckDipswForDriver(0x98).<br />
<br />
<source lang="C">int sceSblAIMgrIsDolceForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsGenuineVITAForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x963CA644<br />
|}<br />
<br />
Returns true if:<br />
*PsCode Product Code <= 0x111 AND sceSblAIMgrIsGenuineDolceForDriver returns false<br />
*sceSblAIMgrIsSpecialCEXForDriver returns true AND HardwareInfo != 0x700000 != 0x720000 != 0x510000<br />
<br />
<source lang="C">int sceSblAIMgrIsGenuineVITAForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsGenuineDolceForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC6E83F34<br />
|}<br />
<br />
<source lang="C">int sceSblAIMgrIsGenuineDolceForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsDiagForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6D5A3FC9<br />
|}<br />
<br />
Temp name was sceSblAIMgrIsSpecialCEXForDriver, sceSblAIMgrIsCEXJpFatForDriver.<br />
<br />
Returns true if PsCode Product Code == 0x103 (Japan), PsCode Product Sub Code == 0x10 (FAT chassis) and PsCode Factory Code == 0x24 (SCE labs).<br />
<br />
<source lang="C">int sceSblAIMgrIsDiagForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolDVT1ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBB9D146B<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 3.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolDVT1ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolRev4ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x37A79140<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 4.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolRev4ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsToolDVT2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE5E47FF7<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x101 and PsCode Product Sub Code == 5.<br />
<br />
<source lang="C">int sceSblAIMgrIsToolDVT2ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsCEXPrototypeRev2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFF5784B9<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 2.<br />
<br />
<source lang="C">int sceSblAIMgrIsCEXPrototypeRev2ForDriver(void);</source><br />
<br />
=== sceSblAIMgrIsCEXPrototypeRev7ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x05F79D4A<br />
|}<br />
<br />
Returns true if PsCode Product Code == 0x103 and PsCode Product Sub Code == 7.<br />
<br />
<source lang="C">int sceSblAIMgrIsCEXPrototypeRev7ForDriver(void);</source><br />
<br />
== SceProcEventForDriver ==<br />
<br />
=== sceKernelUnregisterProcEventHandlerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3DED57CC<br />
|}<br />
<br />
Temp name was sceProcEventDeleteUidForDriver.<br />
<br />
Wrapper to [[SceSysmem#sceGUIDCloseForDriver|sceGUIDCloseForDriver]].<br />
<br />
<source lang="C">int sceKernelUnregisterProcEventHandlerForDriver(int uid);</source><br />
<br />
=== sceKernelRegisterProcEventHandlerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x2A43912D<br />
|}<br />
<br />
Temp name was sceProcEventCreateEventForDriver.<br />
<br />
Uses [[SceSysmem#sceKernelCreateEventForDriver|sceKernelCreateEventForDriver]].<br />
<br />
Returns uid.<br />
<br />
<source lang="C"><br />
typedef struct SceProcEventInvokeParam1 {<br />
SceSize size; // SceProcEventInvokeParam1 struct size : 0x10<br />
int unk_0x04;<br />
int unk_0x08;<br />
int unk_0x0C;<br />
} SceProcEventInvokeParam1;<br />
<br />
typedef struct SceProcEventInvokeParam2 {<br />
SceSize size; // SceProcEventInvokeParam2 struct size : 0x14<br />
SceUID pid;<br />
int unk_0x08;<br />
int unk_0x0C;<br />
int unk_0x10;<br />
} SceProcEventInvokeParam2;<br />
<br />
typedef struct SceProcEventHandler {<br />
SceSize size; // SceProcEventHandler struct size : 0x1C<br />
int (* create)(SceUID pid, SceProcEventInvokeParam2 *pParam, void *pCommon);<br />
int (* exit)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon); // current process exit<br />
int (* kill)(SceUID pid, SceProcEventInvokeParam1 *pParam, void *pCommon); // by SceShell<br />
int (* suspend)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);<br />
int (* resume)(SceUID pid, int phase, SceProcEventInvokeParam1 *pParam, void *pCommon);<br />
int (* event_notify)(int evtype, int phase, SceProcEventInvokeParam2 *pParam, void *pCommon); //for arbitrary event types<br />
} SceProcEventHandler;<br />
<br />
/***<br />
* Registers a process event handler<br />
*<br />
* @param[in] name - Name of the event handler<br />
* @param[in] pHandler - Pointer to the handler structure<br />
* @param[in] pCommon - Arbitrary data passed to handlers<br />
*<br />
* @return Positive on success, < 0 on error.<br />
* @note Event handler pointers in pHandler may be NULL.<br />
*/<br />
SceUID sceKernelRegisterProcEventHandlerForDriver(const char *name, SceProcEventHandler *pHandler, void *pCommon);<br />
</source><br />
<br />
=== sceKernelInvokeProcEventHandlerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x414CC813<br />
|}<br />
<br />
Walks the list of registered process event handlers and invokes the ones related to the signaled event.<br />
<br />
<source lang="C"><br />
//Event type constants (for evtype parameter)<br />
#define CREATE_EVENT 1 //<! Call create() handlers<br />
#define EXIT_EVENT 2 //<! Call exit() handlers<br />
#define KILL_EVENT 3 //<! Call kill() handlers<br />
#define SUSPEND_EVENT 4 //<! Call suspend() handlers<br />
#define RESUME_EVENT 5 //<! Call resume() handlers<br />
//All other values result in event_notify() handlers being called<br />
<br />
/***<br />
* Invoke process event handlers<br />
*<br />
* @param[in] process - PID of the process for which event happened<br />
* @param[in] evtype - Event type<br />
* @param[in] phase - Unknown<br />
* @param[in] pParam - Pointer to handler parameter<br />
* @param[out] pFailer - Pointer to a variable that receives UID of a failing handler. May be NULL.<br />
* @param[in] stop - GUID of a handler that should stop execution<br />
*<br />
* @return Positive number on success, < 0 on error. <br />
* Corresponds to the last executed handler's return value (or SCE_OK if none were executed).<br />
*<br />
* @note process, pFailer and stop are unofficial argument names<br />
*<br />
* Invocation is performed by walking the list in order (from first to last registered handler):<br />
* - If the GUID of the handler matches the "stop" parameter, the handle is NOT executed and the function returns.<br />
* This can be used to ensure only process event handlers registered before a specific one are executed.<br />
* - If the handler has no function pointer corresponding to the evtype, execution continues with the next handler.<br />
* - If the handler has a function pointer corresponding to the evtype, the function is called with the appropriate<br />
* arguments. If the return value is positive, execution continues with the next handler. If the return value is<br />
* negative, the handler has failed, the GUID of the failing handler is saved in *pFailer if non-NULL and the function<br />
* returns directly.<br />
*/<br />
int sceKernelInvokeProcEventHandlerForDriver(ScePID pid, int evtype, int phase, void* pParam, SceUID *pFailer, SceUID stop);<br />
</source><br />
<br />
== SceDebugLed ==<br />
<br />
=== sceKernelGetGPI ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x14F582CF<br />
|}<br />
<br />
<source lang="C">int sceKernelGetGPI(void);</source><br />
<br />
=== sceKernelSetGPO ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78E702D3<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Output to LED<br />
*<br />
* This sets the content displayed on the DevKit LED.<br />
* @param[in] uiBitd Bit pattern. only low-order 8 bits are valid.<br />
*/<br />
int sceKernelSetGPO(SceUInt32 uiBits);<br />
</source><br />
<br />
=== call_cb74 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2B6EABAD<br />
|}<br />
<br />
<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source><br />
<br />
=== call_cb78 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0E6B9890<br />
|}<br />
<br />
<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source><br />
<br />
== SceDebugLedForDriver ==<br />
<br />
GPI stands for General Purpose Input, and GPO stands for General Purpose Output.<br />
<br />
=== sceKernelGetGPIForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x14F582CF<br />
|}<br />
<br />
Only SceDebugLedForDriver function used by SceCoredump.<br />
<br />
<source lang="C">int sceKernelGetGPIForDriver(void);</source><br />
<br />
=== sceKernelSetGPIForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x51C5325A<br />
|}<br />
<br />
<source lang="C">int sceKernelSetGPIForDriver(int value);</source><br />
<br />
=== sceKernelGetGPOForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3BB289F7<br />
|}<br />
<br />
<source lang="C">int sceKernelGetGPOForDriver(void);</source><br />
<br />
=== sceKernelSetGPOForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x78E702D3<br />
|}<br />
<br />
<source lang="C">int sceKernelSetGPOForDriver(SceUInt32 uiBits);</source><br />
<br />
=== sceKernelSetGPOMaskForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x098473B0<br />
|}<br />
<br />
<source lang="C">sceKernelSetGPOMaskForDriver(int a1, int a2);</source><br />
<br />
=== call_cb74 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2B6EABAD<br />
|}<br />
<br />
<source lang="C">void call_cb74(int a1, int a2, int a3, int a4);</source><br />
<br />
=== set_cb74 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x24173819<br />
|}<br />
<br />
<source lang="C">int set_cb74(void *cb);</source><br />
<br />
=== call_cb78 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0E6B9890<br />
|}<br />
<br />
<source lang="C">void call_cb78(int a1, int a2, int a3, int a4);</source><br />
<br />
=== set_cb78 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF62154E7<br />
|}<br />
<br />
<source lang="C">int set_cb78(void *cb);</source><br />
<br />
== SceDebugForKernel ==<br />
<br />
=== sceKernelDebugModuleStart2ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xF624CE22<br />
|}<br />
<br />
<source lang="C">int sceKernelDebugModuleStart2ForKernel(void);</source><br />
<br />
=== sceKernelRegisterKprintfHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x10067B7B<br />
|}<br />
<br />
Temp name was sceDebugSetHandlersForKernel.<br />
<br />
<source lang="c">int sceKernelRegisterKprintfHandlerForKernel(int (* handler)(int unk, const char *format, va_list args), void *argp);</source><br />
<br />
=== sceKernelGetDebugPutcharHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE783518C<br />
|}<br />
<br />
This is guessed name.<br />
<br />
Temp name was sceDebugGetPutcharHandlerForKernel, sceKernelGetDebugPutcharForKernel.<br />
<br />
Returns pointer to current debug putchar handler.<br />
<br />
<source lang="c">void *sceKernelGetDebugPutcharHandlerForKernel(void);</source><br />
<br />
=== sceKernelRegisterDebugPutcharHandlerForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE6115A72<br />
|}<br />
<br />
Temp name was sceDebugRegisterPutcharHandlerForKernel, sceKernelRegisterDebugPutcharForKernel.<br />
<br />
Set debug print char handler.<br />
<br />
<source lang="c">int sceKernelRegisterDebugPutcharHandlerForKernel(int (* handler)(void *args, char c), void *args);</source><br />
<br />
=== sceKernelDebugPutcharForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x82D2EDCE<br />
|}<br />
<br />
Temp name was sceDebugPutcharForKernel.<br />
<br />
Print character to uart.<br />
<br />
Return 1.<br />
<br />
<source lang="c">int sceKernelDebugPutcharForKernel(char c);</source><br />
<br />
=== sceKernelTtyPutcharForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x254A4997<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Prints a character to the 0x1000-byte buffer returned by [[SceSysmem#sceKernelGetTtyInfoForDriver]].<br />
<br />
On success, returns printed size (always 1).<br />
<br />
<source lang="c">int sceKernelTtyPutcharForKernel(char c);</source><br />
<br />
=== sceKernelStoppedForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xF1F0C365<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStoppedForKernel(const char *pFile, const char *pFunc, int line);</source><br />
<br />
=== panic_on_kernel_exception ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x082B8D6A<br />
|-<br />
| 3.65 || 0xCCABDD98<br />
|}<br />
<br />
Prints information about a Kernel Exception, ?and certainly calls [[SceCoredump]]?, then calls SceSysrootForKernel_0DF574A9 in an infinite loop.<br />
<br />
This function doesn't return.<br />
<br />
See [[SceExcpmgr#sceKernelRegisterExceptionHandlerForKernel]] for the meaning of excpcode.<br />
<br />
<source lang="C"><br />
// excp_name can be:<br />
// UNDEF - Undefined instruction<br />
// PABT - Prefetch Abort<br />
// DABT - Data Abort<br />
// NEST - Nested? Same excpcode as UNDEF<br />
void panic_on_kernel_exception(SceKernelDebugInfo *dbginfo, SceExcpmgrExceptionContext *excp_ctx, int excpcode, const char *excp_name);<br />
</source><br />
<br />
=== register_unk_handler ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60 || 0x66D82EC8<br />
|}<br />
<br />
used by [[SceDeci4pSDbgp]].<br />
<br />
handler definition:<br />
<source lang="C">handler(int some_level, void *unk, const void *buf);</source><br />
<br />
<source lang="C">int register_unk_handler(void *handler);</source><br />
<br />
=== sceKernelEnableCrashDumpForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.610.011 || 0xF857CDD6<br />
|-<br />
| 3.630.011-3.740.011 || 0xA465A31A<br />
|}<br />
<br />
This is a guessed name. Temp name was sceDebugDisableInfoDumpForKernel, sceKernelEnableInfoDumpForKernel.<br />
<br />
Returns previous crash dump state.<br />
<br />
<source lang="C">int sceKernelEnableCrashDumpForKernel(SceBool enable);</source><br />
<br />
=== register_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4703ECC4<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source><br />
<br />
=== start_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4C377B11<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Returns 1 if logging has been started successfully, -1 else.<br />
<br />
<source lang="C">int start_logging(int state);</source><br />
<br />
=== stop_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x604F56AE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
If state is not zero, stops logging and return 1, else does nothing and return 0.<br />
<br />
Returns 1 if logging has been stopped, 0 else.<br />
<br />
<source lang="C">int stop_logging(void);</source><br />
<br />
=== refresh_logs ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x04A3046D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int refresh_logs(void);</source><br />
<br />
=== _sceKernelPrintDebugLogForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xEFDE973B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
If a2 is not zero, the current log buffer address is updated, else it is unchanged.<br />
<br />
maxNum is guessed to be either the number of entries or the index of the chosen entry. Entry size is 0x40 bytes.<br />
<br />
Uses sceKernelPrintfLevelForDriver to print.<br />
<br />
<source lang="C">int _sceKernelPrintDebugLogForKernel(int a1, int a2, int maxNum);</source><br />
<br />
=== sceKernelPrintDebugLogForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xBD5D0BB0<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Calls _sceKernelPrintDebugLogForKernel with maxNum = (log_buf_end - log_buf_start) / 0x40.<br />
<br />
<source lang="C">int sceKernelPrintDebugLogForKernel(int a1, int a2);</source><br />
<br />
=== print_with_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x904FF72D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int print_with_log_buffer(const char *string, SceSize maxlen);</source><br />
<br />
=== sceKernelPrintfCore0ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x2D7380FE<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Same as sceKernelPrintfForDriver but only prints if CPU ID is 0.<br />
<br />
<source lang="C">int sceKernelPrintfCore0ForKernel(const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfLevelCore0ForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x14241F51<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Same as sceKernelPrintfLevelForDriver but only prints if CPU ID is 0.<br />
<br />
<source lang="C">int sceKernelPrintfLevelCore0ForKernel(int level, const char *fmt, ...);</source><br />
<br />
=== sceKernelSetDebugLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBE2C05A2<br />
|}<br />
<br />
Temp name was sceKernelSetMinimumLogLevelForKernel.<br />
<br />
<source lang="C">SceUInt32 sceKernelSetDebugLevelForKernel(SceUInt32 dbgLevel);</source><br />
<br />
=== sceKernelGetDebugLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xDA6B6770<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
Temp name was sceKernelGetMinimumLogLevelForKernel.<br />
<br />
Returns the dbgLevel set by sceKernelSetDebugLevelForKernel.<br />
<br />
<source lang="C">SceUInt32 sceKernelGetDebugLevelForKernel(void);</source><br />
<br />
=== sceKernelSetAssertLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xCE9060F1<br />
|}<br />
<br />
Temp name was sceKernelSetMinimumAssertionLevelForKernel.<br />
<br />
Overrides in memory g_assertLevel set by DIP switches 201 and 202.<br />
<br />
Returns the previous assert level.<br />
<br />
<source lang="C">SceInt32 sceKernelSetAssertLevelForKernel(SceUInt32 assertLevel);</source><br />
<br />
=== sceKernelGetAssertLevelForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x374B7868<br />
|-<br />
| 0.990-3.60 || not present. Present in [[#SceDebugForDriver]].<br />
|}<br />
<br />
Temp name was sceKernelGetMinimumAssertionLevelForKernel.<br />
<br />
Returns g_assertLevel from memory.<br />
<br />
<source lang="C">SceInt32 sceKernelGetAssertLevelForKernel(void);</source><br />
<br />
=== SceDebugForKernel_BEF921A2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 3.60-3.61 || 0xBEF921A2<br />
|-<br />
| 3.63 || 0x5D6F0CFC<br />
|}<br />
<br />
<source lang="C"><br />
// buf size is 0x1000 bytes<br />
// buf_400 size is 0x400 bytes<br />
SceSSize SceDebugForKernel_BEF921A2(void *dst, int cpuId, SceUInt64 time, SceKernelDebugInfo *dbginfo, const void *excp_info_buf_0x400, int excpcode);<br />
</source><br />
<br />
=== add_entry ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0x1208240D<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C"><br />
// ex: add_entry(0xA1, in_lr, 3, name); in SceSysmem<br />
// ex: add_entry(0xAB, in_lr, 1, uid); in SceSysmem<br />
// ex: add_entry(0xBB, in_lr, 0, param_4); in SceProcessmgr<br />
int add_entry(SceSize maxlen, int a2, int a3, void *log_buffer_start);<br />
</source><br />
<br />
=== add_entry2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x061A4657<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source><br />
<br />
=== sceDebugRegisterBacktraceInternalForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.610.011 || 0xEFF9962B<br />
|-<br />
| 3.630.011-3.740.011 || 0x91E7D24F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a callback for [[SceKernelModulemgr#sceKernelBacktraceInternalForDriver]].<br />
<br />
If callback runs successfully (returns >= 0), value of pNumReturn is used as third argument of PrintBacktrace, else PrintBacktrace is not called at all.<br />
<br />
<source lang="C">int sceDebugRegisterBacktraceInternalForKernel(int (* callback)(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode));</source><br />
<br />
=== sceDebugRegisterPrintBacktraceForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xB5943011<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a callback for [[SceKernelModulemgr#sceKernelPrintBacktraceForDriver]].<br />
<br />
<source lang="C">int sceDebugRegisterPrintBacktraceForKernel(int (* callback)(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames));</source><br />
<br />
=== sceKernelPrintSyscallFrameForKernel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x25E31E18<br />
|-<br />
| 3.65 || 0xBCC8D0B2<br />
|}<br />
<br />
<source lang="C"><br />
// if pSyscallFrame is NULL, it will use the current syscall frame<br />
// pResult is a pointer to a 0x10 bytes buffer and may be NULL<br />
void sceKernelPrintSyscallFrameForKernel(SceUID pid, SceSyscallFrame *pSyscallFrame, SceUInt32 *pResult);<br />
</source><br />
<br />
=== SceDebugForKernel_F1F861CF ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 2.00-3.60 || 0xF1F861CF<br />
|}<br />
<br />
Registers a callback that is called when a crash occur.<br />
<br />
Used by [[SceKernelBlueScreenOfDeath]].<br />
<br />
<source lang="C">int SceDebugForKernel_F1F861CF(void *cb);</source><br />
<br />
=== SceDebugForKernel_1526DD83 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.20 || 0x1526DD83<br />
|}<br />
<br />
== SceDebugForDriver ==<br />
<br />
If AllowKernelDebug QA flag is not set, calls to functions with non-zero SceKernelDebugLevel are ignored.<br />
<br />
=== sceKernelPrintfForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x391B74B7<br />
|}<br />
<br />
Temp name was sceDebugPrintfForDriver.<br />
<br />
<source lang="C">int sceKernelPrintfForDriver(const char *fmt, ...);</source><br />
<br />
=== sceKernelVprintfForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x411C0733<br />
|}<br />
<br />
<source lang="C">int sceKernelVprintfForDriver(const char *fmt, va_list arg);</source><br />
<br />
=== sceKernelPrintfLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1A3F2AA4<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintfLevelForDriver(SceUInt32 level, const char *fmt, ...);</source><br />
<br />
=== sceKernelVprintfLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x611A158B<br />
|}<br />
<br />
<source lang="C">int sceKernelVprintfLevelForDriver(SceUInt32 level, const char *fmt, va_list arg);</source><br />
<br />
=== sceKernelPrintfLevelWithInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xD9703808<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceKernelPrintfLevelWithCtxForDriver.<br />
<br />
<source lang="C">int sceKernelPrintfLevelWithInfoForDriver(SceUInt32 level, int flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfWithInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x02B04343<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceDebugPrintf2ForDriver, sceKernelVprintfLevelWithCtxForDriver.<br />
<br />
<source lang="C">int sceKernelPrintfWithInfoForDriver(SceUInt32 flags, const SceKernelDebugInfo *dbginfo, const char *fmt, ...);</source><br />
<br />
=== sceKernelAssertForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x35A35322<br />
|}<br />
<br />
Temp name was sceDebugPrintKernelAssertionForDriver.<br />
<br />
Condition 0 can trigger "kernel stopped".<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
// addr is maybe not an argument but the stack pointer got within the function<br />
int sceKernelAssertForDriver(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);<br />
<br />
// 3.60:<br />
int sceKernelAssertForDriver(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelAssertLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xFD753E7A<br />
|}<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
int sceKernelAssertLevelForDriver(int level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);<br />
<br />
// 3.60:<br />
int sceKernelAssertLevelForDriver(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelPrintfAssertLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 0.990-3.60 || 0x821A2D59<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceDebugPrintfKernelAssertionForDriver, sceKernelVprintfAssertLevelForDriver.<br />
<br />
<source lang="C"><br />
// 0.990:<br />
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr, const char *fmt, va_list arg);<br />
<br />
// 3.50-3.60:<br />
int sceKernelPrintfAssertLevelForDriver(SceUInt32 level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *lr, const char *fmt, ...);<br />
</source><br />
<br />
=== sceKernelGetAssertLevelForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present. Present in [[#SceDebugForKernel]].<br />
|-<br />
| 0.990-3.60 || 0x374B7868<br />
|}<br />
<br />
Temp name was sceKernelGetMinimumAssertionLevelForDriver.<br />
<br />
Returns g_assertLevel from memory.<br />
<br />
<source lang="C">SceInt32 sceKernelGetAssertLevelForDriver(void);</source><br />
<br />
=== sceKernelPanicForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x391B5B74<br />
|}<br />
<br />
Temp name was sceDebugPrintKernelPanicForDriver.<br />
<br />
<source lang="C">int sceKernelPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr);</source><br />
<br />
=== sceKernelPrintfPanicForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x00CCE39C<br />
|}<br />
<br />
<source lang="C">void sceKernelPrintfPanicForDriver(const SceKernelDebugInfo *dbginfo, const void *addr, const char *fmt, ...);</source><br />
<br />
=== sceKernelGetDebugTailLogForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x62466B0A<br />
|}<br />
<br />
Temp name was sceKernelGetTtyInfoForDriver.<br />
<br />
Gets tty tail log.<br />
<br />
<source lang="C"><br />
// max bufSize is 0x1000<br />
int sceKernelGetDebugTailLogForDriver(void *pBuf, SceSize bufSize);<br />
</source><br />
<br />
=== _sceEventLogPutForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x95B38C6C<br />
|}<br />
<br />
Derived from [[SceVshBridge#_vshEventLogPut]].<br />
<br />
Calls [[SceSysmem#sceEventLogPutForDriver]] with KERNEL PID and [[SceSysmem#SceSysrootForKernel_D441DC34]] return value as second argument.<br />
<br />
<source lang="C"><br />
// id: 10001 (SceProcessmgr), 20001 (SceWlanBt)<br />
// index: 1, 2, 3, 4, 5 (SceProcessmgr), 1, 2, 3, 4 (SceWlanBt)<br />
// a3: 0 (SceProcessmgr, SceWlanBt)<br />
// bufSize: 0x1C (SceProcessmgr), 4 (SceWlanBt)<br />
// max bufSize is 0x80<br />
int _sceEventLogPutForDriver(int id, int index, int a3, void *pBuf, SceSize bufSize);<br />
</source><br />
<br />
=== sceEventLogPutForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x912CF2BA<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
// max bufSize is 0x80<br />
int sceEventLogPutForDriver(SceUInt32 pid, int a2, int id, int index, int a5, void *pBuf, SceSize bufSize);<br />
</source><br />
<br />
=== sceKernelGetEventLogForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xCC5365D3<br />
|}<br />
<br />
Temp name was sceEventLogGetInfoForDriver.<br />
<br />
Copy by blocks of 0x30 bytes (or maybe 0xC0 bytes).<br />
<br />
<source lang="C"><br />
// max bufSize is 0xC00 (0x40 blocks of size 0x30)<br />
int sceKernelGetEventLogForDriver(SceKernelDebugEventLog *pBuf, SceSize bufSize, SceSize *pReadBlocks);<br />
</source><br />
<br />
== SceSysmemForTZS ==<br />
<br />
=== sceKernelProcModeVAtoPAForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x119B9547<br />
|-<br />
| 0.990-3.73 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelProcModeVAtoPAForTZS(SceUID pid, uint32_t mode, void *pVA, void **pPA);</source><br />
<br />
=== sceKernelAllocPartitionStackMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x69022B7F<br />
|-<br />
| 0.990-3.73 || not present<br />
|}<br />
<br />
=== sceKernelGetPhyPageResetForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x3FEF6B39<br />
|-<br />
| 3.60-3.73 || not present<br />
|}<br />
<br />
=== sceKernelDeleteHeapForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x624454BC<br />
|}<br />
<br />
=== sceKernelCreateHeapForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x56A16D84<br />
|}<br />
<br />
=== sceKernelAllocHeapMemoryWithOptionForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xEA712806<br />
|}<br />
<br />
=== sceKernelAllocHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x473871D8<br />
|}<br />
<br />
=== sceKernelFreeHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x42FB5B12<br />
|}<br />
<br />
=== sceKernelAllocUncacheHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x29DE887D<br />
|}<br />
<br />
=== sceKernelAllocUncacheHeapMemoryWithOptionForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x6A3FBAF0<br />
|}<br />
<br />
=== sceKernelFreeUncacheHeapMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2F18E288<br />
|}<br />
<br />
=== sceKernelNameHeapDeleteForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF459D09D<br />
|}<br />
<br />
=== sceKernelNameHeapInsertForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x42AD34AB<br />
|}<br />
<br />
=== sceKernelSetSuspendIntrFuncForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0xB4306D21<br />
|-<br />
| 3.60-3.73 || not present<br />
|}<br />
<br />
=== sceKernelSetResumeIntrFuncForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x418111B0<br />
|-<br />
| 3.60-3.73 || not present<br />
|}<br />
<br />
=== sceKernelAddressSpaceUnmapForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x31273DC7<br />
|}<br />
<br />
=== sceKernelGetMemBlockBaseForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xE1DEDFF4<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Get mapped base address of memory block.<br />
*<br />
* Get base address of memory block.<br />
* @param[in] uid block id<br />
* @param[out] ppBase base address of memory block<br />
* @retval SCE_OK success<br />
* @retval <SCE_OK Error<br />
*/<br />
int sceKernelGetMemBlockBaseForTZS(SceUID uid, void **ppBase);<br />
</source><br />
<br />
=== sceKernelFreeMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x658EACE3<br />
|}<br />
<br />
=== sceKernelAllocMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x402EB970<br />
|}<br />
<br />
<source lang="c"><br />
SceUID sceKernelAllocMemBlockForTZS(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);<br />
</source><br />
<br />
=== sceKernelAllocPartitionMemBlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x0028E26C<br />
|}<br />
<br />
Temp name was sceKernelAllocMemBlockForPidForTZS.<br />
<br />
<source lang="c">SceUID sceKernelAllocPartitionMemBlockForTZS(SceUID pid, const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOptKernel *pOpt);</source><br />
<br />
=== sceKernelVAtoPAForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1DEADF6C<br />
|}<br />
<br />
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>ppPA</code>.<br />
<br />
Returns <0 on error, values >=0 indicate success.<br />
<br />
<source lang="c">int sceKernelVAtoPAForTZS(void *pVA, void **ppPA);</source><br />
<br />
=== sceKernelVARangeToPAVectorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x9D43E416<br />
|}<br />
<br />
=== sceKernelCreateAddressSpaceForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x21906368<br />
|-<br />
| 0.990-3.73 || not present<br />
|}<br />
<br />
=== SceSysmemForTZS_038EAEEE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x038EAEEE<br />
|}<br />
<br />
== SceDipswForTZS ==<br />
<br />
=== sceKernelCheckDipswForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0xA98FC2FD<br />
|}<br />
<br />
== SceUartForTZS ==<br />
<br />
=== sceUartWriteForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x3AFD5E71<br />
|}<br />
<br />
== SceDebugForTZS ==<br />
<br />
=== sceKernelDebugModuleStart2ForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x32E3D4B9<br />
|}<br />
<br />
<source lang="C">int sceKernelDebugModuleStart2ForTZS(void);</source><br />
<br />
=== sceKernelRegisterKprintfHandlerForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x0AD558D5<br />
|}<br />
<br />
<source lang="c">int sceKernelRegisterKprintfHandlerForTZS(int (*kprintf)(const char *fmt, ...), const void *args);</source><br />
<br />
=== sceKernelDebugPutcharForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xD36F27BA<br />
|}<br />
<br />
Print character.<br />
<br />
<source lang="c">int sceKernelDebugPutcharForTZS(char c);</source><br />
<br />
=== sceKernelStoppedForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || 0xCB502FD1<br />
|-<br />
| 1.80 || not present<br />
|}<br />
<br />
<source lang="C">int sceKernelStoppedForTZS(const char *maybe_pFile, const char *maybe_pFunc, int maybe_line);</source><br />
<br />
=== sceKernelAssertForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x2F9B8AA8<br />
|}<br />
<br />
<source lang="C"><br />
// 0.931-0.990:<br />
int sceKernelAssertForTZS(SceBool condition, const char *pFile, const char *pFunc, int line, const void *addr);<br />
<br />
// 3.60:<br />
int sceKernelAssertForTZS(SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelAssertLevelForTZS ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x618F89E6<br />
|}<br />
<br />
<source lang="C"><br />
// 3.60:<br />
int sceKernelAssertLevelForTZS(int level, SceBool condition, const SceKernelDebugInfo *dbginfo, const void *addr);<br />
</source><br />
<br />
=== sceKernelGetAssertLevelForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF851BA4F<br />
|}<br />
<br />
Returns g_assertLevel from memory.<br />
<br />
<source lang="C">SceInt32 sceKernelGetAssertLevelForTZS(void);</source><br />
<br />
=== _sceKernelPrintDebugLogForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x4FF6536C<br />
|}<br />
<br />
<source lang="C">int _sceKernelPrintDebugLogForTZS(int a1, int a2, int maxNum);</source><br />
<br />
=== sceKernelPrintDebugLogForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x85BF33E1<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintDebugLogForTZS(int a1, int a2);</source><br />
<br />
=== print_with_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x1FD92289<br />
|}<br />
<br />
<source lang="C">int print_with_log_buffer(const char *msg, SceSize maxlen);</source><br />
<br />
=== sceKernelPrintfForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x1655E0E3<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintfForTZS(const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfLevelForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xC70CBB58<br />
|}<br />
<br />
<source lang="C">int sceKernelPrintfLevelForTZS(int level, const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfCore0ForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x08F8AD70<br />
|}<br />
<br />
Same as sceKernelPrintfForTZS but only prints if CPU ID is 0. <br />
<br />
<source lang="C">int sceKernelPrintfCore0ForTZS(const char *fmt, ...);</source><br />
<br />
=== sceKernelPrintfLevelCore0ForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xD4E6A0C0<br />
|}<br />
<br />
Same as sceKernelPrintfLevelForTZS but only prints if CPU ID is 0.<br />
<br />
<source lang="C">int sceKernelPrintfLevelCore0ForTZS(int level, const char *fmt, ...);</source><br />
<br />
=== sceKernelSetMinimumLogLevelForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x898E417E<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @brief Specifies the minimum severity level for the output of logging information.<br />
*<br />
* Specifies the minimum severity level for the output of logging information. The default level is SCE_DBG_LOG_LEVEL_TRACE.<br />
*<br />
* @param minimumLogLevel The minimum severity at which debugging messages should be output.<br />
* @retval SCE_OK The operation was completed successfully.<br />
* @retval Negative value Error code<br />
*/<br />
int sceKernelSetMinimumLogLevelForTZS(SceInt32 minimumLogLevel);<br />
</source><br />
<br />
=== register_log_buffer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xF2A87E96<br />
|}<br />
<br />
<source lang="C">int register_log_buffer(const void *log_buffer_addr, SceSize log_buffer_size);</source><br />
<br />
=== start_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x1FF65E15<br />
|}<br />
<br />
<source lang="C">int start_logging(int state);</source><br />
<br />
=== stop_logging ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x5A35E3E0<br />
|}<br />
<br />
If state is not zero, stops logging and return 1, else does nothing and return 0.<br />
<br />
Returns 1 if logging has been stopped, 0 else.<br />
<br />
<source lang="C">int stop_logging(void);</source><br />
<br />
=== refresh_logs ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x91B41C34<br />
|}<br />
<br />
<source lang="C">int refresh_logs(void);</source><br />
<br />
=== add_entry ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x95E1A80B<br />
|}<br />
<br />
<source lang="C">int add_entry(int a1, int a2, int a3, void *log_buffer_start);</source><br />
<br />
=== add_entry2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x538319EB<br />
|}<br />
<br />
<source lang="C">int add_entry2(int a1, const char *msg, void *log_buffer_start, int a4);</source><br />
<br />
=== register_unk_cb ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x3598118B<br />
|}<br />
<br />
The callback has this definition:<br />
<source lang="C"><br />
// unk: 2 or 3<br />
int unk_cb(SceUID pid, void *buf, SceSize size, int *pOut, int unk);<br />
</source><br />
<br />
If unk_cb runs successfully (return >= 0), pOut is used as third argument of unk_cb2, else unk_cb2 is not called at all.<br />
<br />
<source lang="C">int register_unk_cb(void *some_cb);</source><br />
<br />
=== register_unk_cb2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xE844FC5A<br />
|-<br />
| 0.990-3.60 || not present<br />
|}<br />
<br />
The callback has this definition:<br />
<source lang="C">int unk_cb2(SceUID pid, void *buf, int unk);</source><br />
<br />
<source lang="C">int register_unk_cb2(void *some_cb);</source><br />
<br />
=== SceDebugForTZS_563B623D ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || not present<br />
|-<br />
| 1.80-3.60 || 0x563B623D<br />
|}<br />
<br />
=== SceDebugForTZS_0D799DAE ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0x0D799DAE<br />
|}<br />
<br />
<source lang="C">int SceDebugForTZS_0D799DAE(SceUInt32 msg_type, void *msg_ctx, const char *fmt, va_list arg);</source><br />
<br />
=== SceDebugForTZS_D26EB4BB ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-0.990 || not present<br />
|-<br />
| 3.60 || 0xD26EB4BB<br />
|}<br />
<br />
<source lang="C">int SceDebugForTZS_D26EB4BB(SceBool condition, SceUInt32 msg_type, void *msg_ctx, const char *fmt, ...);</source><br />
<br />
== SceCpuForTZS ==<br />
<br />
* 0.931: 0xACA39932: unknown, save context that will be restored with 0xCA74C9A2<br />
* 0.931: 0xCA74C9A2: unknown, restore context saved with 0xACA39932<br />
* 0.931: 0xE0B34336: unknown, same as SceCpuForKernel_9D72DD1B<br />
* 0.931-0.990: 0x40DEC1B6: sceKernelWaitForEvent<br />
* 0.931-0.990: 0xF42F079B: sceKernelSendEvent<br />
* 0.940: 0x1266F962: sceKernelAbort<br />
* 0.931-0.940: 0x98BF47D3: sceKernelGetVmaccessRange<br />
* 0.931: 0x49AD8B60: sceKernelSetFIQModeStack<br />
* 0.931: 0xC2A428F3: sceKernelSetMonModeStack<br />
* 0.931: 0xD9013440: sceKernelSetIRQModeStack<br />
* 0.931: 0xDF17E4A3: sceKernelSetUndModeStack<br />
* 0.931: 0xF832C341: sceKernelSetAbtModeStack<br />
* 0.931: 0xFB1D3114: sceKernelSetSvcModeStack<br />
* 0.931: 0xF6CE21EA: sceKernelPrintCpuMode<br />
* 3.60: 0x31E78A4B: unknown<br />
* 3.60: 0x4FED4BCE: unknown<br />
* 3.60: 0x7548CBCF: unknown<br />
* 3.60: 0xD4E7413D: unknown<br />
<br />
1.80:<br />
NID 0: 0x0A15B41C: sceKernelL1DcacheCleanInvalidateAll<br />
NID 1: 0x17A88E69: sceKernelL1DcacheCleanRange<br />
NID 2: 0x190D96D5: sceKernelDcacheCleanRange<br />
NID 3: 0x2A0A3DC6<br />
NID 4: 0x2B6403F8: on FW 3.60, does nothing and returns -1<br />
NID 5: 0x2FE24445: sceKernelCpuAtomicSet32<br />
NID 6: 0x308D7ABE: sceKernelCpuDcacheInvalidateMVACRange<br />
NID 7: 0x324727D1: sceKernelGetCpsr<br />
NID 8: 0x39FCFCC2: sceKernelDomainTextMemcpy<br />
NID 9: 0x44C423D3: sceKernelCpuId<br />
NID 10: 0x49B11FF8<br />
NID 11: 0x71FD9AB5: sceKernelSpinlockLowLock<br />
NID 12: 0x72CA4F7A: sceKernelGetSpsr<br />
NID 13: 0x75D87321: sceKernelCpuAtomicOrAndGet32<br />
NID 14: 0x7A5373EB: sceKernelDcacheCleanInvalidateRange<br />
NID 15: 0x7CCE9480: sceKernelDcacheCleanInvalidateAll<br />
NID 16: 0x864E3DED<br />
NID 17: 0x9E4C0D0D: on FW 3.60, does nothing and returns -1<br />
NID 18: 0xA5965CBF: sceKernelL1IcacheInvalidateEntireAllCore<br />
NID 19: 0xACF209F3: sceKernelSpinlockLowTrylockCpuSuspendIntr<br />
NID 20: 0xB421FAFD: sceKernelL1IcacheInvalidateRange<br />
NID 21: 0xB8F00FBE: sceKernelSpinlockLowUnlockCpuResumeIntr<br />
NID 22: 0xC4137AED: sceKernelPleFlushRequest<br />
NID 23: 0xCD98416C: sceKernelSpinlockLowUnlock<br />
NID 24: 0xCDD46655: sceKernelDcacheInvalidateRange<br />
NID 25: 0xD67A4356: sceKernelSpinlockLowLockCpuSuspendIntr<br />
NID 26: 0xEFD6F289: sceKernelCpuAtomicCompareAndSet8<br />
<br />
== SceSysclibForTZS ==<br />
<br />
=== __stack_chk_fail ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.80-3.60 || 0xE5457B97<br />
|}<br />
<br />
=== __stack_chk_guard ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBA505B15<br />
|}<br />
<br />
This is a variable.<br />
<br />
=== strncpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-3.60 || 0x361850BB<br />
|}<br />
<br />
=== memcpy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0xBE3AF2EE<br />
|}<br />
<br />
=== memset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x956DB750<br />
|}<br />
<br />
== SceSysrootForTZS ==<br />
<br />
=== sceKernelSysrootBacktraceForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0xF26A5E68<br />
|}<br />
<br />
=== sceKernelSysrootPrintBacktraceForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x463EA380<br />
|}<br />
<br />
=== sceKernelSysrootShowCallerInfoForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931 || 0x2F3D9414<br />
|}<br />
<br />
=== sceKernelSysrootGetModulePrivateForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xC9DD8EB3<br />
|}<br />
<br />
=== sceKernelSysrootSetModulePrivateForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xEA572BD9<br />
|}<br />
<br />
=== sceKernelSysrootSetSharedMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x45EEB2E0<br />
|}<br />
<br />
=== sceKernelSysrootGetKermitRevisionForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0xDB3DAB76<br />
|}<br />
<br />
=== sceKernelSysrootGetSharedMemoryForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x1C96096F<br />
|}<br />
<br />
=== sceKernelSysrootCorelockLockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xD653194A<br />
|}<br />
<br />
=== sceKernelSysrootGetVbaseMonitorVectorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xD4E6D8E8<br />
|}<br />
<br />
=== sceKernelSysrootGetKernelMMUContextForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0xA8B7DAF9<br />
|}<br />
<br />
=== sceKernelSysrootCorelockUnlockForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x2F5FD9A8<br />
|}<br />
<br />
=== sceKernelSysrootGetVbaseResetVectorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x2460ADFA<br />
|}<br />
<br />
=== sceKernelIsColdBootForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x0567B4B9<br />
|}<br />
<br />
=== sceKernelIsSecureStateForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940 || 0xEFA54B46<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceKernelSysrootGetErnieWakeupFactorForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x8E871C6D<br />
|}<br />
<br />
=== sceKernelSysrootGetKblParamForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-1.80 || 0x29C1049E<br />
|}<br />
<br />
Returns pointer to [[KBL Param]] buffer.<br />
<br />
<source lang="C">void *sceKernelSysrootGetKblParamForTZS(void);</source><br />
<br />
=== sceKernelSysrootAllocForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.940-1.80 || 0x1A9E1D28<br />
|}<br />
<br />
<source lang="C">void *sceKernelSysrootAllocForTZS(uint32_t size);</source><br />
<br />
== SceQafMgrForTZS ==<br />
<br />
=== sceSblQafManagerIsAllowKernelDebugForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-1.80 || 0x54D22D74<br />
|}<br />
<br />
return *(char *)(sceKernelSysrootGetKblParamForTZS() + 0x2D) & 1;<br />
<br />
== ScePmMgrForTZS ==<br />
<br />
=== sceSblPmMgrGetProductModeForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xCF554E69<br />
|}<br />
<br />
== SceSblAIMgrForTZS ==<br />
<br />
=== sceSblAIMgrIsCEXForTZS ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x536B38F4<br />
|}<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceVshBridge&diff=21090
SceVshBridge
2024-01-27T19:14:40Z
<p>CelesteBlue: /* _vshKernelSearchModuleByName */</p>
<hr />
<div>== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 1.69-3.65 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 1.69-3.60 || [[SceVshBridge#SceVshBridge|SceVshBridge]] || Non-secure || User || 0x35C5ACD4<br />
|-<br />
| 1.69 || [[SceVshBridge#SceVshBridgeAdditional|SceVshBridgeAdditional]] || Non-secure || User || 0x44420D11<br />
|-<br />
| 1.69-3.60 || [[SceVshBridge#SceDrmBridge|SceDrmBridge]] || Non-secure || User || 0xFF4CD67F<br />
|}<br />
<br />
== SceVshBridge ==<br />
<br />
=== _vshAppMgrAcInstGetAcdirParam ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1E91B5F5<br />
|}<br />
<br />
<source lang="C"><br />
// a1[in] - size is 0x10<br />
// a2[in] - size is 0x14<br />
// a3[out] - size is 0xE0<br />
int _vshAppMgrAcInstGetAcdirParam(const void *a1, const void *a2, void *a3);<br />
</source><br />
<br />
=== _vshAppMgrBgdlSetQueueStatus ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE842333E<br />
|}<br />
<br />
<source lang="C"><br />
// a1 - size is 0x700<br />
int _vshAppMgrBgdlSetQueueStatus(void *a1);<br />
</source><br />
<br />
=== _vshAppMgrCheckPfsMounted ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x771E2612<br />
|}<br />
<br />
<source lang="C"><br />
// a2 - Set a buffer with a size of 8 bytes<br />
int _vshAppMgrCheckPfsMounted(const char *pfs, const void *a2);<br />
</source><br />
<br />
=== _vshAppMgrCloudDataCreateHeader ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x29E83224<br />
|}<br />
<br />
<source lang="C"><br />
// a1[in] - size is 0x18<br />
// a3[in] - size is 0x20<br />
// a4[out] - size is 0x170<br />
int _vshAppMgrCloudDataCreateHeader(const void *a1, int a2, const void *a3, void *a4);<br />
</source><br />
<br />
=== _vshAppMgrCloudDataDstCreateMount ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8C4B556F<br />
|}<br />
<br />
<source lang="C"><br />
// a1[in] - size is 0x20<br />
// a2[out] - size is 0x10<br />
// int _vshAppMgrCloudDataDstCreateMount(const void *a1, void *a2);<br />
</source><br />
<br />
=== _vshAppMgrCloudDataGetMcId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEFCBC92C<br />
|}<br />
<br />
=== _vshAppMgrCloudDataSetMcId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF34E028A<br />
|}<br />
<br />
=== _vshAppMgrCloudDataSetupKey ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4DD6CA46<br />
|}<br />
<br />
=== _vshAppMgrCloudDataSrcMount ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9C480D61<br />
|}<br />
<br />
=== _vshAppMgrCloudDataVerifyHeader ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2715097A<br />
|}<br />
<br />
=== _vshAppMgrFakeSaveDataCreateMount ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7C2975D7<br />
|}<br />
<br />
=== _vshAppMgrIsExclusiveProcessRunning ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x853F63CA<br />
|}<br />
<br />
=== _vshAppMgrLocalBackupGetOfflineId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD433C0A9<br />
|}<br />
<br />
=== _vshAppMgrLocalBackupVerifyOfflineHeader ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x96BDC2BF<br />
|}<br />
<br />
=== _vshAppMgrRegisterPath ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x179965E7<br />
|}<br />
<br />
=== _vshAppMgrSaveDataLocalBackupTargetGetList ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1A35977D<br />
|}<br />
<br />
=== _vshAppMgrSaveDataLocalBackupTargetRemoveItem ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBE084F03<br />
|}<br />
<br />
=== _vshAppMgrSaveDataNotifyBackupFinished ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCE34242F<br />
|}<br />
<br />
=== _vshAppMgrSystemParamDateTimeSetConf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xBA0385A2<br />
|}<br />
<br />
=== _vshAppMgrUpdateRifInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC9C5AB28<br />
|}<br />
<br />
=== _vshCoredumpCafCreateIv ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2D989282<br />
|}<br />
<br />
=== _vshCoredumpCafHeaderFinal ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC101F8BF<br />
|}<br />
<br />
=== _vshCoredumpCafHeaderTransform ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9B4015E6<br />
|}<br />
<br />
=== _vshCoredumpCafSegmentFinal ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x396BBBEF<br />
|}<br />
<br />
=== _vshCoredumpCafSegmentInit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x88444AB8<br />
|}<br />
<br />
=== _vshCoredumpCafSegmentTransform ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x435AC680<br />
|}<br />
<br />
=== _vshCoredumpCreateDump ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x02ABCAF7<br />
|}<br />
<br />
=== _vshDisplayGetActualViewportConf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9039BF0B<br />
|}<br />
<br />
=== _vshDisplaySetViewportConf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xEDC6652A<br />
|}<br />
<br />
=== _vshEventLogPut ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x87E21AFF<br />
|}<br />
<br />
=== _vshIdStorageCreateAtomicLeaves ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xDD50C65F<br />
|}<br />
<br />
=== _vshIoChstat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE2A2B139<br />
|}<br />
<br />
<source lang="C"><br />
struct vshIoChstatOpt<br />
{<br />
uint32_t unk_0;<br />
uint32_t unk_4;<br />
};<br />
<br />
int _vshIoChstat(const char *file, SceIoStat *stat, int bits, vshIoChstatOpt *opt);<br />
<br />
</source><br />
<br />
=== _vshIoDread ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x7EC1F98E<br />
|}<br />
<br />
<source lang="C">int _vshIoDread(SceUID fd, SceIoDirent *dir);</source><br />
<br />
=== _vshIoGetstat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x756A48A7<br />
|}<br />
<br />
<source lang="C"><br />
struct vshIoGetstatOpt<br />
{<br />
uint32_t unk_0;<br />
uint32_t unk_4;<br />
};<br />
<br />
int _vshIoGetstat(const char *file, SceIoStat *stat, vshIoGetstatOpt* opt);<br />
</source><br />
<br />
=== _vshIoMount ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x3C522C35<br />
|}<br />
<br />
See [[SceIofilemgr#Mount Points]]<br />
<br />
=== _vshKernelGetCompiledSdkVersionByPid ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x74311638<br />
|}<br />
<br />
<source lang="C">int _vshKernelGetCompiledSdkVersionByPid(SceUID pid, int *result);</source><br />
<br />
=== _vshKernelSearchModuleByName ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.692.000-3.740.011 || 0x232F0EEE<br />
|}<br />
<br />
Back in System Software version 1.70, <code>pModuleName</code> was copied from usermode to kernel using [[SceSysmem#sceKernelCopyFromUserForDriver]] with <code>size = pParam->moduleNameLength</code> instead of [[SceSysmem#sceKernelStrncpyFromUserForDriver]]. This means that the copy size could be controlled by usermode, maybe allowing a buffer overflow in kernel ([[SceKernelModulemgr]]).<br />
<br />
<source lang="C"><br />
struct SceKernelSearchModuleByNameParam { // size is 8<br />
SceSize moduleNameLength;<br />
SceUInt32 reserved;<br />
} SceKernelSearchModuleByNameParam;<br />
<br />
SceGUID _vshKernelSearchModuleByName(const SceChar8* pModuleName, const SceKernelSearchModuleByNameParam* pParam);<br />
</source><br />
<br />
=== _vshKernelShutdownSystem ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x933425F1<br />
|}<br />
<br />
=== _vshLedSetMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x04F5FC78<br />
|}<br />
<br />
=== _vshNpDrmEbootSigConvert ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x201871C6<br />
|}<br />
<br />
=== _vshNpDrmEbootSigGenMultiDisc ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAC6C6FCA<br />
|}<br />
<br />
=== _vshNpDrmEbootSigGenPs1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF2CE6E93<br />
|}<br />
<br />
=== _vshNpDrmEbootSigGenPsp ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCE9835A7<br />
|}<br />
<br />
=== _vshNpDrmEbootSigVerify ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAC48443B<br />
|}<br />
<br />
=== _vshNpDrmGetLegacyDocKey ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE6D625B8<br />
|}<br />
<br />
<source lang="C"><br />
struct vshNpDrmGetLegacyDocKey_opt //size is 0x10<br />
{<br />
void *dest;<br />
int data_size;<br />
uint32_t unk_8;<br />
uint32_t unk_C;<br />
};<br />
<br />
int _vshNpDrmGetLegacyDocKey(void *rif_data, void *data1, int index, vshNpDrmGetLegacyDocKey_opt *opt);<br />
</source><br />
<br />
=== _vshNpDrmPspEbootSigGen ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC74F7D57<br />
|}<br />
<br />
=== _vshNpDrmPspEbootVerify ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x3CD0DBD6<br />
|}<br />
<br />
=== _vshPowerSetBatteryFakeStatus ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD0BEC0CC<br />
|}<br />
<br />
=== _vshRtcGetAlarmTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x998DAF02<br />
|}<br />
<br />
=== _vshRtcGetCurrentSecureTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xAF6A2745<br />
|}<br />
<br />
=== _vshRtcGetSecureAlarmTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xFA280B0B<br />
|}<br />
<br />
=== _vshRtcSetAlarmTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8BFEBC76<br />
|}<br />
<br />
=== _vshRtcSetCurrentDebugNetworkTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9412BA2C<br />
|}<br />
<br />
=== _vshRtcSetCurrentNetworkTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x2B27AE6E<br />
|}<br />
<br />
=== _vshRtcSetCurrentSecureTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC350E6CF<br />
|}<br />
<br />
=== _vshRtcSetCurrentTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC4DDAC72<br />
|}<br />
<br />
=== _vshRtcSetSecureAlarmTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC49D8699<br />
|}<br />
<br />
=== _vshSDfCtlSetBootParameter ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD4DE24E2<br />
|}<br />
<br />
=== _vshSblAimgrGetConsoleId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xF183726E<br />
|}<br />
<br />
<source lang="C"><br />
<br />
typedef struct SceConsoleId {<br />
unsigned char data[0x10];<br />
} SceConsoleId;<br />
<br />
int _vshSblAimgrGetConsoleId(SceConsoleId *pData);<br />
<br />
</source><br />
<br />
=== _vshSblAimgrGetPscode2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x71B2ADE6<br />
|}<br />
<br />
<source lang="C"><br />
<br />
typedef struct ScePscode {<br />
unsigned char data[8];<br />
} ScePscode;<br />
<br />
int _vshSblAimgrGetPscode2(ScePscode *pData);<br />
<br />
</source><br />
<br />
=== _vshSblAimgrGetPscode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1AF2CFC9<br />
|}<br />
<br />
<source lang="C">int _vshSblAimgrGetPscode(ScePscode *pData);</source><br />
<br />
=== _vshSblAimgrGetSMI ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x28C4D6D6<br />
|}<br />
<br />
<source lang="C">int _vshSblAimgrGetSMI(int *result);</source><br />
<br />
=== _vshSblAimgrGetVisibleId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xB693DA6E<br />
|}<br />
<br />
<source lang="C"><br />
<br />
typedef struct SceVisibleId {<br />
unsigned char data[0x20];<br />
} SceVisibleId;<br />
<br />
int _vshSblAimgrGetVisibleId(SceVisibleId *pData);<br />
<br />
</source><br />
<br />
=== _vshSblAuthMgrVerifySpsfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xBA7BDD18<br />
|}<br />
<br />
<source lang="C"><br />
struct spsfo_opt<br />
{<br />
uint32_t unk_0;<br />
uint32_t unk_4;<br />
};<br />
int _vshSblAuthMgrVerifySpsfo(char *path_user, char *dest_user, int maxSize, spsfo_opt *opt);<br />
</source><br />
<br />
=== _vshSblGcAuthMgrMlnpsnlAuth1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD643667D<br />
|}<br />
<br />
=== _vshSblGcAuthMgrMlnpsnlAuth2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x96E89920<br />
|}<br />
<br />
=== _vshSblGetSystemSwVersion ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0F529915<br />
|}<br />
<br />
<source lang="C">int _vshSblGetSystemSwVersion(SceKernelFwInfo *pInfo);</source><br />
<br />
=== _vshSblSsCreatePassPhrase ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x4079CD88<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceVshSblSsCreatePassPhraseArgs { // size is 0x18<br />
SceUInt32 reserved; // ex: 0<br />
SceSize size; // Size of this structure<br />
char accountIdText[0x10]; // Taken from registry "/CONFIG/NP/account_id" and converted to ASCII<br />
} SceVshSblSsCreatePassPhraseArgs;<br />
<br />
int _vshSblSsCreatePassPhrase(SceVshSblSsCreatePassPhraseArgs *pArgs, void *pPassPhrase, SceSize *piPassPhraseSize);<br />
</source><br />
<br />
=== _vshSblSsDecryptWithPortability ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x99506729<br />
|}<br />
<br />
=== _vshSblSsEncryptWithPortability ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x3F6DF5F3<br />
|}<br />
<br />
=== _vshSblSsGenerateAppKey ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x82F2FBA8<br />
|}<br />
<br />
=== _vshSblSsGetNvsData ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x9DFA6D33<br />
|}<br />
<br />
=== _vshSblSsSetNvsData ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC176D19F<br />
|}<br />
<br />
=== _vshSysconCtrlManualChargeMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x07B43EFB<br />
|}<br />
<br />
=== _vshSysconGetHardwareInfo2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD7A3D69C<br />
|}<br />
<br />
=== _vshSysconGetHardwareInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x21000193<br />
|}<br />
<br />
=== _vshSysconGetManualChargeMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3CCFAEF4<br />
|}<br />
<br />
=== _vshSysconGetManufacturesStatus ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x484DE68A<br />
|}<br />
<br />
<source lang="C">int _vshSysconGetManufacturesStatus(int *result);</source><br />
<br />
=== _vshSysconGetTemperatureLog ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1D80FCB8<br />
|}<br />
<br />
=== _vshSysconGetUsbDetStatus ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x863AD3C2<br />
|}<br />
<br />
=== _vshSysconLogReadData ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x33A4F9DA<br />
|}<br />
<br />
=== _vshTouchSetTouchEmulationData ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x77AA1E8B<br />
|}<br />
<br />
=== vshAppMgrCheckContentInstallPeriod ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8657814C<br />
|}<br />
<br />
=== vshAppMgrCloudDataClearMcId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE42605BB<br />
|}<br />
<br />
=== vshAppMgrDebugSettingNotifyUpdate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xA82E2E98<br />
|}<br />
<br />
=== vshAppMgrGetPfsProcessStatus ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB311FDE1<br />
|}<br />
<br />
=== vshCoredumpCafContextCreate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1FC9739A<br />
|}<br />
<br />
=== vshCoredumpCafContextDestroy ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE638A942<br />
|}<br />
<br />
=== vshCoredumpCafFinal ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x54012367<br />
|}<br />
<br />
=== vshCoredumpCafHeaderInit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5A4ECC6F<br />
|}<br />
<br />
=== vshCoredumpCafInit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3A0D9473<br />
|}<br />
<br />
=== vshCoredumpDeleteCrashReportCaf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x552CF1D6<br />
|}<br />
<br />
=== vshCtrlChangePortAssign ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x205B765C<br />
|}<br />
<br />
=== vshCtrlGetActiveControllerPort ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB0132625<br />
|}<br />
<br />
=== vshCtrlIsBdRemoconConnected ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB1D615A6<br />
|}<br />
<br />
=== vshCtrlRegisterNotifyCallBack ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x25B77E4F<br />
|}<br />
<br />
=== vshCtrlSetIdleCancelKey ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8E7F67F1<br />
|}<br />
<br />
=== vshCtrlSetIdleCancelThreshold ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xABA88997<br />
|}<br />
<br />
=== vshCtrlSetTurnOffInterval ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x27CC1CF5<br />
|}<br />
<br />
=== vshCtrlSetVibrationSetting ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x59F24C78<br />
|}<br />
<br />
=== vshCtrlUnregisterNotifyCallBack ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x64DB80C8<br />
|}<br />
<br />
=== vshDisplayRegisterFrameBufCallback ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x9038C55C<br />
|}<br />
<br />
=== vshDisplaySetInvertColors ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x27DFAD31<br />
|}<br />
<br />
=== vshHdmiCecCmdForcedPollingMsg ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD53E02C5<br />
|}<br />
<br />
=== vshHdmiDisableCec ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBDCF9D86<br />
|}<br />
<br />
=== vshHdmiEnableCec ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0FD12633<br />
|}<br />
<br />
=== vshIdStorageCreateLeaf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8E0E0C7D<br />
|}<br />
<br />
=== vshIdStorageDeleteLeaf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x51855867<br />
|}<br />
<br />
=== vshIdStorageFlush ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x32691EA3<br />
|}<br />
<br />
=== vshIdStorageFormat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1AB26527<br />
|}<br />
<br />
=== vshIdStorageGetFreeLeaves ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1A64C088<br />
|}<br />
<br />
=== vshIdStorageGetLeafSize ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x05A07BFD<br />
|}<br />
<br />
=== vshIdStorageIsDirty ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x5EBE2E01<br />
|}<br />
<br />
=== vshIdStorageIsFormatted ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x26115B5A<br />
|}<br />
<br />
=== vshIdStorageIsReadOnly ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xCD926259<br />
|}<br />
<br />
=== vshIdStorageLookup ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x58BA5A8D<br />
|}<br />
<br />
=== vshIdStorageReadLeaf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xDBD1D01C<br />
|}<br />
<br />
=== vshIdStorageRestart ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x7D767ECF<br />
|}<br />
<br />
=== vshIdStorageUnformat ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x540BD151<br />
|}<br />
<br />
=== vshIdStorageUpdate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x9693D645<br />
|}<br />
<br />
=== vshIdStorageWriteLeaf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE5083DB6<br />
|}<br />
<br />
=== vshIoClearErrorEvent ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD950A054<br />
|}<br />
<br />
=== vshIoCreateErrorEvent ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x0D2A63DD<br />
|}<br />
<br />
=== vshIoCreateMountEvent ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x025AD398<br />
|}<br />
<br />
<source lang="C">SceUID vshIoCreateMountEvent(int mount_point, int a2);</source><br />
<br />
=== vshIoDeleteErrorEvent ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x86EBB9FD<br />
|}<br />
<br />
=== vshIoDeleteMountEvent ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x57F63369<br />
|}<br />
<br />
=== vshIoFlock ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xDAB83424<br />
|}<br />
<br />
=== vshIoGetProcessDefaultPriorityForSystem ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xBD2BAF2B<br />
|}<br />
<br />
=== vshIoSetProcessDefaultPriorityForSystem ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xF581621D<br />
|}<br />
<br />
=== vshIoUmount ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x35BC26AC<br />
|}<br />
<br />
<source lang="C"><br />
/**<br />
* @param[in] id - mount id<br />
* @param[in] force - Set to 1 to force umount<br />
* @param[in] unk2 - Unknown, set 0<br />
* @param[in] unk3 - Unknown, set 0<br />
*<br />
* @return 0 >= on success, < 0 on error.<br />
*/<br />
int vshIoUmount(int id, int force, int unk2, int unk3); <br />
</source><br />
<br />
=== vshKernelCheckModelCapability ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x9B38EAEC<br />
|}<br />
<br />
=== vshKernelDisableAutoClockDown ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0A18C46C<br />
|}<br />
<br />
=== vshKernelEnableAutoClockDown ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x29459DD2<br />
|}<br />
<br />
=== vshKernelSendSysEvent ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x71D9DB5C<br />
|}<br />
<br />
<source lang="C">int vshKernelSendSysEvent(int a1);</source><br />
<br />
=== vshMemoryCardEnableSlowMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xECE08D1D<br />
|}<br />
<br />
=== vshMemoryCardGetCardInsertState ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1ED13AD6<br />
|}<br />
<br />
=== vshMotionNoiseFilterIsAvailable ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x334E9FD3<br />
|}<br />
<br />
=== vshMsifGetMsInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931-3.00 || not present<br />
|-<br />
| 3.60 || 0x349AA70B<br />
|}<br />
<br />
Wrapper to [[SceMsif#sceMsifGetMsInfoForDriver]].<br />
<br />
=== vshNpDrmIsLooseAccountBind ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x333875AB<br />
|}<br />
<br />
=== vshNpDrmUpdateAccountId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCB46FAB0<br />
|}<br />
<br />
=== vshNpDrmUpdateDebugSettings ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x89D89CAC<br />
|}<br />
<br />
=== vshPowerGetWakeupFactor ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x718B98BB<br />
|}<br />
<br />
=== vshPowerRequestColdReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x4123D4C1<br />
|}<br />
<br />
=== vshPowerRequestHibernate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xAFDAA0D2<br />
|}<br />
<br />
=== vshPowerSetPowerSwMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xDA3E4AE6<br />
|}<br />
<br />
=== vshPowerSetPsButtonPushTime ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC114F160<br />
|}<br />
<br />
=== vshPowerSetStandbyButtonPushTime ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x85745035<br />
|}<br />
<br />
=== vshRemovableMemoryGetCardInsertState ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC63787B6<br />
|}<br />
<br />
=== vshRtcIsAlarmed ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x26120975<br />
|}<br />
<br />
=== vshRtcIsSecureAlarmed ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x8BF60888<br />
|}<br />
<br />
=== vshRtcIsSecureAlarmed ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x8BF60888<br />
|}<br />
<br />
=== vshRtcRegisterCallback ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xC9970EDA<br />
|}<br />
<br />
=== vshRtcRegisterSecureAlarmCallback ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x70F1BD81<br />
|}<br />
<br />
=== vshRtcSetConf ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE35889FF<br />
|}<br />
<br />
=== vshRtcUnregisterCallback ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xF057C477<br />
|}<br />
<br />
=== vshRtcUnregisterSecureAlarmCallback ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xAB49F6E3<br />
|}<br />
<br />
=== vshSblACMgrHasCapability ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD8E5F14A<br />
|}<br />
<br />
=== vshSblAimgrIsCEX ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x27216A82<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsCEX(void);</source><br />
<br />
=== vshSblAimgrIsDEX ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xBAFAC501<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsDEX(void);</source><br />
<br />
=== vshSblAimgrIsTool ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x3BBD5935<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsTool(void);</source><br />
<br />
=== vshSblAimgrIsTest ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xA357D6CC<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsTest(void);</source><br />
<br />
=== vshSblAimgrIsVITA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE9168697<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsVITA(void);</source><br />
<br />
<br />
=== vshSblAimgrIsGenuineVITA ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB6F795A6<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsGenuineVITA(void);</source><br />
<br />
=== vshSblAimgrIsDolce ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2C28B1B0<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsDolce(void);</source><br />
<br />
=== vshSblAimgrIsGenuineDolce ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xDDFC4EEE<br />
|}<br />
<br />
<source lang="C">int vshSblAimgrIsGenuineDolce(void);</source><br />
<br />
=== vshSblPmMgrSetSdModeOff ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x2E7A3AF7<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowControlIduAutoUpdate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x51CE4C9A<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowDtcpIpReset ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD0C8D4EC<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowFakeACInstall ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x565E0504<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowKeepCoreFile ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xA458FACE<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowLiblocationChangeModel ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x58E1DE33<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowLoadMagicGate ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x12831F05<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowLoadPSPEmuWhiteList ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x3F3B2DEF<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowMarlinTest ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x1484AF06<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowNearTest ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD0D4EB67<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowPSPEmuDeleteParameter ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3FB89A16<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowPSPEmuScreenShot ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF1178BE6<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowPSPEmuSelectNPEnv ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2B5DEE0F<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowPSPEmuShowQAInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB19EAB45<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowRemotePlayDebug ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBAF52A4A<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowShowTitleUpgradeInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x314BFD78<br />
|}<br />
<br />
=== vshSblQafMgrIsAllowSystemAppDebug ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x31AACDD2<br />
|}<br />
<br />
=== vshSblSsIsDevelopmentMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x641890D8<br />
|}<br />
<br />
<source lang="C">int vshSblSsIsDevelopmentMode(void);</source><br />
<br />
=== vshSblUtMgrHasComTestFlag ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x06AD7CBB<br />
|}<br />
<br />
<source lang="C">int vshSblUtMgrHasComTestFlag(void);</source><br />
<br />
=== vshSblUtMgrHasNpTestFlag ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xAD95CBE8<br />
|}<br />
<br />
<source lang="C">int vshSblUtMgrHasNpTestFlag(void);</source><br />
<br />
=== vshSblUtMgrHasStoreFlag ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x4A004B05<br />
|}<br />
<br />
<source lang="C">int vshSblUtMgrHasStoreFlag(void);</source><br />
<br />
=== vshSdGetCardInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE99DBAB2<br />
|}<br />
<br />
=== vshSysconBeginConfigstorageTransaction ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x972B68A2<br />
|}<br />
<br />
=== vshSysconLoadConfigstorageScript ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x7623662F<br />
|}<br />
<br />
=== vshSysconCommitConfigstorageTransaction ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x2931A602<br />
|}<br />
<br />
=== vshSysconEndConfigstorageTransaction ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x05DFCAEE<br />
|}<br />
<br />
=== vshSysconVerifyConfigstorageScript ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE1E2BAD0<br />
|}<br />
<br />
=== vshSysconEnableHibernateIO ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xF2CF8BD3<br />
|}<br />
<br />
=== vshSysconGetBatteryCalibData ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xF4F2F841<br />
|}<br />
<br />
=== vshSysconIduModeSet ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x4A2F495A<br />
|}<br />
<br />
<source lang="C">int vshSysconIduModeSet(void);</source><br />
<br />
=== vshSysconIduModeClear ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x3C8BE31F<br />
|}<br />
<br />
<source lang="C">int vshSysconIduModeClear(void);</source><br />
<br />
=== vshSysconIsIduMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xE493EFF4<br />
|}<br />
<br />
<source lang="C">int vshSysconIsIduMode(void);</source><br />
<br />
=== vshSysconShowModeSet ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x5E2A8BBD<br />
|}<br />
<br />
<source lang="C">int vshSysconShowModeSet(void);</source><br />
<br />
=== vshSysconShowModeClear ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xD7E71C94<br />
|}<br />
<br />
<source lang="C">int vshSysconShowModeClear(void);</source><br />
<br />
=== vshSysconIsShowMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0xFF244636<br />
|}<br />
<br />
<source lang="C">int vshSysconIsShowMode(void);</source><br />
<br />
=== vshSysconHasWWAN ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCEC8B917<br />
|}<br />
<br />
<source lang="C">int vshSysconHasWWAN(void);</source><br />
<br />
=== vshSysconIsDownLoaderMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x00A4ADA2<br />
|}<br />
<br />
<source lang="C">int vshSysconIsDownLoaderMode(void);</source><br />
<br />
=== vshSysconIsMCEmuCapable ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x32D0951D<br />
|}<br />
<br />
=== vshSysconLogStart ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x4404595B<br />
|}<br />
<br />
=== vshSysconLogStartWaiting ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xCB53B13C<br />
|}<br />
<br />
=== vshSysconClearTemperatureLog ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x83DDCF27<br />
|}<br />
<br />
=== vshSysconGetLogInfo ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69-3.60 || 0x723FDFD9<br />
|}<br />
<br />
=== _vshIoRmdev ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0xABA3EB4C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== _vshSblAimgrGetOpenPsId ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x9FA17A89<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== _vshSblGcAuthMgrAdhocBB224Auth1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x77BFA6A2<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== _vshSblGcAuthMgrAdhocBB224Auth2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x6C757B8B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== _vshSblGcAuthMgrAdhocBB224Auth3 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x69C73C7A<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== _vshSblGcAuthMgrAdhocBB224Auth4 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0xEDF7285F<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== _vshSblGcAuthMgrAdhocBB224Auth5 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x484CECAF<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== _vshSblGcAuthMgrAdhocBB224GetKeys ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x415D0502<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== sceSblAimgrIsCEX ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0xA64F334B<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== vshDisplaySetColorSpaceMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x12E3C5FF<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== vshSblGcAuthMgrAdhocBB224Init ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0xD6EA8623<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
=== vshSblGcAuthMgrAdhocBB224Shutdown ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x9CEE676C<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
== SceVshBridgeAdditional ==<br />
<br />
=== vshSblSsIsDevelopmentMode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 1.69 || 0x641890D8<br />
|-<br />
| 3.60 || not present<br />
|}<br />
<br />
== SceDrmBridge ==<br />
<br />
This library is not present on FWs <= 1.03.<br />
<br />
=== sceDrmBridgeGetCurrentSecureTick ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xFFB164E2<br />
|}<br />
<br />
<source lang="C">int sceDrmBridgeGetCurrentSecureTick(...);</source><br />
<br />
=== sceDrmBridgeIsAllowRemotePlayDebug ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1BBB62E9<br />
|}<br />
<br />
<source lang="C">SceBool sceDrmBridgeIsAllowRemotePlayDebug(void);</source><br />
<br />
=== sceDrmBridgeIsAllowGameDebug ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xB81B597A<br />
|}<br />
<br />
This is a guessed name, but near of official.<br />
<br />
<source lang="C">SceBool sceDrmBridgeIsAllowGameDebug(void);</source><br />
<br />
=== sceDrmBridgeMlnpsnlAuth1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE04F767B<br />
|}<br />
<br />
<source lang="C">int sceDrmBridgeMlnpsnlAuth1(int *a1, int *a2, int a3);</source><br />
<br />
=== sceDrmBridgeMlnpsnlAuth2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6D483DFC<br />
|}<br />
<br />
<source lang="C">int sceDrmBridgeMlnpsnlAuth2(...);</source><br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSyscon&diff=21089
SceSyscon
2024-01-23T20:59:03Z
<p>CelesteBlue: /* SceSysconForDriver_35E1689F */</p>
<hr />
<div>SceSyscon is a kernel module in charge of interacting with the System Controller by executing commands.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.931.010-3.740.011 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.931.010-3.740.011 || [[SceSyscon#SceSysconForDriver|SceSysconForDriver]] || Non-secure || Kernel || 0x60A35F64<br />
|}<br />
<br />
== Types ==<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_ERROR_SYSCON_ERROR 0x80250000<br />
#define SCE_SYSCON_ERROR_INVALID_SIZE 0x80250001<br />
#define SCE_SYSCON_ERROR_INVALID_ARGUMENT 0x80250002<br />
#define SCE_SYSCON_ERROR_INVALID_POINTER 0x80250003<br />
#define SCE_SYSCON_ERROR_INVALID_STATUS 0x80250004<br />
#define SCE_SYSCON_ERROR_NOT_INTR_ALLOWED 0x80250005<br />
#define SCE_SYSCON_ERROR_TX_SIZE_TOO_LONG 0x80250006<br />
<br />
#define SCE_SYSCON_ERROR_ILLEGAL_SIZE 0x80250100<br />
#define SCE_SYSCON_ERROR_ILLEGAL_STATUS 0x80250101<br />
#define SCE_SYSCON_ERROR_NOEXEC 0x80250102<br />
#define SCE_SYSCON_ERROR_INVALID_FLAGS 0x80250105<br />
<br />
// Syscon error codes are gotten with 0x80250200 | rx[3], where rx is the data returned by Syscon<br />
<br />
typedef struct SceSysconPacket { // size is 0x80<br />
struct SceSysconPacket *next;<br />
SceUInt32 status; // Lower 16 bits contain flags<br />
SceUID semaId;<br />
SceUInt32 index; // Out: returns to which packet list the packet was inserted into<br />
SceUInt8 tx[32]; // tx[0..1] = cmd, tx[2] = size i.e. sizeof(actual_data)+1, rx[3..31] = actual_data<br />
SceUInt8 rx[32]; // rx[0..1] = cmd, rx[2] = size i.e. sizeof(actual_data)+2, rx[3] = error_code, rx[4..31] = actual_data<br />
void *tx_extra;<br />
void *rx_extra;<br />
SceSize rx_extra_size;<br />
SceUInt32 rx_offset;<br />
int (*callback)(SceSysconPacket *packet, void *argp);<br />
void *argp;<br />
SceUInt32 time;<br />
SceUInt32 unk[5];<br />
} SceSysconPacket;<br />
<br />
typedef enum SceSysconControl {<br />
SCE_SYSCON_CTRL_UP = 0x1,<br />
SCE_SYSCON_CTRL_RIGHT = 0x2,<br />
SCE_SYSCON_CTRL_DOWN = 0x4,<br />
SCE_SYSCON_CTRL_LEFT = 0x8,<br />
SCE_SYSCON_CTRL_TRIANGLE = 0x10,<br />
SCE_SYSCON_CTRL_CIRCLE = 0x20,<br />
SCE_SYSCON_CTRL_CROSS = 0x40,<br />
SCE_SYSCON_CTRL_SQUARE = 0x80,<br />
SCE_SYSCON_CTRL_SELECT = 0x100,<br />
SCE_SYSCON_CTRL_LTRIGGER = 0x200,<br />
SCE_SYSCON_CTRL_RTRIGGER = 0x400,<br />
SCE_SYSCON_CTRL_START = 0x800,<br />
SCE_SYSCON_CTRL_PSBUTTON = 0x1000,<br />
SCE_SYSCON_CTRL_POWER = 0x4000,<br />
SCE_SYSCON_CTRL_VOLUP = 0x10000,<br />
SCE_SYSCON_CTRL_VOLDOWN = 0x20000,<br />
SCE_SYSCON_CTRL_HEADPHONE = 0x8000000<br />
} SceSysconControl;<br />
</source><br />
<br />
Flags (passed to <code>sceSysconCmdExecForDriver</code>, etc), also lower bits of <code>status</code>:<br />
{| class="wikitable"<br />
! Flags !! Meaning<br />
|-<br />
| 0x1 || Some kind of priority that helps to select to which packet list the packet is inserted into.<br />
|-<br />
| 0x100 || Do not insert packet checksum (at <code>tx_buf[2 + len]</code>), where <code>len = tx_buf[2]</code>. And don't memset the rest of the buffer to -1 (<code>memset(tx_buf + len + 3, -1, 29 - len)</code>) if len < 29.<br />
|-<br />
| 0x400 || When set, use rx_extra to receive the data. rx_extra_size must be greater than 32.<br />
|-<br />
| 0x800 || When set, use tx_extra instead of tx for sending data. The size is contained in tx_extra[2] and must be smaller or equal to 253. When cleared: use tx and the size is contained in tx[2], which has to be smaller or equal 29.<br />
|}<br />
<br />
== SceSysconForDriver ==<br />
<br />
=== sceSysconErnieShutdownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x94AB13CC<br />
|}<br />
<br />
Calls Syscon command 0xC1.<br />
<br />
<source lang="C"><br />
#define ERNIE_SHUTDOWN_SHUTDOWN 0<br />
#define ERNIE_SHUTDOWN_REBOOT 1<br />
<br />
int sceSysconErnieShutdownForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconErnieResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x14B99945<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconPowerCtrlKermitResetForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=RESET and mode=0: <code>return sceSysconSetPowerModeForDriver(2, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieResetForDriver(void);</source><br />
<br />
=== sceSysconErnieHibernateForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4278E614<br />
|}<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=HIBERNATE and mode=0: <code>return sceSysconSetPowerModeForDriver(5, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieHibernateForDriver(void);</source><br />
<br />
=== sceSysconBatterySWResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x87DA378D<br />
|}<br />
<br />
If Syscon version <= 0x70503, it does nothing and returns error 0x8025023F.<br />
<br />
<source lang="C">int sceSysconBatterySWResetForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xF93CF833<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryFullCapacityForDriver.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(SceUInt32 *pCap);</source><br />
<br />
=== sceSysconGetBicTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000 || 0xECFA7242<br />
|-<br />
| 1.000.041-3.740.011 || not present. Renamed to sceSysconGetAbbyTempForDriver.<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replaced (just renaming) by [[#sceSysconGetAbbyTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetBicTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetAbbyTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present. Was named sceSysconGetBicTempForDriver.<br />
|-<br />
| 1.000.041-3.740.011 || 0xE1885F68<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replacement (just renaming) for [[#sceSysconGetBicTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetAbbyTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetBatteryCycleCountForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCD73079D<br />
|}<br />
<br />
Calls Syscon command 0x98C.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryCycleCountForDriver(SceUInt32 *pCount);</source><br />
<br />
=== sceSysconBatteryStartBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2CEF078E<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStartBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatteryStopBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4AE7852<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStopBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatterySetBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4F29744<br />
|}<br />
<br />
BL command (1 byte at most) must be contained in either unk_byte or pSrc.<br />
<br />
<source lang="C">int sceSysconBatterySetBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk_byte, void *pSrc, SceUInt8 size);</source><br />
<br />
=== sceSysconBatteryExecBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x74B2AB55<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryExecBLCommandForDriver(SceUInt16 ctx);</source><br />
<br />
=== sceSysconBatteryReadBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x448DAFF1<br />
|}<br />
<br />
<source lang="C"><br />
// size must be between 0 and 0x10<br />
int sceSysconBatteryReadBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk1, SceUInt8 unk2, void *pDst, SceUInt8 size);<br />
</source><br />
<br />
=== sceSysconGetManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4FEC564C<br />
|}<br />
<br />
<source lang="C">int sceSysconGetManualChargeModeForDriver(int *piMode);</source><br />
<br />
=== sceSysconCtrlManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xC6A2C9EF<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlManualChargeModeForDriver(int mode);</source><br />
<br />
=== sceSysconSetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B6A6F64<br />
|}<br />
<br />
Calls Syscon command 0x81.<br />
<br />
Sets current Syscon power on time in ticks of 0.5 second. The set value can be get with [[#sceSysconGetClockForDriver]].<br />
<br />
Used in [[SceRtc]]. Set to 0 just before setting Current Tick, to reset syscon power on time.<br />
<br />
<source lang="C">int sceSysconSetClockForDriver(SceUInt32 time);</source><br />
<br />
=== SceSysconForDriver_51164951 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x51164951<br />
|}<br />
<br />
Calls Syscon command 0x82. On Syscon version < 0x90907, 4 bytes are sent to Syscon, whilst on Syscon version >= 0x90907, 5 bytes are sent to Syscon.<br />
<br />
Sets an alarm tick. The set tick can be get using Syscon command 0x12 via [[#SceSysconForDriver_3168F3AF]].<br />
<br />
Used in [[SceRtc#sceRtcSetAlarmTickForDriver]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_51164951(void *tick);<br />
<br />
// FW 3.600.011-3.740.011<br />
// tick_low: seen value: 0xffffffff during Syscon Init<br />
// tick_hi: some 8-bit flag, seen value: 0 during Syscon Init<br />
int SceSysconForDriver_51164951(SceUint32 tick_low, SceUInt8 tick_hi);<br />
</source><br />
<br />
=== SceSysconForDriver_373ECF8A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x373ECF8A<br />
|}<br />
<br />
Calls Syscon command 0x83. Sends 3 bytes to Syscon. Used only if [[KBL Param#Hardware Info|Hardware Info]] indicates that the motherboard is not IRT-001 or IRT-002 or type 0x10 (maybe named IRS-001) and if console is not in manufacturing mode.<br />
<br />
<source lang="C">int SceSysconForDriver_373ECF8A(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_2659535C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x2659535C<br />
|}<br />
<br />
Calls Syscon command 0x84. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_2659535C(void);</source><br />
<br />
=== SceSysconForDriver_4295D497 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4295D497<br />
|}<br />
<br />
Calls Syscon command 0x85. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_4295D497(void);</source><br />
<br />
=== sceSysconGetLogInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x701535FC<br />
|}<br />
<br />
Calls Syscon command 0x86.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconLogInfo { // size is 8 on FW 3.600.011<br />
uint8_t unk_0[8];<br />
} SceSysconLogInfo;<br />
<br />
int sceSysconGetLogInfoForDriver(SceSysconLogInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLogStartForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E55CF5E<br />
|}<br />
<br />
Calls Syscon command 0x87. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int sceSysconLogStartForDriver(void);</source><br />
<br />
=== sceSysconLogReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x487D97F3<br />
|}<br />
<br />
Calls Syscon command 0x88.<br />
<br />
<source lang="C">int sceSysconLogReadDataForDriver(SceUInt16 offset, void *pData, SceSize size);</source><br />
<br />
=== sceSysconLogStartWaitingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x9C0B1E61<br />
|}<br />
<br />
Calls Syscon command 0x89.<br />
<br />
<source lang="C">int sceSysconLogStartWaitingForDriver(void);</source><br />
<br />
=== sceSysconCtrlUSBSupplyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7BFA95DA<br />
|}<br />
<br />
This function is used instead of [[#sceSysconCtrlChargeVBUSForDriver]] on PS Vita Slim.<br />
<br />
Calls Syscon command 0x8C8. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
Used in factTest module.<br />
<br />
<source lang="C">int sceSysconCtrlUSBSupplyForDriver(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_451C1662 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x451C1662<br />
|}<br />
<br />
Calls Syscon command 0x8C9. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_451C1662(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_79074DE4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x79074DE4<br />
|}<br />
<br />
Calls Syscon command 0x8CA. Sends 0 byte to Syscon. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_79074DE4(SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_7D25F6D2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7D25F6D2<br />
|}<br />
<br />
Calls Syscon command 0x8CB. Sends 1 byte to Syscon: id. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_7D25F6D2(SceUInt8 id, SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_D2ADABCA ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xD2ADABCA<br />
|}<br />
<br />
Calls Syscon command 0x8CC. Sends 2 bytes from Syscon: id, data.<br />
<br />
<source lang="C">int SceSysconForDriver_D2ADABCA(SceUInt8 id, SceUInt8 data);</source><br />
<br />
=== sceSysconGetTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3B354824<br />
|}<br />
<br />
Calls Syscon command 0x8CE. Gets 0x10 bytes from Syscon.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconTemperatureLog { // size is 0x10 bytes<br />
char log[16];<br />
} SceSysconTemperatureLog;<br />
<br />
int sceSysconGetTemperatureLogForDriver(SceSysconTemperatureLog *pLog);<br />
</source><br />
<br />
=== sceSysconClearTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3843D657<br />
|}<br />
<br />
Calls Syscon command 0x8CF. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int sceSysconClearTemperatureLogForDriver(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_F87679EE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 3.600.011-3.740.011 || 0xF87679EE<br />
|}<br />
<br />
Calls Syscon command 0x8D0. Sends 2 bytes to Syscon.<br />
<br />
Probably related to Syscon Temperature Log.<br />
<br />
<source lang="C">int SceSysconForDriver_F87679EE(SceUInt32 unk);</source><br />
<br />
=== sceSysconGetUsbDetStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xEF810687<br />
|}<br />
<br />
Calls Syscon command 0x805.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int sceSysconGetUsbDetStatusForDriver(SceUInt32 *pStatus);</source><br />
<br />
=== SceSysconForDriver_E7F5D3DC ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7F5D3DC<br />
|}<br />
<br />
Calls Syscon command 0x806.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
On PS TV returns data 0x00000000<br />
<br />
<source lang="C">int SceSysconForDriver_E7F5D3DC(SceUInt32 *pResult);</source><br />
<br />
=== SceSysconForDriver_253CC522 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x253CC522<br />
|}<br />
<br />
Calls Syscon command 0x807. Gets 2 bytes from Syscon.<br />
<br />
On DevKit, it returns 0x8025023F. Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
On PS TV returns data 0xca1a<br />
<br />
<source lang="C">int SceSysconForDriver_253CC522(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconCtrlDolceLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x727F985A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
#define STATE_ON 0<br />
#define STATE_BLINK_SLOW 1<br />
#define STATE_BLINK_FAST 2<br />
<br />
int sceSysconCtrlDolceLEDForDriver(SceUInt32 state);<br />
</source><br />
<br />
=== sceSysconGetTimeStampForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4D588A0A<br />
|}<br />
<br />
This is a guessed named, derived from PSP. Temp name was sceSysconGetBaryonTimestampForDriver.<br />
<br />
Returns the timestamp of latest installed Syscon firmware patch, formatted as <code>YYYYMMDDhhmm</code>. This comes from a string stored in Syscon firmware under another format: <code>$Date:: YYYY-MM-DD hh:mm:ss +0900#$</code><br />
<br />
Example: <code>$Date:: 2013-12-13 15:52:05 +0900#$</code> in Syscon firmware becomes <code>201312131552</code> in Syscon command 2.<br />
<br />
<source lang="c"><br />
// pTimestamp will point to a buffer of size 0x10 bytes, containing a string of size 13 (12: length + 1: terminal character)<br />
int sceSysconGetTimeStampForDriver(char *pTimestamp);<br />
</source><br />
<br />
=== sceSysconGetWakeupFactorForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCF5B2F2F<br />
|}<br />
<br />
Result is 2 bytes wakeup factor coming from Syscon command 0x10.<br />
<br />
Used in [[SceWlanBt]].<br />
<br />
<source lang="C">int sceSysconGetWakeupFactorForDriver(SceUInt32 *pWakeupFactor);</source><br />
<br />
=== sceSysconCtrlHdmiCecPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x62155962<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
Sets the pin CDC Hot Plug Detect (HPD) state of the HDMI bridge (AD80244 / ADV7533).<br />
<br />
<source lang="c">int sceSysconCtrlHdmiCecPowerForDriver(SceBool enable_HDMI_CDC_HPD_pin);</source><br />
<br />
=== sceSysconCtrlMotionSensorPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x063425AE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
<source lang="C">int sceSysconCtrlMotionSensorPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3FDD29D6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3FDD29D6<br />
|}<br />
<br />
Calls Syscon command 0x884. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_3FDD29D6(int value, SceBool use_flag);</source><br />
<br />
=== SceSysconForDriver_79E6DD8B ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x79E6DD8B<br />
|}<br />
<br />
Calls Syscon command 0x885. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_79E6DD8B(int value, SceBool use_flag);</source><br />
<br />
=== sceSysconCtrlVoltageForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.920.050-3.740.011 || 0x7F198FA2<br />
|}<br />
<br />
Temp name was sceSysconSetVoltageForDriver.<br />
<br />
Calls Syscon command 0x88E.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
/*<br />
type:<br />
0: Reserved<br />
1: DD1 (VDD - IFTU, DMAC, Internal bus, SPM 32KiB/128KiB) SetSysClockFrequency, SetDmac5ClockFrequency, SetBusClockFrequency, SetCameraBusClockFrequency<br />
2: DD2 (VDDA - ARM core, L2 cache) SetArmClockFrequency<br />
3: DD3 (VDDC - Codec Engine, AVC Decoder) SetVipClockFrequency, SetVeneziaClockFrequency<br />
4: DD4 (VDDG - GPU core) SetGpuClockFrequencyInternal, SetGpuXbarClockFrequency, SetCompatClockFrequency<br />
<br />
vid:<br />
0x22 (0.34V)<br />
0x8A (1.38V) - (something got from ScePervasiveForDriver)<br />
*/<br />
<br />
#define SCE_SYSCON_VOLTAGE_DD1 (1)<br />
#define SCE_SYSCON_VOLTAGE_DD2 (2)<br />
#define SCE_SYSCON_VOLTAGE_DD3 (3)<br />
#define SCE_SYSCON_VOLTAGE_DD4 (4)<br />
<br />
int sceSysconCtrlVoltageForDriver(SceUInt32 type, SceUInt32 vid);<br />
</source><br />
<br />
=== sceSysconSetPowerModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8A95D35C<br />
|}<br />
<br />
Temp name was sceSysconResetDeviceForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A.<br />
<br />
The <code>mode</code> argument is usually set to <code>0x2</code> or sometimes <code>0x8002</code> (which seems to correspond to some request by the UDC and BT drivers).<br />
<br />
The <code>type</code> argument determines what to do.<br />
<br />
Real definition names are like: "SCE_SYSCON_POWERMODE_MODE_STANDBY".<br />
<br />
{| class="wikitable"<br />
! Type !! Description !! Syscon command arguments <code>{cmd_no_low, cmd_no_hi, args_size, args}</code><br />
|-<br />
| 0 || Power off || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 1 || Suspend (low-power state) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 2 || Reset (cold reset) || <code>{0x01, 8, 1, 0}</code><br />
|-<br />
| 3 || Reset to external boot mode || <code>{0xC1, 0, 2, 0}</code><br />
|-<br />
| 4 || ?Reset to update mode? || <code>{0xC1, 0, 2, 1}</code><br />
|-<br />
| 5 || Hibernate || <code>{0xC2, 0, 2, 0x5A}</code><br />
|-<br />
| 16 || ?Resume? || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 17 || Resume (soft reset: suspend and immediately resume) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|}<br />
<br />
<source lang="c">int sceSysconSetPowerModeForDriver(int type, int mode);</source><br />
<br />
=== sceSysconEnableHibernateIOForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4946538A<br />
|}<br />
<br />
<source lang="C">int sceSysconEnableHibernateIOForDriver(int maybe_enable);</source><br />
<br />
=== sceSysconWaitReadyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x55DF1C9B<br />
|}<br />
<br />
Temp name was sceSysconWaitInitializedForDriver.<br />
<br />
<source lang="c">int sceSysconWaitReadyForDriver(void);</source><br />
<br />
=== sceSysconCmdSyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x6E517D22<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdSyncForDriver(SceSysconPacket *packet, int noWait);</source><br />
<br />
=== sceSysconCmdExecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9ADDCA4A<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdExecForDriver(SceSysconPacket *packet, unsigned int flags);</source><br />
<br />
=== sceSysconCmdExecAsyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2224E82<br />
|}<br />
<source lang="c">int sceSysconCmdExecAsyncForDriver(SceSysconPacket *packet, u32 flags, int (*callback)(SceSysconPacket *, void *), void *argp);</source><br />
<br />
=== sceSysconCtrlSdPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xBE1ADE4F<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x888.<br />
<br />
Enables/disables GameCard reader.<br />
<br />
Used in [[SceSdstor]].<br />
<br />
<source lang="c"><br />
// param: 1 = enable SD (GameCard reader) power, 0 = disable SD (GameCard reader) power<br />
int sceSysconCtrlSdPowerForDriver(SceUInt16 param);<br />
</source><br />
<br />
=== sceSysconCtrlWirelessPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0x4FBDA504<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x88A.<br />
<br />
Replaced by function [[#sceSysconCtrlWirelessPower2ForDriver]].<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconCtrlWirelessPower2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA2E85DB9<br />
|}<br />
<br />
Replacement function for [[#sceSysconCtrlWirelessPowerForDriver]]. Calls Syscon command 0x88A.<br />
<br />
Used in [[SceWlanBt]]:<br />
<source lang="C"><br />
scePowerSetWakeupConditionForDriver(4, 0);<br />
uVar2 = 0;<br />
sceSysconCtrlDeviceResetForDriver(0x10, 0);<br />
sceSysconCtrlWirelessPower2ForDriver(0);<br />
sceClockgenWlanBtClkDisableForDriver();<br />
</source><br />
<br />
<source lang="C">int sceSysconCtrlWirelessPower2ForDriver(SceUInt16 enable);</source><br />
<br />
=== sceSysconCtrlWirelessPowerDownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0xDF8C6D2D<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If motherboard is not "hardware info third byte 0x10" (probably IRS-001), it does nothing and returns 0, probably because missing hardware. Calls Syscon command 0xB1. Wireless power down might be a button to enable/disable Wireless, like on PSP.<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerDownForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconGetConfigStorageInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.995.000-3.740.011 || 0xCE48E8EB<br />
|}<br />
<br />
Get Syscon Config Storage Info using Syscon command 0x1300.<br />
<br />
Config Storage Info is part of the [[Syscon]] "ConfZZ" header.<br />
<br />
<source lang="C"><br />
typedef struct SceKernelConfigStorageInfo { // size is 8 bytes<br />
SceUInt16 version;<br />
SceUInt16 unk_2;<br />
SceUInt32 unk_4;<br />
} SceKernelConfigStorageInfo;<br />
<br />
int sceSysconGetConfigStorageInfoForDriver(SceKernelConfigStorageInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLoadConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x89C5CFD6<br />
|}<br />
<br />
Calls Syscon command 0x1385.<br />
<br />
The OS uses this function to change between modes: IDU mode, Show Mode, no mode. This works by spoofing or rewriting [[KBL Param#Hardware Info|Hardware Info]]. This is reboot persistent.<br />
<br />
<source lang="C">int sceSysconLoadConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== sceSysconVerifyConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xCC6F90A8<br />
|}<br />
<br />
Calls Syscon command 0x1386.<br />
<br />
This function is not used in the OS and anyway it would always return error because it calls a command that is not implemented in Syscon FW.<br />
<br />
<source lang="C">int sceSysconVerifyConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== SceSysconForDriver_FD65FFCB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xFD65FFCB<br />
|}<br />
<br />
Calls Syscon command 0x1392.<br />
<br />
<source lang="C">int SceSysconForDriver_FD65FFCB(SceUInt8 offset, SceUInt16 a2);</source><br />
<br />
=== sceSysconBeginConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xA4968B8C<br />
|}<br />
<br />
<source lang="C">int sceSysconBeginConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconCommitConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x7B9B3617<br />
|}<br />
<br />
<source lang="C">int sceSysconCommitConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconEndConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xFCC3E8EE<br />
|}<br />
<br />
<source lang="C">int sceSysconEndConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconSetDebugHandlersForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF245CD6F<br />
|}<br />
<br />
<source lang="c"><br />
/** A set of debug handlers for syscon, that you can set in sceSysconSetDebugHandlersForDriver(). */<br />
typedef struct SceSysconDebugHandlers {<br />
/** Structure size (probably, unused). */<br />
s32 size;<br />
/** Callback ran right before running a packet, with a pointer to it passed as the first argument. */<br />
void (*start)(SceSysconPacket *packet);<br />
/** Callback ran right after finishing running a packet, with a pointer to it passed as the first argument. */<br />
void (*end)(SceSysconPacket *packet);<br />
} SceSysconDebugHandlers;<br />
<br />
int sceSysconSetDebugHandlersForDriver(SceSysconDebugHandlers *debug_handlers);<br />
</source><br />
<br />
=== sceSysconGetBatteryCalibDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x9ADC9936<br />
|}<br />
<br />
<source lang="C">int sceSysconGetBatteryCalibDataForDriver(int *piData1, int *piData2, int *piData3, int *piData4);</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF492E69E<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelTouchpanelDeviceInfo { // size is 8 bytes<br />
uint16_t FrontVendorID;<br />
uint16_t FrontFirmwareRev;<br />
uint16_t RearVendorID;<br />
uint16_t RearFirmwareRev;<br />
} SceKernelTouchpanelDeviceInfo;<br />
<br />
int sceSysconGetTouchpanelDeviceInfoForDriver(SceKernelTouchpanelDeviceInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.690.011-3.740.011 || 0x030D447F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns extended touchpanel info.<br />
<br />
<source lang="C"><br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelInfo { // size is 0xA bytes<br />
SceUInt16 vendorID;<br />
SceUInt16 firmwareRev;<br />
SceUInt16 configRev;<br />
SceUInt8 hwVersion;<br />
SceUInt8 vendorInfo;<br />
SceUInt16 reserved;<br />
} SceKernelTouchpanelInfo;<br />
<br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelDeviceInfo2 { // size is 0x14 bytes<br />
SceKernelTouchpanelInfo front;<br />
SceKernelTouchpanelInfo rear;<br />
} SceKernelTouchpanelDeviceInfo2;<br />
<br />
int sceSysconGetTouchpanelDeviceInfo2ForDriver(SceKernelTouchpanelDeviceInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconMotionGetMeasureDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x270B7B0B<br />
|}<br />
<br />
Calls Syscon command 0x400.<br />
<br />
=== sceSysconMotionGetDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD01E64FC<br />
|}<br />
<br />
Returns motion sensor device info.<br />
<br />
Calls Syscon command 0x480.<br />
<br />
See [[SceMotionDev#sceMotionDevGetDeviceInfoForDriver]] for the SceKernelMotionDeviceInfo structure.<br />
<br />
<source lang="C">int sceSysconMotionGetDeviceInfoForDriver(SceKernelMotionDeviceInfo *pInfo);</source><br />
<br />
=== SceSysconForDriver_9A7858B6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9A7858B6<br />
|}<br />
<br />
Calls Syscon command 0x481. Sends 3 bytes to Syscon.<br />
<br />
Probably used to send information to the motion sensor device.<br />
<br />
<source lang="C">int SceSysconForDriver_9A7858B6(SceBool a1, SceUint16 a2);</source><br />
<br />
=== sceSysconGetHardwareInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCBD6D8BC<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info|Hardware Info]] obtained from Syscon command 0x5.<br />
<br />
<source lang="C">int sceSysconGetHardwareInfoForDriver(void);</source><br />
<br />
=== sceSysconGetHardwareInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x965C68C3<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info 2|Hardware Info 2]] obtained from Syscon command 0x6.<br />
<br />
This function was certainly added for PS Vita Slim or PS TV support because [[KBL Param#Hardware Info|Hardware Info]] risked being fulfilled if too many hardware revisions were made.<br />
<br />
Used in [[SceAudio#SceAudioIn|SceAudioIn]] (maybe to check Conexant IC), [[SceCodec]] (maybe to check Conexant IC), and [[SceVshBridge#vshSysconGetHardwareInfo2|_vshSysconGetHardwareInfo2]].<br />
<br />
<source lang="C"><br />
typedef struct SceKernelHardwareInfo2 {<br />
SceUInt8 flags[0x10];<br />
} SceKernelHardwareInfo2;<br />
<br />
int sceSysconGetHardwareInfo2ForDriver(SceKernelHardwareInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconGetErnieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xFF86F4C5<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconGetBaryonVersionForDriver.<br />
<br />
<source lang="c">int sceSysconGetErnieVersionForDriver(void);</source><br />
<br />
=== SceSysconForDriver_EBE3262C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBE3262C<br />
|}<br />
<br />
In [[SceSblPostSsMgr]], used just after [[#sceSysconGetErnieVersionForDriver]].<br />
<br />
Returns 8 bits of some Syscon Mode information. Bit 6 (from right) is Syscon DownLoader Mode flag. Bit 3 (from right) is Power Online flag.<br />
<br />
<source lang="C">SceUInt8 SceSysconForDriver_EBE3262C(void);</source><br />
<br />
=== sceSysconIsDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x9ADD60D2<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconIsDealDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB7BCC638<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDealDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconNopForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0D0B6D25<br />
|}<br />
<br />
<source lang="C">int sceSysconNopForDriver(void);</source><br />
<br />
=== sceSysconIsPowerOnlineForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9DA2A5AB<br />
|}<br />
<br />
Returns true iff Syscon information bit 3 (from right) is set. See also [[#SceSysconForDriver_EBE3262C]].<br />
<br />
Used in many [[ScePower]] functions for example before setting display brightness (to save battery).<br />
<br />
<source lang="C">SceBool sceSysconIsPowerOnlineForDriver(void);</source><br />
<br />
=== sceSysconGetErnieDLVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD2F456DC<br />
|}<br />
<br />
Calls Syscon command 0x1100.<br />
<br />
<source lang="C">void sceSysconGetErnieDLVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetBatteryVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x68E0031E<br />
|}<br />
<br />
Battery IC codename: if HWinfo > 7 "Abby" else unknown codename, maybe just "Bic".<br />
<br />
<source lang="C">int sceSysconGetBatteryVersionForDriver(SceUInt16 *HWinfo, SceUInt16 *FWinfo, SceUInt16 *DFinfo);</source><br />
<br />
=== sceSysconReadCookieStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.740.011 || 0xDFB024C4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceSysconAbbySyncForDriver.<br />
<br />
<source lang="C">int sceSysconReadCookieStatusForDriver(SceUInt32 *puiStatus);</source><br />
<br />
=== sceSysconGetManufacturesStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3E09A1F4<br />
|}<br />
<br />
In theory, this function should only be called when Product Mode is already set.<br />
<br />
<source lang="C">int sceSysconGetManufacturesStatusForDriver(int *piStatus);</source><br />
<br />
=== sceSysconReadScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x299B1CE7<br />
|}<br />
<br />
Temp name was sceSysconReadCommandForDriver, sceSysconVsReadDataForDriver.<br />
<br />
Calls Syscon command 0x90.<br />
<br />
Used in [[SceRtc]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconReadScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconWriteScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE26488B9<br />
|}<br />
<br />
Temp name was sceSysconSendCommandForDriver, sceSysconVsWriteDataForDriver.<br />
<br />
Calls Syscon command 0x91.<br />
<br />
Used in [[SceRtc]] and [[ScePower]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconWriteScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconNvsSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x81A6060D<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]].<br />
<br />
<source lang="C"><br />
// mode: 0 before NVS read/write<br />
int sceSysconNvsSetRunModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsSetUnkModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2EC6D55D<br />
|}<br />
<br />
<source lang="C"><br />
// mode: unk<br />
int sceSysconNvsSetUnkModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACAFA2B8<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblSsGetNvsDataForDriver|sceSblSsGetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsReadDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconNvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x10C9657A<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]] and [[SceSblSsMgr#sceSblSsSetNvsDataForDriver|sceSblSsSetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsWriteDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconGetMultiCnInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x1503D6A0<br />
|}<br />
<br />
Returns data obtained by Syscon command 0x103.<br />
<br />
Returns 0x4ff00 when nothing is connected.<br />
<br />
Returns 0x40080 when pin 11 is pulled to GND.<br />
<br />
Returns 0x40680 when pin 12 is pulled to GND.<br />
<br />
Returns 0x40380 when pin 12 is pulled to GND while pin 11 pulled to ground via 100K resistor.<br />
<br />
Returns 0x40000 on PSTV<br />
<br />
Bits 8 and 9 indicate that an audio-out dock is connected.<br />
<br />
Bits 8, 9, 11, 12, 13, 14 and 15 indicate that [[UDC]] pins are connected.<br />
<br />
Used in [[SceHpremote]], [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconGetMultiCnInfoForDriver(SceUInt32 *pInfo);</source><br />
<br />
=== sceSysconSetMultiCnPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8AAB6308<br />
|}<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C"><br />
// port: 0: for Jig mode, 1 for UART0 logging mode, 0x10000: for normal mode<br />
int sceSysconSetMultiCnPortForDriver(int port);<br />
</source><br />
<br />
=== sceSysconCtrlLedPwmBlinkForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x6F586D1A<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
// unk: SceLedConfig.unk_4<br />
<br />
int sceSysconCtrlLedPwmBlinkForDriver(int device, SceUInt32 unk);<br />
</source><br />
<br />
=== sceSysconSetChargeLedCtrlForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x9CA6EB70<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
On motherboards IRT-001 and older, it does nothing and returns 0, probably because missing hardware that could be a LED, else it sends 2 bytes using Syscon command 0x89E.<br />
<br />
Used in [[ScePower#ScePowerForDriver_38415146]]. Related to LED.<br />
<br />
<source lang="C">int sceSysconSetChargeLedCtrlForDriver(SceBool state);</source><br />
<br />
=== sceSysconCtrlAccPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8D1D97E8<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlAccPowerForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlUsbStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x59DC5938<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x89A.<br />
<br />
Related to [[SceUdcd]] and [[ScePower]].<br />
<br />
<source lang="C">int sceSysconCtrlUsbStatusForDriver(SceUInt32 value);</source><br />
<br />
=== sceSysconCtrlRMRPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x710A7CF0<br />
|}<br />
<br />
Temp name was sceSysconCtrlMsPowerForDriver.<br />
<br />
<source lang="c">int sceSysconCtrlRMRPowerForDriver(int enable_power);</source><br />
<br />
=== sceSysconCtrlMultiCnPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xB1F88B11<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlMultiCnPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3274A925 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3274A925<br />
|}<br />
<br />
Temp name was sceSysconCtrlDolceUsbPowerForDriver.<br />
<br />
This function enables/disables a USB bus related to either PS Vita IRS-1001 Wlan/Bt module USB or PS Vita 3G modem USB. This also affects PS TV USB host and maybe also PS TV ethernet.<br />
<br />
Used in [[SceUsbEtherSmsc]], [[SceUsbServ]].<br />
<br />
This function was maybe added to support IRS-1001 motherboard.<br />
<br />
<source lang="C">int SceSysconForDriver_3274A925(SceBool enable);</source><br />
<br />
=== sceSysconJigOpenPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x44A173F5<br />
|}<br />
<br />
<source lang="C">int sceSysconJigOpenPortForDriver(void);</source><br />
<br />
=== sceSysconJigClosePortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x483FAE05<br />
|}<br />
<br />
<source lang="C">int sceSysconJigClosePortForDriver(void);</source><br />
<br />
=== sceSysconJigSetConfigForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD24BF916<br />
|}<br />
<br />
<source lang="C">int sceSysconJigSetConfigForDriver(SceUInt8 a1, SceUInt8 a2);</source><br />
<br />
=== sceSysconOutputClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x058941D7<br />
|}<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB0.<br />
<br />
=== sceSysconCtrlHostOutputViaDongleForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xDECCB2B4<br />
|}<br />
<br />
Enables / disables Kermit UART0 output (logs) via Dongle (Jig).<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB2.<br />
<br />
<source lang="C">int sceSysconCtrlHostOutputViaDongleForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_33B5CDB3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x33B5CDB3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB3.<br />
<br />
This function was probably added to support IRS-002 motherboard.<br />
<br />
=== SceSysconForDriver_F6D4DDC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xF6D4DDC4<br />
|}<br />
<br />
Guessed name is sceSysconGetWlanGpioStateForDriver<br />
<br />
Reads from Syscon using Syscon command 0xB4. It is probably the "get" equivalent of [[#SceSysconForDriver_00AE3AEB]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_00AE3AEB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x00AE3AEB<br />
|}<br />
<br />
Guessed name is sceSysconSetWlanGpioStateForDriver<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB5. It is probably the "set" equivalent of [[#SceSysconForDriver_F6D4DDC4]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_0D300158 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x0D300158<br />
|}<br />
<br />
It is probably a "sceSysconCtrl...ForDriver" function.<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB6. It is probably the "set" equivalent of [[#SceSysconForDriver_91EF4EC3]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== SceSysconForDriver_91EF4EC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x91EF4EC3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB7. It is probably the "get" equivalent of [[#SceSysconForDriver_0D300158]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== receive_pm_sm_jig_msg_from_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3C80B529<br />
|}<br />
<br />
Calls Syscon command 0x2083.<br />
<br />
<source lang="C">int receive_pm_sm_jig_msg_from_syscon(SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_short_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xCE346793<br />
|}<br />
<br />
Calls Syscon command 0x2084.<br />
<br />
Sends a message of maximum 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_short_msg_to_syscon(SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x7BFBA09E<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Sends a message by chunks of 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_msg_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_stop_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x933D813F<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Used just after send_pm_sm_jig_msg_to_syscon or when it fails before.<br />
<br />
<source lang="C">int send_pm_sm_stop_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size);</source><br />
<br />
=== sceSysconIduModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x956D07CB<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeSetForDriver(void);</source><br />
<br />
=== sceSysconIduModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x34574496<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeClearForDriver(void);</source><br />
<br />
=== sceSysconShowModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x6D65B70F<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeSetForDriver(void);</source><br />
<br />
=== sceSysconShowModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x8D7724C0<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeClearForDriver(void);</source><br />
<br />
=== sceSysconSetWlanCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || 0x4DEB8712<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a Wlan-related callback.<br />
<br />
index 5 on FWs 0.931.010-0.940.<br />
<br />
=== SceSysconForDriver_18A6F4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x18A6F4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_C0F215B7]].<br />
<br />
<source lang="C">int SceSysconForDriver_18A6F4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_DE613081 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xDE613081<br />
|}<br />
<br />
A guessed name is sceSysconSetHeadphoneCallbackForDriver.<br />
<br />
Registers an headphone remote related callback.<br />
<br />
index 1 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
Related to [[#SceSysconForDriver_C3504ADE]].<br />
<br />
<source lang="C">int SceSysconForDriver_DE613081(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_229A07C2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x229A07C2<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 2 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_B832B72C]].<br />
<br />
<source lang="C">int SceSysconForDriver_229A07C2(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_8351526D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x8351526D<br />
|}<br />
<br />
A guessed name is sceSysconSetAlarmTimerCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 3 on FW 3.600.011.<br />
<br />
Used in [[SceRtc]].<br />
<br />
Related to [[#SceSysconForDriver_86BAAF7D]].<br />
<br />
<source lang="C">int SceSysconForDriver_8351526D(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_9F8340FF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9F8340FF<br />
|}<br />
<br />
A guessed name is sceSysconSetResumeRequestCallbackForDriver.<br />
<br />
Registers the "is resume requested" callback.<br />
<br />
Used in [[ScePower]] to register a callback that sets the [[ScePower]] global variable g_resume_requested to SCE_TRUE.<br />
<br />
index 4 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_A57B5433]].<br />
<br />
<source lang="C">int SceSysconForDriver_9F8340FF(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_35E1689F ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x35E1689F<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback, maybe dock callback, but not remote callback.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
index 5 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACC7F71E]].<br />
<br />
<source lang="C">int SceSysconForDriver_35E1689F(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_474A9EA7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x474A9EA7<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xC on FWs 0.931.010-0.940. index 6 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_769F9AC4]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_474A9EA7(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_4E88B4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E88B4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 8 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4BC63A40]].<br />
<br />
Used in [[SceBbmc]]<br />
<br />
<source lang="C">int SceSysconForDriver_4E88B4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_376CCCB8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x376CCCB8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 9 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_99A254A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_376CCCB8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_3BAAC8A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x3BAAC8A9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xA on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9A4F4B7C]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_3BAAC8A9(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAccCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x4A42712F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for accessory port.<br />
<br />
index 0xF on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetAccCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3F0DB7C0<br />
|}<br />
<br />
Registers the low-battery callback.<br />
<br />
index 6 on FWs 0.931-0.940. index 0x10 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_80D6E061 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x80D6E061<br />
|}<br />
<br />
A guessed name is sceSysconSetBatteryOnlineCallbackForDriver.<br />
<br />
Registers a callback. Maybe related to Battery online status.<br />
<br />
index 0x11 on FW 3.600.011.<br />
<br />
<source lang="C">int SceSysconForDriver_80D6E061(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_7682FE69 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x7682FE69<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x12 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4A184B7C]].<br />
<br />
<source lang="C">int SceSysconForDriver_7682FE69(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_E0D52DF0 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE0D52DF0<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x13 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACEE1C70]].<br />
<br />
<source lang="C">int SceSysconForDriver_E0D52DF0(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2D471528 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x2D471528<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a callback very similar to the low battery callback.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x14 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_03C50DC3]].<br />
<br />
<source lang="C">int SceSysconForDriver_2D471528(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_129EA022 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x129EA022<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x15 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_BFDA5590]].<br />
<br />
<source lang="C">int SceSysconForDriver_129EA022(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_85E5DEBF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x85E5DEBF<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
index 0x16 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_63B14156]].<br />
<br />
Used by [[SceBbmc]]<br />
<br />
<source lang="C">int SceSysconForDriver_85E5DEBF(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetThermalAlertCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x773B8126<br />
|}<br />
<br />
Registers the thermal alert callback.<br />
<br />
index 0x17 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_50CAE242]].<br />
<br />
<source lang="C">int sceSysconSetThermalAlertCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2E4BA4B8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2E4BA4B8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x19 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_29CF4335]].<br />
<br />
No use case seen. Maybe used in internal modules for Jig.<br />
<br />
<source lang="C">int SceSysconForDriver_2E4BA4B8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_C442D0BE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xC442D0BE<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1A on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9F4042F8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_C442D0BE(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_61AE3970 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0x61AE3970<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1B on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_C50568E9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_61AE3970(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x94678881<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-reboot callback.<br />
<br />
index 0x1C on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x7AA00C01<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-download callback.<br />
<br />
index 0x1D on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetStandbyButtonCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x423D0C58<br />
|}<br />
<br />
Registers a callback.<br />
<br />
index 0x20 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetStandbyButtonCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_154676F1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x154676F1<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x21 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_154676F1(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_63352A39 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x63352A39<br />
|}<br />
<br />
A guessed name is sceSysconSetMicrophoneCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x22 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_63352A39(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_14730196 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x14730196<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x23 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_14730196(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAlarmCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32418370<br />
|}<br />
<br />
Registers the alarm callback.<br />
<br />
index 0 on FWs 0.931.010-0.940. index 0x24 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetAlarmCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMultiCnOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA26586B2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for multi-connector OTG on PS Vita Fat.<br />
<br />
index 0x25 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMultiCnOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMiniUsbOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x67A4CB9F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for mini-USB OTG on PS Vita Slim.<br />
<br />
index 0x26 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMiniUsbOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconUpdaterSetSegmentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B00BC7F<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// segment_no: a 8bit value<br />
int sceSysconUpdaterSetSegmentForDriver(SceUInt32 segment_no);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x356B9696<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegmentForDriver.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramDataForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramData2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x734544E4<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegment2ForDriver.<br />
<br />
Same functionality as [[#sceSysconUpdaterLoadSegmentForDriver]] except that the segment is copied to an intermediate 0x7A-byte zeroed buffer. This implementation seems bad as the Syscon packet first 6 bytes are written twice.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramData2ForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCalcChecksumForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD27C3D80<br />
|}<br />
<br />
Computes checksum to use with [[#sceSysconUpdaterExecProgrammingForDriver]]. It does not call any Syscon command.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterCalcChecksumForDriver(void *data, SceSize size, int *puiChecksum);</source><br />
<br />
=== sceSysconUpdaterExecProgrammingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x69AD76E4<br />
|}<br />
<br />
Executes programming, i.e writes segments to Syscon Flash memory.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// checksum: value got from sceSysconUpdaterCalcChecksumForDriver<br />
int sceSysconUpdaterExecProgrammingForDriver(int checksum);<br />
</source><br />
<br />
=== sceSysconUpdaterSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB487C2FB<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterSetRunModeForDriver(int mode);</source><br />
<br />
=== sceSysconUpdaterExecFinalizeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC7747A63<br />
|}<br />
<br />
Finalize Syscon update by sending checksum from ARM to Syscon.<br />
<br />
Calls Syscon command 0x1184.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// digest: sha1 of decrypted concatenated segments, comes from Syscon Update package packet type 0x20<br />
// size: usually 0x14 (sha1 size)<br />
int sceSysconUpdaterExecFinalizeForDriver(void *digest, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCheckSignatureForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCBA836FF<br />
|}<br />
<br />
Sends a 0x18-byte buffer to Syscon command 0x1185. This Syscon command 0x1185 seems to be unimplemented in recent Syscon firmwares: it does not do anything. It can be explained by the fact that the signature packet is not embedded in Syscon Update SPKGs.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// size: must be 0x18<br />
int sceSysconUpdaterCheckSignatureForDriver(void *pSig, SceSize size);<br />
</source><br />
<br />
=== SceSysconForDriver_4D03754A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x4D03754A<br />
|}<br />
<br />
Temp name was syscon_update_command_0xD00002.<br />
<br />
Calls Syscon command 0xD0.<br />
<br />
Used in [[SceSblUpdateMgr]] with [[update_service_sm]] function [[Secure_Modules_Functions#0xD0002|0xD0002]].<br />
<br />
<source lang="C"><br />
// in_buf: buffer that embeds input data, usually 0xD0002 command request + 8<br />
// in_size: usually 0x28<br />
// out_buf: buffer to receive result, usually 0xD0002 command request + 0x30<br />
// out_size: usually 0x28<br />
int SceSysconForDriver_4D03754A(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== SceSysconForDriver_C14BD637 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 1.000.041-3.740.011 || 0xC14BD637<br />
|}<br />
<br />
Calls Syscon command 0xD1.<br />
<br />
Seems unused.<br />
<br />
<source lang="C">int SceSysconForDriver_C14BD637(void);</source><br />
<br />
=== sceSysconSnvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBDF88B9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD2.<br />
<br />
Used in [[SceSblPostSsMgr]] to read data from SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] commands 0xB0002 and 0xC0002.<br />
<br />
<source lang="C"><br />
// in_size: 0x10<br />
// out_size: 0x30<br />
int sceSysconSnvsReadDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSnvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x63683B9B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD3.<br />
<br />
Used in [[SceSblPostSsMgr]] to write data to SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] functions [[Secure_Modules_Functions#0xB0002 - sceSblUsSmSnvsEncryptDecryptSector|0xB0002]] and [[Secure_Modules_Functions#0xC0002 - sceSblUsSmSnvsEncryptDecryptMgmtData|0xC0002]].<br />
<br />
<source lang="C"><br />
// in_size: 0x30<br />
// out_size: 0x10<br />
int sceSysconSnvsWriteDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSetAffirmativeRertyModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x901D6CD4<br />
|}<br />
<br />
This is an official name. Typo is the name is intentional.<br />
<br />
Sets AffirmativeRertyMode flag in kernel memory. During SceSyscon initialization, AffirmativeRertyMode is enabled by default.<br />
<br />
AffirmativeRertyMode flag is used by [[SceSyscon]] kernel module when executing Syscon commands.<br />
<br />
Used in [[SceCtrl]], [[ScePower]].<br />
<br />
<source lang="C">int sceSysconSetAffirmativeRertyModeForDriver(int enable);</source><br />
<br />
=== sceSysconGetControlsInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x145F59A4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[KBL Param#Boot Controls Info|Boot Controls Info]].<br />
<br />
Calls Syscon command 0x100.<br />
<br />
<source lang="C">int sceSysconGetControlsInfoForDriver(SceUInt32 *pCtrl);</source><br />
<br />
=== SceSysconForDriver_76272CB9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x76272CB9<br />
|}<br />
<br />
Calls Syscon command 0x120. Gets a 4-byte value.<br />
<br />
<source lang="C">int SceSysconForDriver_76272CB9(SceUInt32 *pRes);</source><br />
<br />
=== sceSysconGetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7BEFF8B<br />
|}<br />
<br />
Gets Syscon power-on time in ticks of 0.5 second. Each second the counter automatically increases by 2.<br />
<br />
Calls Syscon command 0x11.<br />
<br />
Used in [[SceRtc]] to calculate the current time and date.<br />
<br />
<source lang="C">int sceSysconGetClockForDriver(SceUInt32 *puiTime);</source><br />
<br />
=== SceSysconForDriver_3168F3AF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3168F3AF<br />
|}<br />
<br />
Calls Syscon command 0x12.<br />
<br />
Gets the tick of an alarm timer. The alarm tick must be set using Syscon command 0x82 via [[#SceSysconForDriver_51164951]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTick);<br />
<br />
// FW 3.600.011-3.740.011<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTickLow, SceUInt8 *pTickHi);<br />
</source><br />
<br />
=== SceSysconForDriver_BA09F171 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xBA09F171<br />
|}<br />
<br />
Calls Syscon command 0x13.<br />
<br />
It might be related to alarm/timer. Sends 0 byte to Syscon. Gets 2 bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_BA09F171(SceUInt8 *pResult, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_93075DD1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x93075DD1<br />
|}<br />
<br />
Calls Syscon command 0x14. Sends 0 byte to Syscon. Gets ?1-4? bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_93075DD1(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetPowerStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x175CE5A1<br />
|}<br />
<br />
Calls Syscon command 0x883. Gets 8 bytes from Syscon. Reads Elmo registers 0xA0 through 0xA3.<br />
<br />
<source lang="C"><br />
// pStatus: pointer to a buffer of at least 8 bytes<br />
int sceSysconGetPowerStatusForDriver(void *pStatus);<br />
</source><br />
<br />
=== sceSysconCtrlDeviceResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x40FF3898<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x88F.<br />
<br />
<source lang="C"><br />
// The following defines are guessed names<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_UNK_1 1<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_MOTION 2<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_TP_FRONT 4<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_TP_REAR 8<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_WLANBT 0x10<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_SMSC_ETH 0x20<br />
<br />
// mode: 0 or 1, probably for the reset type such as reset or shutdown<br />
int sceSysconCtrlDeviceResetForDriver(SceUInt8 device, SceBool mode);<br />
</source><br />
<br />
=== SceSysconForDriver_285594F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x285594F8<br />
|}<br />
<br />
Calls Syscon command 0x890.<br />
<br />
<source lang="C">int SceSysconForDriver_285594F8(SceUInt16 value);</source><br />
<br />
=== sceSysconCtrlLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x04EC7579<br />
|}<br />
<br />
<source lang="C"><br />
#define STATE_ON 1<br />
#define STATE_OFF 0<br />
<br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
int sceSysconCtrlLEDForDriver(SceUInt16 device, SceBool state);<br />
</source><br />
<br />
=== sceSysconCtrlChargeACForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x596B17B7<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x892. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconCtrlChargeACForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlChargeVBUSForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2A4B0437<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x893. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C"><br />
// a1: ex: 0, 1<br />
// a2: ex: 0, 1<br />
<br />
// FW 0.931.010<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1);<br />
<br />
// FW 3.600.011-3.740.011<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1, SceUInt32 a2);<br />
</source><br />
<br />
=== SceSysconForDriver_5CDDA14D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5CDDA14D<br />
|}<br />
<br />
A guessed name is sceSysconCtrlHpremoteForDriver.<br />
<br />
If Syscon version < 0x80001, it does nothing and returns 0, else it sends 2 bytes to Syscon command 0x899.<br />
<br />
Maybe enables/disables Jack power.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_5CDDA14D(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_A2FE9BF9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA2FE9BF9<br />
|}<br />
<br />
Calls Syscon command 0x800.<br />
<br />
Gets information related to battery charge status, or USB power connection. See also [[Ernie#CMD_0x0800]].<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int SceSysconForDriver_A2FE9BF9(void *pResult);</source><br />
<br />
=== sceSysconCtrlLedBlinkType2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCB41B531<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0x89F.<br />
<br />
<br />
=== sceSysconGetBatteryTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9070F139<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A0, else Syscon command 0x981.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryTempForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryRemainCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC562AF3A<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryRemainCapacityForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x802, else Syscon command 0x900.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainCapForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryVoltForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x03F11220<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x803, else Syscon command 0x901.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryVoltForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryLifePercentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xAD0A8275<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryLifePercentForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x00A65FC1<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A1, else Syscon command 0x982.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryElecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0826BA07<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A2, else Syscon command 0x983.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryElecForDriver(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconGetBatteryTTEForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB841C141<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryLifeTimeForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A3, else Syscon command 0x984.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryTTEForDriver(SceUInt16 *pTTE);</source><br />
<br />
=== sceSysconGetBatterySOHForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x91D3B7A3<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A4, else Syscon command 0x985.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatterySOHForDriver(void *pSOH);</source><br />
<br />
=== sceSysconReadBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2FB5565<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A8, else Syscon command 0x986.<br />
<br />
<source lang="C">int sceSysconReadBatteryRegForDriver(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== sceSysconWriteBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B779DB0<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A9, else Syscon command 0x987.<br />
<br />
<source lang="C">int sceSysconWriteBatteryRegForDriver(SceUInt16 offset, SceUInt16 value);</source><br />
<br />
=== SceSysconForDriver_A5AB19B1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA5AB19B1<br />
|}<br />
<br />
Read 2 bytes from some Battery device. Is is an alternative register-reading function that seems to be Syscon-side implemented only on internal System Software version 4.00 or DevKit ones.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8AA, else Syscon command 0x988.<br />
<br />
Offset must be between 0 and 0xFFFF else returns error 0x80250001.<br />
<br />
<source lang="C">int SceSysconForDriver_A5AB19B1(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== SceSysconForDriver_CFCEE733 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCFCEE733<br />
|}<br />
<br />
Sends 2 bytes from Syscon command 0x181.<br />
<br />
<source lang="C">int SceSysconForDriver_CFCEE733(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_FDB3AE9D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xFDB3AE9D<br />
|}<br />
<br />
Gets 0x10 bytes from Syscon command 0x183.<br />
<br />
<source lang="C">int SceSysconForDriver_FDB3AE9D(int *pResult);</source><br />
<br />
=== SceSysconForDriver_C3504ADE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC3504ADE<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_DE613081]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C3504ADE(void);</source><br />
<br />
=== SceSysconForDriver_B832B72C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB832B72C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_229A07C2]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B832B72C(void);</source><br />
<br />
=== SceSysconForDriver_86BAAF7D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x86BAAF7D<br />
|}<br />
<br />
A guessed name is sceSysconIsAlarmTimerExistForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_8351526D]].<br />
<br />
Used in [[SceRtc]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_86BAAF7D(void);</source><br />
<br />
=== SceSysconForDriver_A57B5433 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA57B5433<br />
|}<br />
<br />
A guessed name is sceSysconIsResumeRequestedForDriver.<br />
<br />
Related to [[#SceSysconForDriver_9F8340FF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_A57B5433(void);</source><br />
<br />
=== SceSysconForDriver_ACC7F71E ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACC7F71E<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_35E1689F]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACC7F71E(void);</source><br />
<br />
=== SceSysconForDriver_769F9AC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x769F9AC4<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_474A9EA7]].<br />
<br />
Returns always SCE_TRUE on PS TV. This function could be related to USB or ethernet availability.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_769F9AC4(void);</source><br />
<br />
=== SceSysconForDriver_4BC63A40 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4BC63A40<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_4E88B4D9]].<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4BC63A40(void);</source><br />
<br />
=== SceSysconForDriver_99A254A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x99A254A9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_376CCCB8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_99A254A9(void);</source><br />
<br />
=== SceSysconForDriver_9A4F4B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x9A4F4B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_3BAAC8A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9A4F4B7C(void);</source><br />
<br />
=== SceSysconForDriver_92D2C6A4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x92D2C6A4<br />
|}<br />
<br />
<source lang="C">int SceSysconForDriver_92D2C6A4(void);</source><br />
<br />
=== SceSysconForDriver_B9EA2FA8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xB9EA2FA8<br />
|}<br />
<br />
A guessed name is sceSysconIsAccExistForDriver.<br />
<br />
Only used in [[SceUsbServ]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B9EA2FA8(void);</source><br />
<br />
=== SceSysconForDriver_29CF4335 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x29CF4335<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2E4BA4B8]].<br />
<br />
It is related to Ernie DL Mode.<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_29CF4335(void);</source><br />
<br />
=== SceSysconForDriver_32B2DB3D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32B2DB3D<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_32B2DB3D(void);</source><br />
<br />
=== sceSysconIsHeadphoneExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x142D5E82<br />
|}<br />
<br />
Used in [[SceHpremote#sceHprmIsHeadphoneExistForDriver]].<br />
<br />
<source lang="c">SceBool sceSysconIsHeadphoneExistForDriver(void);</source><br />
<br />
=== sceSysconIsMotionDevExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x490C5548<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Used in [[SceMotionDev]].<br />
<br />
<source lang="c">SceBool sceSysconIsMotionDevExistForDriver(void);</source><br />
<br />
=== SceSysconForDriver_012B57B3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.940-3.740.011 || 0x012B57B3<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_012B57B3(void);</source><br />
<br />
=== SceSysconForDriver_27758A64 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x27758A64<br />
|}<br />
<br />
A guessed name is sceSysconIsBatteryOnlineForDriver, deriving from [[#sceSysconIsPowerOnlineForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]], [[ScePower#scePowerIsLowBatteryForDriver]], [[ScePower]]'s module_start.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_80D6E061]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_27758A64(void);</source><br />
<br />
=== SceSysconForDriver_4A184B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x4A184B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns some information about battery.<br />
<br />
Used in [[ScePower#ScePowerForDriver_627A89C6]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_7682FE69]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4A184B7C(void);</source><br />
<br />
=== SceSysconForDriver_ACEE1C70 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xACEE1C70<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns information about battery. Only used when battery is working.<br />
<br />
Used in [[ScePower#ScePowerForDriver_0D56C601]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_E0D52DF0]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACEE1C70(void);</source><br />
<br />
=== SceSysconForDriver_03C50DC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x03C50DC3<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2D471528]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_03C50DC3(void);</source><br />
<br />
=== SceSysconForDriver_BFDA5590 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xBFDA5590<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_129EA022]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_BFDA5590(void);</source><br />
<br />
=== SceSysconForDriver_63B14156 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x63B14156<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_85E5DEBF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_63B14156(void);</source><br />
<br />
=== SceSysconForDriver_50CAE242 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x50CAE242<br />
|}<br />
<br />
A guessed name is sceSysconIsThermalAlertForDriver.<br />
<br />
Returns the global variable related to [[#sceSysconSetThermalAlertCallbackForDriver]].<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_50CAE242(void);</source><br />
<br />
=== SceSysconForDriver_9F4042F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x9F4042F8<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_C442D0BE]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9F4042F8(void);</source><br />
<br />
=== SceSysconForDriver_C50568E9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xC50568E9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_61AE3970]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C50568E9(void);</source><br />
<br />
=== sceSysconIsLowBatteryForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7F5A797<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">SceBool sceSysconIsLowBatteryForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateRebootForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1A0C140F<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateRebootForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateDownloadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1E3130EE<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateDownloadForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryRemainLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x26F9D729<br />
|}<br />
<br />
Only used if Syscon version >= 0x1040105.<br />
<br />
This function was added along with [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainLevelForDriver(SceUInt8 *pResult1, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_C0F215B7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xC0F215B7<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_18A6F4D9]].<br />
<br />
The global variable is updated by [[#sceSysconCmdSyncForDriver]].<br />
<br />
It looks like it checks for WlanBt presence (used in [[SceWlanBt]], skipping sdio/etc initialization if SceSysconForDriver_C0F215B7 returns 0).<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C0F215B7(void);</source><br />
<br />
=== SceSysconForDriver_D6F6D472 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xD6F6D472<br />
|}<br />
<br />
Guessed name is sceSysconGetMicroUsbInfoForDriver.<br />
<br />
Gets electric information (maybe intensity) of the device connected to USB OTG on PS Vita Slim.<br />
<br />
Returns a global variable updated by [[#sceSysconCmdSyncForDriver]], obtained using Syscon command 0x130.<br />
<br />
<source lang="C">int SceSysconForDriver_D6F6D472(int *pInfo);</source><br />
<br />
=== SceSysconForDriver_F99BC858 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xF99BC858<br />
|}<br />
<br />
Detects microSD swap.<br />
<br />
Calls syscon command 0x131.<br />
<br />
This function was maybe added to support a prototype motherboard that has a microSD port.<br />
<br />
<source lang="C">int SceSysconForDriver_F99BC858(SceBool *isSwapped);</source><br />
<br />
=== SceSysconForDriver_E7893732 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7893732<br />
|}<br />
<br />
Guessed name is sceSysconSetMicroUsbPortForDriver.<br />
<br />
Calls Syscon command 0x1B0. Related to UART or Jig on PS Vita Slim or PS TV.<br />
<br />
<source lang="C"><br />
// value holds 3 useful bytes and 1 byte not sent to syscon<br />
int SceSysconForDriver_E7893732(int value);<br />
</source><br />
<br />
=== sceSysconGetElmoVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA039B563<br />
|}<br />
<br />
Temp name was sceSysconGetElmoFwVersionForDriver.<br />
<br />
Calls Syscon command 0x880. Read Elmo registers 0xD0 through 0xEF.<br />
<br />
On PS Vita 1000 series with IRS-001 motherboard, Elmo Fw Version is 0x192.<br />
<br />
<source lang="C">int sceSysconGetElmoVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetCookieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9BF78047<br />
|}<br />
<br />
Temp name was sceSysconGetCookieFwVersionForDriver.<br />
<br />
Calls Syscon command 0x881.<br />
<br />
<source lang="C">int sceSysconGetCookieVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconReadElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5BF765BB<br />
|}<br />
<br />
Calls Syscon command 0x895.<br />
<br />
=== sceSysconWriteElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCCC71C28<br />
|}<br />
<br />
Calls Syscon command 0x896.<br />
<br />
=== sceSysconReadCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x95975DD1<br />
|}<br />
<br />
Calls Syscon command 0x897.<br />
<br />
=== sceSysconWriteCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF39300D3<br />
|}<br />
<br />
Calls Syscon command 0x898.<br />
<br />
Returns error 0x80250001 if offset is greater than 0xFF.<br />
<br />
<source lang="C"><br />
// offset: 0-0xFF<br />
int sceSysconWriteCookieRegForDriver(SceUInt32 offset, SceUInt16 data);<br />
</source><br />
<br />
== Commands ==<br />
<br />
It seems like the command format is as follows: <code>(direction << 8) | cmd_id</code>, where <code>direction = 1</code> means write to syscon, and <code>direction = 0</code> means read from syscon.<br />
<br />
{| class="wikitable"<br />
! Command<br />
! Return size (without considering the 2 bytes rx.size and rx.error_code)<br />
! Functions NIDs<br />
! Description<br />
|-<br />
| 0x0<br />
| 0x0<br />
| 0x0D0B6D25<br />
| sceSysconNopForDriver<br />
|-<br />
| 0x1<br />
| 0x4<br />
| module_start<br />
| sceSysconGetErnieVersionForDriver. Used during SysconInit.<br />
|-<br />
| 0x2<br />
| 0xC<br />
| module_start<br />
| sceSysconGetTimeStampForDriver. Returns 12-byte string followed by at least 2-byte memory leak. Used during SysconInit.<br />
|-<br />
| 0x3<br />
| 0x4<br />
| module_start<br />
| sceSysconGetSleepFactor. Used during SysconInit.<br />
|-<br />
| 0x4<br />
| 0x4<br />
| <br />
| Unknown. Run during boot. See [[Ernie#CMD_0x0004]].<br />
|-<br />
| 0x5<br />
| 0x4<br />
| 0xCBD6D8BC, module_start<br />
| sceSysconGetHardwareInfoForDriver<br />
|-<br />
| 0x6<br />
| 0x10<br />
| 0x965C68C3, module_start<br />
| sceSysconGetHardwareInfo2ForDriver. Get Hardware Info 2. See [[KBL_Param#Hardware_Info_2]].<br />
|-<br />
| 0x10<br />
| 0x2<br />
| 0xCF5B2F2F<br />
| sceSysconGetWakeupFactorForDriver<br />
|-<br />
| 0x11<br />
| 0x4<br />
| 0xD7BEFF8B<br />
| sceSysconGetClockForDriver<br />
|-<br />
| 0x12<br />
| 0x5 or 0x6<br />
| 0x3168F3AF<br />
| SceSysconForDriver_3168F3AF. Gets information about alarm timer. Return value is 1 byte indicating data size then 4 or 5 bytes of data.<br />
|-<br />
| 0x13<br />
| 0x2<br />
| 0xBA09F171<br />
| SceSysconForDriver_BA09F171<br />
|-<br />
| 0x14<br />
| ?between 0x1 and 0x4?<br />
| 0x93075DD1<br />
| SceSysconForDriver_93075DD1<br />
|-<br />
| 0x15<br />
| 0x4<br />
| 0x3E09A1F4<br />
| sceSysconGetManufacturesStatusForDriver<br />
|-<br />
| 0x80<br />
| 0x0<br />
| module_start<br />
| ?? Used during SysconInit. Sends 2 bytes (ex: 0x0012) to Syscon.<br />
|-<br />
| 0x81<br />
| ?<br />
| 0x9B6A6F64<br />
| sceSysconSetClockForDriver. Sends 5 bytes to Syscon: 1 byte for size=5 and 4 bytes of data.<br />
|-<br />
| 0x82<br />
| ?<br />
| 0x51164951<br />
| SceSysconForDriver_51164951<br />
|-<br />
| 0x83<br />
| ?<br />
| 0x373ECF8A<br />
| SceSysconForDriver_373ECF8A. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x84<br />
| ?<br />
| 0x2659535C<br />
| SceSysconForDriver_2659535C. Sends 1 byte to Syscon.<br />
|-<br />
| 0x85<br />
| ?<br />
| 0x4295D497<br />
| SceSysconForDriver_4295D497<br />
|-<br />
| 0x86<br />
| 8<br />
| 0x701535FC<br />
| sceSysconGetLogInfoForDriver<br />
|-<br />
| 0x87<br />
| 0<br />
| 0x4E55CF5E<br />
| sceSysconLogStartForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x88<br />
| 0x18<br />
| 0x487D97F3<br />
| sceSysconLogReadDataForDriver. Sends 2 bytes to Syscon: offset.<br />
|-<br />
| 0x89<br />
| 0<br />
| 0x9C0B1E61<br />
| sceSysconLogStartWaitingForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x90<br />
| ?0x3B?<br />
| 0x299B1CE7<br />
| sceSysconReadScratchPadForDriver<br />
|-<br />
| 0x91<br />
| ?0x3B?<br />
| 0xE26488B9<br />
| sceSysconWriteScratchPadForDriver<br />
|-<br />
| 0xA0<br />
| ?0x10 or 0x28?<br />
| second_loader<br />
| Handshake during boot. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xB0<br />
| 0<br />
| 0x058941D7<br />
| sceSysconOutputClockForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB1<br />
| 0<br />
| 0xDF8C6D2D<br />
| sceSysconCtrlWirelessPowerDownForDriver<br />
|-<br />
| 0xB2<br />
| 0<br />
| 0xDECCB2B4<br />
| sceSysconCtrlHostOutputViaDongleForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB3<br />
| at least 1<br />
| 0x33B5CDB3<br />
| SceSysconForDriver_33B5CDB3<br />
|-<br />
| 0xB4<br />
| at least 1<br />
| 0xF6D4DDC4<br />
| SceSysconForDriver_F6D4DDC4<br />
|-<br />
| 0xB5<br />
| 0<br />
| 0x00AE3AEB<br />
| SceSysconForDriver_00AE3AEB. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB6<br />
| 0<br />
| 0x0D300158<br />
| SceSysconForDriver_0D300158. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB7<br />
| at least 1<br />
| 0x91EF4EC3<br />
| SceSysconForDriver_91EF4EC3<br />
|-<br />
| 0xC0<br />
| ?0x3E?<br />
| <br />
| <br />
|-<br />
| 0xC1<br />
| 0<br />
| 0x94AB13CC<br />
| sceSysconErnieShutdownForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xD0<br />
| ?0x2A or 0x28?<br />
| 0x4D03754A<br />
| SceSysconForDriver_4D03754A. Handshake before SNVS RW. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD1<br />
| ?0x0 or 0x2?<br />
| 0xC14BD637<br />
| SceSysconForDriver_C14BD637<br />
|-<br />
| 0xD2<br />
| ?0x30?<br />
| 0xEBDF88B9, second_loader<br />
| sceSysconSnvsReadDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD3<br />
| ?0x12?<br />
| 0x63683B9B<br />
| sceSysconSnvsWriteDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0x100<br />
| 0x4<br />
| 0x145F59A4<br />
| sceSysconGetControlsInfoForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x101<br />
| 0x8<br />
| <br />
| sceSysconGetControlsInfo2ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]]. Uses Ernie version and Ernie DL version.<br />
|-<br />
| 0x102<br />
| 0xC<br />
| <br />
| <br />
|-<br />
| 0x103<br />
| 0x4<br />
| 0x1503D6A0<br />
| sceSysconGetMultiCnInfoForDriver<br />
|-<br />
| 0x104<br />
| 0xC<br />
| <br />
| sceSysconGetControlsInfo3ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x105<br />
| ?<br />
| <br />
| Uses string "PS" then "TUV".<br />
|-<br />
| 0x106<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x107<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x108<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x109<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x110<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x120<br />
| ?<br />
| 0x76272CB9<br />
| SceSysconForDriver_76272CB9<br />
|-<br />
| 0x121<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x130<br />
| 0x4<br />
| module_start (SysconInit), 0xD6F6D472<br />
| SceSysconForDriver_D6F6D472<br />
|-<br />
| 0x131<br />
| ?0x1? (read)<br />
| 0xF99BC858<br />
| SceSysconForDriver_F99BC858. Added on a FW > 3.01 and <= 3.100.081.<br />
|-<br />
| 0x140<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x141<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x142<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x143<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x144<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x145<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x146<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x147<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x148<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x150<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x151<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x152<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x153<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x154<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x155<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x156<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x157<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x160<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x161<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x162<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x163<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x168<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x170<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x171<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x172<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x180<br />
| ?<br />
| <br />
| Set analog sampling. Sends 2 bytes to Syscon: 0 to disable, 1 to enable on Syscon version is < 0x90202, 3 to enable on Syscon version is >= 0x90202. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x181<br />
| 0<br />
| 0xCFCEE733<br />
| SceSysconForDriver_CFCEE733. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x182<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x183<br />
| 0x10<br />
| 0xFDB3AE9D<br />
| SceSysconForDriver_FDB3AE9D. Gets some information.<br />
|-<br />
| 0x184<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x185<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x186<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x187<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x188<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x189<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18A<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18B<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18C<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18D<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18E<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18F<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x190<br />
| 0<br />
| 0x8AAB6308<br />
| sceSysconSetMultiCnPortForDriver. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x191<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x192<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1B0<br />
| 0<br />
| 0xE7893732<br />
| SceSysconForDriver_E7893732. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x1B2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D5<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x300<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x301<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x303<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x380<br />
| at least 1<br />
| 0xF492E69E<br />
| sceSysconGetTouchpanelDeviceInfoForDriver<br />
|-<br />
| 0x38A<br />
| at least 1<br />
| 0xA1F1B973<br />
| ??<br />
|-<br />
| 0x390<br />
| at least 1<br />
| 0x030D447F<br />
| sceSysconGetTouchpanelDeviceInfo2ForDriver<br />
|-<br />
| 0x392<br />
| ?<br />
| 0x48ED8981, 0x060E55C1<br />
| SceSysconForDriver_48ED8981 / SceSysconForDriver_060E55C1. Sends 2 bytes to Syscon: 0 or 1.<br />
|-<br />
| 0x393<br />
| ?<br />
| 0x9A28BEEF, 0x8874EF45<br />
| SceSysconForDriver_9A28BEEF / SceSysconForDriver_8874EF45. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]].<br />
|-<br />
| 0x3A0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3A1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3A2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3A3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3A4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3A9<br />
| 0<br />
| 0x010F95D9<br />
| SceSysconForDriver_010F95D9. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3AB<br />
| ?<br />
| 0x357CC9D9<br />
| SceSysconForDriver_010F95D9. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3AC<br />
| ?between 0x1 and 0x4?<br />
| 0x3664E2C0<br />
| SceSysconForDriver_3664E2C0. Gets information.<br />
|-<br />
| 0x3AF<br />
| ?<br />
| 0xB8F4F4E3<br />
| SceSysconForDriver_B8F4F4E3. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3B0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3B1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3B2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3B3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3B4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3B9<br />
| ?<br />
| 0x42E599AC<br />
| SceSysconForDriver_42E599AC. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3BB<br />
| ?<br />
| 0xCCA56A16<br />
| SceSysconForDriver_CCA56A16. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3BC<br />
| ?between 0x1 and 0x4?<br />
| 0x2E6D97CD<br />
| SceSysconForDriver_2E6D97CD. Gets information.<br />
|-<br />
| 0x3BF<br />
| ?<br />
| 0x240A604E<br />
| SceSysconForDriver_240A604E. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3C2<br />
| ?<br />
| 0x5946B29B, 0x10327C64<br />
| SceSysconForDriver_5946B29B / SceSysconForDriver_10327C64. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]]<br />
|-<br />
| 0x400<br />
| ?<br />
| 0x270B7B0B<br />
| sceSysconMotionGetMeasureDataForDriver<br />
|-<br />
| 0x480<br />
| 4<br />
| 0xD01E64FC<br />
| sceSysconMotionGetDeviceInfoForDriver<br />
|-<br />
| 0x481<br />
| ?<br />
| 0x9A7858B6<br />
| SceSysconForDriver_9A7858B6. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x800<br />
| ?0x2 or 0x4?<br />
| 0xA2FE9BF9<br />
| SceSysconForDriver_A2FE9BF9. [[ScePower]] related.<br />
|-<br />
| 0x801<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0x802<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaced by Syscon command 0x900 on Syscon version > 0x70503.<br />
|-<br />
| 0x803<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaced by Syscon command 0x901 on Syscon version > 0x70503.<br />
|-<br />
| 0x804<br />
| ?<br />
| <br />
| ??<br />
|-<br />
| 0x805<br />
| 4<br />
| 0xEF810687<br />
| sceSysconGetUsbDetStatusForDriver<br />
|-<br />
| 0x806<br />
| ?0x1?<br />
| 0xE7F5D3DC<br />
| SceSysconForDriver_E7F5D3DC. Reboots PS Vita?<br />
|-<br />
| 0x807<br />
| 0x2<br />
| 0x253CC522<br />
| SceSysconForDriver_253CC522.<br />
|-<br />
| 0x820<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED on.<br />
|-<br />
| 0x821<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink slowly.<br />
|-<br />
| 0x822<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink fast.<br />
|-<br />
| 0x840<br />
| ?0x1?<br />
| 0x4FEC564C<br />
| sceSysconGetManualChargeModeForDriver<br />
|-<br />
| 0x841<br />
| ?0x1?<br />
| 0x3C3B949C<br />
| SceSysconForDriver_3C3B949C<br />
|-<br />
| 0x842<br />
| ?0x1?<br />
| 0x1C29C00E<br />
| SceSysconForDriver_1C29C00E<br />
|-<br />
| 0x843<br />
| ?0x1?<br />
| 0x730E4725<br />
| SceSysconForDriver_730E4725<br />
|-<br />
| 0x880<br />
| 0x4<br />
| 0xA039B563<br />
| sceSysconGetElmoVersionForDriver<br />
|-<br />
| 0x881<br />
| ?<br />
| 0x9BF78047<br />
| sceSysconGetCookieVersionForDriver<br />
|-<br />
| 0x882<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaced by Syscon command 0x980 on Syscon version > 0x70503.<br />
|-<br />
| 0x883<br />
| 0x8<br />
| 0x175CE5A1<br />
| sceSysconGetPowerStatusForDriver<br />
|-<br />
| 0x884<br />
| ?<br />
| 0x3FDD29D6<br />
| SceSysconForDriver_3FDD29D6. Same usage as command 0x885. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x885<br />
| ?<br />
| 0x79E6DD8B<br />
| SceSysconForDriver_79E6DD8B. Same usage as command 0x884. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x886<br />
| ?0x2?<br />
| 0x62155962<br />
| sceSysconCtrlHdmiCecPowerForDriver<br />
|-<br />
| 0x887<br />
| ?<br />
| 0x063425AE<br />
| sceSysconCtrlMotionSensorPowerForDriver<br />
|-<br />
| 0x888<br />
| ?0x2?<br />
| 0xBE1ADE4F<br />
| sceSysconCtrlSdPowerForDriver<br />
|-<br />
| 0x889<br />
| ?0x2?<br />
| 0x8D1D97E8<br />
| sceSysconCtrlAccPowerForDriver<br />
|-<br />
| 0x88A<br />
| ?<br />
| 0x4FBDA504, 0xA2E85DB9<br />
| sceSysconCtrlWirelessPowerForDriver, sceSysconCtrlWirelessPower2ForDriver<br />
|-<br />
| 0x88B<br />
| ?<br />
| 0x5A614349<br />
| SceSysconForDriver_5A614349. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88C<br />
| ?<br />
| 0xB872E904<br />
| SceSysconForDriver_B872E904. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88D<br />
| ?<br />
| 0xDD16ABD9<br />
| SceSysconForDriver_DD16ABD9. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88E<br />
| 0x0<br />
| 0x7F198FA2<br />
| sceSysconCtrlVoltageForDriver. See [[Ernie#CMD_0x088E_-_CtrlVoltage]].<br />
|-<br />
| 0x88F<br />
| ?0x2?<br />
| 0x40FF3898<br />
| sceSysconCtrlDeviceResetForDriver. ?UsbEtherSmsc and WlanBt related?<br />
|-<br />
| 0x890<br />
| ?<br />
| 0x285594F8<br />
| SceSysconForDriver_285594F8. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x891<br />
| ?0x2?<br />
| 0x04EC7579<br />
| sceSysconCtrlLEDForDriver<br />
|-<br />
| 0x892<br />
| ?0?<br />
| 0x596B17B7<br />
| sceSysconCtrlChargeACForDriver. [[ScePower]] related.<br />
|-<br />
| 0x893<br />
| ?0?<br />
| 0x2A4B0437<br />
| sceSysconCtrlChargeVBUSForDriver. [[ScePower]] related.<br />
|-<br />
| 0x895<br />
| ?<br />
| 0x5BF765BB<br />
| sceSysconReadElmoRegForDriver<br />
|-<br />
| 0x896<br />
| ?<br />
| 0xCCC71C28<br />
| sceSysconWriteElmoRegForDriver<br />
|-<br />
| 0x897<br />
| ?<br />
| 0x95975DD1<br />
| sceSysconReadCookieRegForDriver<br />
|-<br />
| 0x898<br />
| ?<br />
| 0xF39300D3<br />
| sceSysconWriteCookieRegForDriver<br />
|-<br />
| 0x899<br />
| ?0?<br />
| 0x5CDDA14D<br />
| ?Guessed name: sceSysconCtrlHpremoteForDriver? [[SceHpremote]] related.<br />
|-<br />
| 0x89A<br />
| ?0?<br />
| 0x59DC5938<br />
| sceSysconCtrlUsbStatusForDriver<br />
|-<br />
| 0x89B<br />
| ?0x2?<br />
| 0x710A7CF0<br />
| sceSysconCtrlRMRPowerForDriver<br />
|-<br />
| 0x89C<br />
| ?0x2?<br />
| 0xB1F88B11<br />
| sceSysconCtrlMultiCnPowerForDriver. [[SceUsbServ]] related.<br />
|-<br />
| 0x89D<br />
| ?<br />
| 0x6F586D1A<br />
| sceSysconCtrlLedPwmBlinkForDriver<br />
|-<br />
| 0x89E<br />
| ?<br />
| 0x9CA6EB70<br />
| sceSysconSetChargeLedCtrlForDriver. Sends 2 bytes to Syscon. [[ScePower]] related.<br />
|-<br />
| 0x89F<br />
| ?<br />
| 0xCB41B531<br />
| sceSysconCtrlLedBlinkType2ForDriver. Sends 6 bytes to Syscon.<br />
|-<br />
| 0x8A0<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaced by Syscon command 0x981 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A1<br />
| ?0x3B or 0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaced by Syscon command 0x982 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x8A2<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaced by Syscon command 0x983 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A3<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaced by Syscon command 0x984 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A4<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaced by Syscon command 0x985 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A8<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaced by Syscon command 0x986 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A9<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaced by Syscon command 0x987 on Syscon version > 0x70503.<br />
|-<br />
| 0x8AA<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaced by Syscon command 0x988 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B0<br />
| ?<br />
| 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaced by Syscon command 0x9B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x8B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaced by Syscon command 0x9B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaced by Syscon command 0x9B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaced by Syscon command 0x9B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaced by Syscon command 0x9B4 on Syscon version > 0x70503.<br />
|-<br />
| 0x8C0<br />
| ?<br />
| 0xC6A2C9EF<br />
| sceSysconCtrlManualChargeModeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C1<br />
| ?<br />
| ??<br />
| sceSysconCtrlBatteryChargeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C2<br />
| ?<br />
| ??<br />
| sceSysconCtrlChargingCurrentForDriver (accepts 0x00 - 0x1F as value)<br />
|-<br />
| 0x8C3<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentAcForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C4<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentUsbForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C5<br />
| ?0x0 or 0x2?<br />
| 0x3274A925<br />
| SceSysconForDriver_3274A925. [[SceUsbServ]] and [[SceUsbEtherSmsc]] related.<br />
|-<br />
| 0x8C6<br />
| ?<br />
| 0xDFB024C4<br />
| sceSysconReadCookieStatusForDriver. [[SceSblUpdateMgr]] related.<br />
|-<br />
| 0x8C7<br />
| ?<br />
| 0x87FF8041<br />
| SceSysconForDriver_87FF8041. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C8<br />
| ?<br />
| 0x7BFA95DA<br />
| sceSysconCtrlUSBSupplyForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C9<br />
| ?0?<br />
| 0x451C1662<br />
| SceSysconForDriver_451C1662. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CA<br />
| 1<br />
| 0x79074DE4<br />
| SceSysconForDriver_79074DE4. Sends 0 byte to Syscon.<br />
|-<br />
| 0x8CB<br />
| 1<br />
| 0x7D25F6D2<br />
| SceSysconForDriver_7D25F6D2. Sends 1 byte to Syscon.<br />
|-<br />
| 0x8CC<br />
| ?0?<br />
| 0xD2ADABCA<br />
| SceSysconForDriver_D2ADABCA. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CE<br />
| 0x10<br />
| 0x3B354824<br />
| sceSysconGetTemperatureLogForDriver<br />
|-<br />
| 0x8CF<br />
| 0<br />
| 0x3843D657<br />
| sceSysconClearTemperatureLogForDriver. Sends 2 bytes to syscon.<br />
|-<br />
| 0x8D0<br />
| ?<br />
| 0xF87679EE<br />
| SceSysconForDriver_F87679EE. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x900<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaces Syscon command 0x802 on Syscon version > 0x70503.<br />
|-<br />
| 0x901<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaces Syscon command 0x803 on Syscon version > 0x70503.<br />
|-<br />
| 0x902<br />
| ?0x4?<br />
| 0xAD0A8275<br />
| sceSysconGetBatteryLifePercentForDriver<br />
|-<br />
| 0x903<br />
| 0x2<br />
| 0x26F9D729<br />
| sceSysconGetBatteryRemainLevelForDriver. Added on a FW higher than 2.50 and Syscon version >= 0x1040105.<br />
|-<br />
| 0x904<br />
| ?<br />
| 0x9ADC9936<br />
| sceSysconGetBatteryCalibDataForDriver<br />
|-<br />
| 0x910<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x911<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x912<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x913<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x914<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x915<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x916<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x917<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x932<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x944<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x945<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x952<br />
| ?<br />
| <br />
| Uses string "PC" then "TUV".<br />
|-<br />
| 0x953<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x954<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x961<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x962<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x963<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x964<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x965<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x966<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x967<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x968<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x969<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x980<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaces Syscon command 0x882 on Syscon version > 0x70503.<br />
|-<br />
| 0x981<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaces Syscon command 0x8A0 on Syscon version > 0x70503.<br />
|-<br />
| 0x982<br />
| ?0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaces Syscon command 0x8A1 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x983<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaces Syscon command 0x8A2 on Syscon version > 0x70503.<br />
|-<br />
| 0x984<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaces Syscon command 0x8A3 on Syscon version > 0x70503.<br />
|-<br />
| 0x985<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaces Syscon command 0x8A4 on Syscon version > 0x70503.<br />
|-<br />
| 0x986<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaces Syscon command 0x8A8 on Syscon version > 0x70503.<br />
|-<br />
| 0x987<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaces Syscon command 0x8A9 on Syscon version > 0x70503.<br />
|-<br />
| 0x988<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaces Syscon command 0x8AA on Syscon version > 0x70503.<br />
|-<br />
| 0x989<br />
| ?<br />
| 0x87DA378D<br />
| sceSysconBatterySWResetForDriver<br />
|-<br />
| 0x98A<br />
| ?between 0x2 and 0x4?<br />
| 0xF93CF833<br />
| sceSysconGetBatteryFullCapForDriver<br />
|-<br />
| 0x98B<br />
| ?between 0x2 and 0x4?<br />
| 0xECFA7242 / 0xE1885F68<br />
| sceSysconGetBicTempForDriver / sceSysconGetAbbyTempForDriver<br />
|-<br />
| 0x98C<br />
| ?0x4?<br />
| 0xCD73079D<br />
| sceSysconGetBatteryCycleCountForDriver<br />
|-<br />
| 0x9B0<br />
| ?<br />
| 0x2CEF078E / 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaces Syscon command 0x8B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x9B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaces Syscon command 0x8B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaces Syscon command 0x8B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaces Syscon command 0x8B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaces Syscon command 0x8B4 on Syscon version > 0x70503.<br />
|-<br />
| 0xA00<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0xA82<br />
| ?<br />
| 0x7BAFE083<br />
| SceSysconForDriver_7BAFE083. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x1080<br />
| ?0x0 or 0x2?<br />
| 0x81A6060D<br />
| sceSysconNvsSetRunModeForDriver<br />
|-<br />
| 0x1081<br />
| ?0x0 or 0x2?<br />
| 0x2EC6D55D<br />
| sceSysconNvsSetUnkModeForDriver<br />
|-<br />
| 0x1082<br />
| ?around 0x20?<br />
| 0xACAFA2B8<br />
| sceSysconNvsReadDataForDriver<br />
|-<br />
| 0x1083<br />
| ?0x2?<br />
| 0x10C9657A<br />
| sceSysconNvsWriteDataForDriver<br />
|-<br />
| 0x1100<br />
| 0x4<br />
| 0xD2F456DC<br />
| sceSysconGetErnieDLVersionForDriver<br />
|-<br />
| 0x1101<br />
| 0x4<br />
| <br />
| <br />
|-<br />
| 0x1180<br />
| ?<br />
| 0x9B00BC7F<br />
| sceSysconUpdaterSetSegmentForDriver<br />
|-<br />
| 0x1181<br />
| ?<br />
| 0x356B9696, 0x734544E4<br />
| sceSysconUpdaterSendProgramDataForDriver, sceSysconUpdaterSendProgramData2ForDriver<br />
|-<br />
| 0x1182<br />
| ?<br />
| 0x69AD76E4<br />
| sceSysconUpdaterExecProgrammingForDriver<br />
|-<br />
| 0x1183<br />
| ?<br />
| 0xB487C2FB<br />
| sceSysconUpdaterSetRunModeForDriver<br />
|-<br />
| 0x1184<br />
| ?<br />
| 0xC7747A63<br />
| sceSysconUpdaterExecFinalizeForDriver<br />
|-<br />
| 0x1185<br />
| ?<br />
| 0xCBA836FF<br />
| sceSysconUpdaterCheckSignatureForDriver. Sends 0x18 bytes to Syscon.<br />
|-<br />
| 0x1300<br />
| 0x8<br />
| 0xCE48E8EB<br />
| sceSysconGetConfigStorageInfoForDriver<br />
|-<br />
| 0x1310<br />
| 0x1<br />
| 0x351946B0<br />
| SceSysconForDriver_351946B0<br />
|-<br />
| 0x1382<br />
| ?<br />
| 0xA4968B8C<br />
| sceSysconBeginConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1383<br />
| ?<br />
| 0xFCC3E8EE<br />
| sceSysconEndConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1384<br />
| ?<br />
| 0x7B9B3617<br />
| sceSysconCommitConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1385<br />
| ?<br />
| 0x89C5CFD6<br />
| sceSysconLoadConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1386 (called from ARM Kernel but not implemented in Syscon FW)<br />
| ?<br />
| 0xCC6F90A8<br />
| sceSysconVerifyConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1392<br />
| ?0?<br />
| 0xFD65FFCB<br />
| SceSysconForDriver_FD65FFCB. Sends 3 bytes to Syscon: 1 byte offset (between 0 and 0xFF), 2 bytes a2 (between 0 and 2).<br />
|-<br />
| 0x1393<br />
| ?<br />
| 0x02350352<br />
| SceSysconForDriver_02350352. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x1394<br />
| ?<br />
| 0x7DE84CE3<br />
| SceSysconForDriver_7DE84CE3. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x2080<br />
| ?<br />
| 0x44A173F5<br />
| sceSysconJigOpenPortForDriver<br />
|-<br />
| 0x2081<br />
| ?<br />
| 0x483FAE05<br />
| sceSysconJigClosePortForDriver<br />
|-<br />
| 0x2082<br />
| ?<br />
| 0xD24BF916<br />
| sceSysconJigSetConfigForDriver<br />
|-<br />
| 0x2083<br />
| ?<br />
| 0x3C80B529<br />
| receive_pm_sm_jig_msg_from_syscon<br />
|-<br />
| 0x2084<br />
| ?<br />
| 0xCE346793<br />
| send_pm_sm_jig_short_msg_to_syscon<br />
|-<br />
| 0x2085<br />
| ?<br />
| 0x7BFBA09E / 0x933D813F<br />
| send_pm_sm_jig_msg_to_syscon / send_pm_sm_stop_to_syscon<br />
|}<br />
<br />
== Callbacks ==<br />
<br />
All the following exported functions have this function prototype: <code>int sceSysconSet...Callback(void (*func)(int enable, void *argp), void *argp);</code>.<br />
<br />
{| class="wikitable"<br />
! Callback name !! Callback setter function !! State getter function !! Callback setter caller !! Comments<br />
|-<br />
| SYSCON_CB_ACC || [[#sceSysconSetAccCallbackForDriver]] || [[#SceSysconForDriver_B9EA2FA8]] || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MULTI_CN_OTG || [[#sceSysconSetMultiCnOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MINI_USB_OTG || [[#sceSysconSetMiniUsbOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_ALARM || [[#sceSysconSetAlarmCallbackForDriver]] || NA || [[ScePower]] ||<br />
|-<br />
| ?SYSCON_CB_WLANBT? || [[#SceSysconForDriver_18A6F4D9]] || [[#SceSysconForDriver_C0F215B7]] || [[SceWlanBt]] but not used on <= 0.996.090 ||<br />
|-<br />
| ?SYSCON_CB_HEADPHONE? || [[#SceSysconForDriver_DE613081]] || [[#SceSysconForDriver_C3504ADE]] || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_MICROPHONE? || [[#SceSysconForDriver_63352A39]] || NA || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_REMOTE? || [[#SceSysconForDriver_35E1689F]] || [[#SceSysconForDriver_ACC7F71E]] || [[SceHpremote]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY || [[#sceSysconSetLowBatteryCallbackForDriver]] || [[#sceSysconIsLowBatteryForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_THERMAL_ALERT || [[#sceSysconSetThermalAlertCallbackForDriver]] || [[#SceSysconForDriver_50CAE242]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_REBOOT || [[#sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateRebootForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_DOWNLOAD || [[#sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateDownloadForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_BATTERY_ONLINE || [[#SceSysconForDriver_80D6E061]] || [[#SceSysconForDriver_27758A64]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_RESUME_REQUEST || [[#SceSysconForDriver_9F8340FF]] || [[#SceSysconForDriver_A57B5433]] || [[ScePower]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2D471528]] || [[#SceSysconForDriver_03C50DC3]] || [[ScePower]] || Very similar to SYSCON_CB_LOW_BATTERY.<br />
|-<br />
| ? || [[#SceSysconForDriver_7682FE69]] || [[#SceSysconForDriver_4A184B7C]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_E0D52DF0]] || [[#SceSysconForDriver_ACEE1C70]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_229A07C2]] || [[#SceSysconForDriver_B832B72C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_474A9EA7]] || [[#SceSysconForDriver_769F9AC4]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_129EA022]] || [[#SceSysconForDriver_BFDA5590]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_ALARM_TIMER || [[#SceSysconForDriver_8351526D]] || [[#SceSysconForDriver_86BAAF7D]] || [[SceRtc]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2E4BA4B8]] || [[#SceSysconForDriver_29CF4335]] || No use case seen. || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_4E88B4D9]] || [[#SceSysconForDriver_4BC63A40]] || [[SceBbmc]] || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_376CCCB8]] || [[#SceSysconForDriver_99A254A9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_3BAAC8A9]] || [[#SceSysconForDriver_9A4F4B7C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_85E5DEBF]] || [[#SceSysconForDriver_63B14156]] || [[SceBbmc]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_14730196]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_C442D0BE]] || [[#SceSysconForDriver_9F4042F8]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_61AE3970]] || [[#SceSysconForDriver_C50568E9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_423D0C58]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_154676F1]] || NA || No use case seen. ||<br />
|}<br />
<br />
See also [http://uofw.github.io/upspd/docs/SilverSpring_Blog/my.malloc.us/silverspring/2007/12/03g-model-psp/index.html SilverSpring's PSP Syscon callbacks enum] and [https://github.com/pspdev/pspsdk/blob/master/src/power/psppower.h PSPSDK power callbacks enum].<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Cmep_Key_Ring_Base&diff=21088
Cmep Key Ring Base
2024-01-22T21:03:11Z
<p>CelesteBlue: </p>
<hr />
<div>Physical address: <code>0xE0058000 + 0x20 * keyring_number</code>.<br />
<br />
Flags: See [[Cmep_registers#0xE003002C:_KeyringQueryFlagsResponse|here]]<br />
<br />
= Keyring information =<br />
<br />
== 0x0~0xFF: Slave keyrings ==<br />
<br />
Initial state: Empty keyrings.<br />
0x000-0x007: Empty group0 slave keyrings, for AES decryption only.<br />
0x008-0x00F: Empty group1 slave keyrings, any algorithm.<br />
0x010-0x01F: Empty group2 slave keyrings, for AES decryption only.<br />
0x020-0x02F: Empty group3 slave keyrings, any algorithm.<br />
0x030-0x07F: Empty normal keyrings, any algorithm.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0<br />
| rowspan="3" | 0x04420001<br />
| 0x04420003<br />
| Y/N<br />
| Secure Modules<br />
| General common keyring for crypto operation.<br />
|-<br />
| 1<br />
<!-- | 0x04420001 --><br />
| 0x04420001<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
|-<br />
| 2-7<br />
<!-- | 0x04420001 --><br />
| 0x00400001<br />
<!-- | ?<br />
| ?<br />
| ? --><br />
|-<br />
| 8<br />
| rowspan="3" | 0x049F0001<br />
| 0x00810003<br />
| rowspan="2" | Y<br />
| rowspan="3" | first_loader<br />
| [[SLSK]] personalization key. Derived from keyrings 0x206.<br />
|-<br />
| 9<br />
<!-- | 0x049F0001 --><br />
| 0x00800001<br />
<!-- | ? --><br />
<!-- | ? --><br />
| [[SLSK]] personalization key. Derived from keyrings 0x207.<br />
|-<br />
| 0xA-0xF<br />
<!-- | 0x049F0001 --><br />
| 0x00800003<br />
| N<br />
<!-- | first_loader --><br />
| 6 [[SLSK]] metadata decryption keys. Derived from keyrings 0x208-0x20D.<br />
|-<br />
| 0x10<br />
| rowspan="2" | 0x05020001<br />
| 0x05020001<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| Supports decryption only.<br />
|-<br />
| 0x11-0x1F<br />
<!-- | 0x05020001 --><br />
| 0x01000001<br />
<!-- | ? --><br />
<!-- | ? --><br />
| ?<br />
|-<br />
| 0x20<br />
| rowspan="3" | 0x061F0001<br />
| 0x02000003<br />
| N<br />
| first_loader<br />
| [[SLSK]] HMAC-SHA256 Key. Derived from keyring 0x344.<br />
|-<br />
| 0x21-0x24<br />
<!-- | 0x061F0001 --><br />
| 0x061F0001<br />
| rowspan="5" | ?<br />
| rowspan="5" | N/A<br />
| Supports encryption and decryption.<br />
|-<br />
| 0x25-0x2F<br />
<!-- | 0x061F0001 --><br />
| 0x02000001<br />
<!-- | ? --><br />
<!-- | ? --><br />
| rowspan="3" | ?<br />
|-<br />
| 0x30-0x34<br />
| rowspan="2" | 0x041F0001<br />
| 0x041F0001<br />
<!-- | ? --><br />
<!-- | ? --><br />
<!-- | ? --><br />
|-<br />
| 0x35-0x7F<br />
<!-- | 0x041F0001 --><br />
| 0x00000001<br />
<!-- | ? --><br />
<!-- | ? --><br />
<!-- | ? --><br />
|-<br />
| 0x80-0xFF<br />
| 0x00000000<br />
| 0x00000000<br />
<!-- | ?<br />
| N/A --><br />
| Not exist.<br />
|}<br />
<br />
== 0x100~0x1FF: Slave keyrings (Reserved) ==<br />
<br />
Initial state: Empty keyrings.<br />
0x100-0x17F: Empty normal keyrings, any algorithm.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0x100<br />
| 0x041F0001<br />
| 0x041F0001<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x101-0x13F<br />
| 0x00000001<br />
| rowspan="2" | 0x00000001<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
|-<br />
| 0x140-0x17F<br />
<!-- | 0x041F0001 --><br />
| 0x041F0001<br />
<!-- | ?<br />
| ?<br />
| ? --><br />
|-<br />
| 0x180-0x1FF<br />
| 0x00000000<br />
| 0x00000000<br />
<!-- | ? --><br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x200~0x2FF: Master keyrings ==<br />
<br />
Initial state: Filled in, key material.<br />
0x200-0x203: AES decryption-only keys (for memory buffers).<br />
0x204-0x205: Master keys (for group0), any algorithm.<br />
0x206-0x20D: Master keys (for group1), any algorithm.<br />
0x20E-0x20F: Emmc keys, fully protected.<br />
0x210-0x217: General purpose keys (for memory buffers).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0x200-0x203<br />
| 0x00020003<br />
| 0x00000003<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x204<br />
| rowspan="2" | 0x006F0003<br />
| rowspan="2" | 0x006F0003<br />
| rowspan="2" | Y<br />
| rowspan="7" | Bigmac<br />
| AES-256 master key for IdStorage Certificates AES-128-ECB keys derivation. Used by KIRK commands 0x10, 0x12, 0x17 and 0x19.<br />
|-<br />
| 0x205<br />
<!-- | 0x006F0003<br />
| 0x006F0003<br />
| Y<br />
| Bigmac --><br />
| ?<br />
|-<br />
| 0x206<br />
| rowspan="3" | 0x00AF0003<br />
| rowspan="3" | 0x00A00003<br />
| rowspan="2" | Y<br />
<!-- | Bigmac --><br />
| Master key used to derive key that decrypts personalized layer over [[SLSK]]. <br />
|-<br />
| 0x207<br />
<!-- | 0x00AF0003<br />
| 0x00A00003<br />
| ?<br />
| Bigmac --><br />
| Master key used instead of keyring 0x206 when first_loader secret debug mode is set.<br />
|-<br />
| 0x208-0x20D<br />
<!-- | 0x00AF0003<br />
| 0x00A00003 --><br />
| N<br />
<!-- | Bigmac --><br />
| 6 master keys used to derive AES-128-CBC Key that decrypts [[SLSK]] metadata. Which one is used depends on encryption key revision in [[SLSK]] header.<br />
|-<br />
| 0x20E<br />
| rowspan="2" | 0xXXXX0003<br />
| rowspan="2" | 0x00100003<br />
| rowspan="2" | ?<br />
<!-- | Bigmac --><br />
| per-console eMMC crypto keys.<br />
|-<br />
| 0x20F<br />
<!-- | 0xXXXX0003<br />
| 0x00100003<br />
| ?<br />
| Bigmac --><br />
| per-console eMMC crypto keys.<br />
|-<br />
| 0x210-0x211<br />
| rowspan="7" | 0x001F0003<br />
| 0x00000003<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x212<br />
<!-- | 0x001F0003 --><br />
| rowspan="2" | 0x001F0003<br />
| rowspan="2" | Y<br />
| rowspan="2" | Bigmac<br />
| AES-256-CMAC key used by KIRK commands 0x12 and 0x19.<br />
|-<br />
| 0x213<br />
<!-- | 0x001F0003<br />
| 0x001F0003<br />
| Y<br />
| Bigmac --><br />
| AES-256-CBC key used to derive (by seed encryption) SMI keys in second_loader, which are used for minimum firmware version decryption.<br />
|-<br />
| 0x214<br />
<!-- | 0x001F0003 --><br />
| rowspan="2" | 0x00000003<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| AES-256-CBC key used to derive (by seed encryption) keyrings 0x514 and 0x515 in second_loader. IVs and seeds hardcoded in second_loader.<br />
|-<br />
| 0x215<br />
<!-- | 0x001F0003<br />
| 0x00000003<br />
| ?<br />
| ? --><br />
| ?<br />
|-<br />
| 0x216<br />
<!-- | 0x001F0003 --><br />
| 0x001F0003<br />
| Y<br />
| Bigmac<br />
| AES-256-CBC key used to derive (by seed encryption) keyrings 0x502-0x504 in second_loader. IV hardcoded in second_loader. If SMI minimum FW < 0.996, this key is not used and keyrings 0x502-0x504 are set with hardcoded values from second_loader.<br />
|-<br />
| 0x217<br />
<!-- | 0x001F0003 --><br />
| 0x00000003<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x218-0x2FF<br />
| 0x00000000<br />
| 0x00000000<br />
| X<br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x300~0x3FF: Master keyrings 2 ==<br />
<br />
Initial state: Filled in, key material.<br />
0x300-0x33F: AES decryption-only keys (for memory buffers).<br />
0x340-0x343: Master keys (for group2), any algorithm.<br />
0x344-0x353: Master keys (for group3), any algorithm.<br />
0x354-0x3FF: General purpose keys (for memory buffers).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x300-0x33F || 0x00020003 || 0x00000003 || ? || ? || ?<br />
|-<br />
| 0x340 || 0x012F0003 || 0x012F0003 || ? || ? || Used to decrypt keys into the 0x10 keyring.<br />
|-<br />
| 0x341-0x343 || 0x012F0003 || 0x01200003 || ? || ? || ?<br />
|-<br />
| 0x344 || 0x022F0003 || 0x02200003 || ? || ? || Master key used to derive the 0x20 keyring in first_loader.<br />
|-<br />
| 0x345 || 0x022F0003 || 0x022F0003 || ? || ? || Used by GameCard authentication command 56.<br />
|-<br />
| 0x346 || 0x022F0003 || 0x022F0003 || ? || ? || Used to decrypt keys into one of the 0x21-0x24 keyrings.<br />
|-<br />
| 0x347 || 0x022F0003 || 0x022F0003 || ? || ? || Used to decrypt keys into one of the 0x21-0x24 keyrings.<br />
|-<br />
| 0x348 || 0x022F0003 || 0x022F0003 || ? || ? || Used by GameCard authentication command 56.<br />
|-<br />
| 0x349-0x353 || 0x022F0003 || 0x02200003 || ? || ? || ?<br />
|-<br />
| 0x354-0x3FF || 0x001F0003 || 0x00000003 || ? || ? || ?<br />
|}<br />
<br />
== 0x400~0x4FF: RW storage keyrings (Reserved) ==<br />
<br />
Initial state: Empty data storage, read-write from keyring.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0x400-0x47F<br />
| 0x18000001<br />
| 0x00000001<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x480-0x4FF<br />
| 0x00000000<br />
| 0x00000000<br />
| X<br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x500~0x5FF: RW storage keyrings ==<br />
<br />
Initial state: Empty data storage, read-write from keyring.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x500 || 0x18000001 || 0x18000001 || ? || ? || ?<br />
|-<br />
| 0x501 || 0x18000001? || 0x10000007 || N || first_loader || Used by first_loader to figure out whether to load from eMMC or ARM comms after reset. Also [[SLSK]] AES Key revision on offset>0x1C-byte>bit:0xF0000000<br />
|-<br />
| 0x502 || 0x18000001 || 0x18000003 || Y || second_loader || AES XTS Tweak for Ernie SNVS sectors.<br />
|-<br />
| 0x503 || 0x18000001 || 0x18000003 || Y || second_loader || AES XTS Decryption Key for Ernie SNVS sectors.<br />
|-<br />
| 0x504 || 0x18000001 || 0x18000003 || Y || second_loader || AES-128-CMAC Key for Ernie SNVS sectors.<br />
|-<br />
| 0x505 || 0x18000001 || 0x00000001 || ? || ? || ?<br />
|-<br />
| 0x506 || 0x18000001 || 0x18000003 || N || second_loader || QAF Token AES-256-CBC and AES-256-CMAC key. Hardcoded in second_loader. Used with IV = keyring 0x507.<br />
|-<br />
| 0x507 || 0x18000001 || 0x18000003 || N || second_loader || QAF Token AES-256-CBC IV. Hardcoded in second_loader.<br />
|-<br />
| 0x508 || 0x18000001 || 0x18000003 || Y || second_loader || Ernie version. Comes from [[Ernie]] Code Flash memory ([[Ernie]] command 1). 4 bytes. If lower (older) than 0x00090903, old Ernie protocols (unencrypted SNVS packets and maybe different SNVS keys) are used.<br />
|-<br />
| 0x509 || 0x18000001 || 0x18000003 || Y || second_loader || ConsoleId of unit. Comes from IdStorage (eMMC).<br />
|-<br />
| 0x50A || 0x18000001? || 0x18000007 || Y || second_loader || [[KBL Param#QA_flags|QA flags]]. 0x10 bytes. Comes from [[Ernie]] NVS ([[Ernie]] command 0x1082).<br />
|-<br />
| 0x50B || 0x18000001 || 0x18000003 || Y || second_loader || Mgmt Data. 8 bytes. Comes from [[Ernie]] SNVS block 0 ([[Ernie]] command 0xD2).<br />
|-<br />
| 0x50C || 0x18000001 || 0x18000003 || N || second_loader || [[Second_Loader#Boot_type_indicator_for_slsk]]<br />
|-<br />
| 0x50D || 0x18000001 || 0x18000003 || Y || second_loader || OpenPSID of unit. Comes from IdStorage (eMMC).<br />
|-<br />
| 0x50E || 0x18000001<br />
| 1.69: 0x18000003<br />
3.60: 0x10000003<br />
| Y || second_loader || Current System Software version. Comes from [[Ernie]] SNVS sector 1 first block ([[Ernie]] command 0xD0). Used by secure_kernel for KPRX version checks.<br />
|-<br />
| 0x50F || 0x18000001 || 0x18000003 || Y || second_loader || Minimum firmware version. 4 bytes. Comes from IdStorage SMI leaf (eMMC).<br />
|-<br />
| 0x510 || 0x18000001 || 0x18000003 || Y || second_loader || [[KBL Param#DIP_Switches|DIP Switches]]. 0x20 bytes. Comes from CP and [[Ernie]] ScratchPad ([[Ernie]] command 0x90 offset 0xE0).<br />
|-<br />
| 0x511 || 0x18000001 || 0x18000003 || N (random) || second_loader || Ernie communication session key. Unique per boot. It is generated by a handshake with Ernie through Ernie command 0xD0. AES-128-ECB key used to encrypt/decrypt the content of Ernie secure packets. If (ernieVersion < 0x90903 && (ernieDLVersion & 0xffffff) < 0x3600) it is zeroed by second_loader. Part of SKSO data. Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x512 || 0x18000001? || 0x18000007 || N (counter) || second_loader || Ernie communication ticket count. Used as a challenge at the start of each secure Ernie encrypted communication, for example for SNVS read/write. On each boot it is set to a random value by second_loader. Incremented by 1 after each Ernie secure commmand usage. Part of SKSO data. Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x513 || 0x18000001 || 0x18000003 || Y || second_loader || DRAM size. Set to 0x20000000 by default, 0x40000000 on DevKit in DevKit Memory Size mode. Determined by [[KBL Param#DIP_Switches|DIP Switches]] (CP).<br />
|-<br />
| 0x514 || 0x18000001 || 0x18000003 || see keyring 0x214 || second_loader || SKSO AES-256-CMAC key. Protected on FW 1.05. Data size 0x90 bytes. Used to verify SKSO. Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x515 || 0x18000001 || 0x18000003 || see keyring 0x214 || second_loader || SKSO AES-128-CBC key. Protected on FW 1.05. Data size 0xA0 bytes. Hardcoded IV in second_loader and second_kernel. Used to encrypt/decrypt SKSO (the content written into keyrings 0x511, 0x512, 0x517 and 0x519). Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x516 || 0x18000001? || 0x18000007 || N || second_loader || Some status. Set to 0 at the start of second_loader main(). Checked for 0 before initiating communication with Ernie. 4 bytes. Used by secure_kernel command 0xF01: writes (u32)1 here after having exported the SKSO to paddr 0x4001FF00.<br />
|-<br />
| 0x517 || 0x18000001 || 0x18000003 || Y || second_loader, act_sm || Kit Activation status. 4 bytes. Part of SKSO data. When initializing the keyrings, this is zeroed if keyring ?0x50D? has bit8 clear (on FW 1.692). Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x518 || 0x18000001 || 0x18000003 || Y || second_loader || Fallback current System Software version (3.60+?). Comes from SNVS sector 1 second block ([[Ernie]] command 0xD0). Used in in update_service_sm command 0x40002 as fallback for "os0" SPKGs version checks.<br />
|-<br />
| 0x519 || 0x18000001 || 0x18000003 || Y? || second_loader/utoken_sm || Part of SKSO data. Used by secure_kernel command 0xF01. Not used (maybe zeroed) on old FWs. Used on FW 3.60.<br />
|-<br />
| 0x51A || 0x18000001 || 0x18000003 || N (random) || second_loader || Coredump Encrypted Session Key (FW 2.12+). Randomized 0x20 byte key. Unique for every boot/reboot/resume. Used for Kernel coredump encryption. See [[KBL Param]] and [[SCECAF#Kernel_Coredump_Encrypted_ELF]]. Used by secure_kernel command 0x1001.<br />
|-<br />
| 0x51B || 0x18000001 || 0x18000003 || Y || second_loader || [[KBL Param#Hardware_Info|Hardware Info]]. 4 bytes. Comes from [[Ernie]] Code Flash memory ([[Ernie]] command 5).<br />
|-<br />
| 0x51C-0x51D || 0x18000001 || 0x00000001 || ? || ? || Used in update_service_sm for NVS. 4 bytes for each keyring.<br />
|-<br />
| 0x51E-0x521 || 0x18000001 || 0x00000001 || ? || ? || Used in update_service_sm for NVS. 4 bytes for each keyring.<br />
|-<br />
| 0x522-0x57F || 0x18000001 || 0x00000001 || ? || ? || ?<br />
|-<br />
| 0x580-0x5FF<br />
| 0x00000000<br />
| 0x00000000<br />
| X<br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x600~0x6FF: OTP keyrings ==<br />
<br />
Initial state: Filled in data, read-only. Keyring only.<br />
0x603: DWORD BootromFlags.<br />
Bit 0~15: HasRsaRevocationKey. This is set to 0xFFFF.<br />
Bit 16: UseAlternativeEmmcClock<br />
Bit 17: Maybe eMMC clock speed option.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x600 || 0x10000003 || 0x10000003 || Y || ? || VisibleId of unit. Can also be obtained through [[Syscon UART RPC]] command 0x120.<br />
|-<br />
| 0x601 || 0x10000003 || 0x10000003 || Y || ? || First half (0x20 bytes) of [https://www.psdevwiki.com/psp/index.php?title=Kirk#PSP_Individual_Key_Mesh_Certificate ScePspIndividualKeyMeshCert]. Copied to 0xE0020120 by second_loader.<br />
|-<br />
| 0x602 || 0x10000003 || 0x10000003 || Y || ? || Second half (0x20 bytes) of [https://www.psdevwiki.com/psp/index.php?title=Kirk#PSP_Individual_Key_Mesh_Certificate ScePspIndividualKeyMeshCert]. Copied to 0xE0020100 by second_loader.<br />
|-<br />
| 0x603 || 0x10000003 || 0x10000003 || N || ? || [[SLSK]] RSA public key flags<br />
|-<br />
| 0x604 || 0x10000003 || 0x10000003 || N || ? || ?<br />
|-<br />
| 0x605 || 0x10000003 || 0x00000003 || N || ? || ?<br />
|-<br />
| 0x606 || 0x10000003 || 0x00000003 || Y || ? || ?<br />
|-<br />
| 0x607 || 0x10000003 || 0x00000003 || Y || ? || ?<br />
|-<br />
| 0x608-0x6FF || 0x00000000 || 0x00000000 || X || N/A || Does not exist.<br />
|}<br />
<br />
== 0x700~0x7FF: SLSK RSA Public keyrings ==<br />
<br />
Initial state: Filled in data, read-only. Keyring only.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x700-0x77F || 0x10000003 || 0x00000003 || N || Bigmac || 16 RSA public keys for [[SLSK]] files. Which key is used depends on public key revision specified in [[SLSK]] header.<br />
|-<br />
| 0x780-0x7FF || 0x00000000 || 0x00000000 || N || - || -<br />
|}</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=TrustZone&diff=21079
TrustZone
2024-01-19T00:18:08Z
<p>CelesteBlue: Thanks to Team Molecule</p>
<hr />
<div>Secure World, also known as [http://www.arm.com/products/processors/technologies/trustzone/index.php TrustZone], Trusted Execution Environment, and (by Apple) Secure Enclave, is a sandboxed execution environment that has higher privileges that the normal [[Kernel]]. On the Vita, it seems that secure world has only a few tasks, which is facilitating communication with the [[Cmep]] processor, as well as SceGrab and SceSonyRegbus hardware devices. This provides an additional layer of buffer between the ARM application processor and the CMeP security processor. In addition, since System Software version 2.10, kernel process exceptions invoke a TrustZone call to initiate a kernel memory snapshot and encrypt it for use in a coredump.<br />
<br />
== Architecture ==<br />
<br />
TrustZone files are stored in [[Kernel Boot Loader]]. TrustZone consists of secure kernel modules named "Tzs" which are loaded and started by [[SKBL]]. Once that Tzs modules have been started, and that SKBL has finished its work, SKBL starts NSKBL. Tzs modules are actually modules because they just wait for their exported functions to be called. The special thing is that Tzs libraries exports are only accessible to Tzs, so non-secure kernel modules cannot import them. For that reason, Tzs [[SceExcpmgr]] registers [[SMC]]s.<br />
<br />
== Security ==<br />
<br />
The main security of Secure World is the same security that prevents kernel access from usermode which is that the secure kernel code is completely proprietary and cannot be seen in Non-secure World. Without access to the code, it is hard to develop a targeted attack on Secure World. However, once a Secure World memory dump is achieved through a memory leak exploit, one can see that the ARM secure kernel lacks most of the security features found in the [[Kernel#Security|non-secure kernel]]. This is likely because the ARM secure kernel is only to provide an extra layer of protection to prevent unauthorized access to [[Cmep]] and does not function as it does on other TrustZone enabled devices (the iPhone for example uses it to store fingerprint data). Most of the above-kernel security will be found in that processor.<br />
<br />
=== TrustZone Region Protection ===<br />
<br />
As TrustZone resides in the same DRAM as Non-secure World, it could be read from Non-secure World. To prevent that, TrustZone region is added to the access control list in Xbar->MainXbar->LPDDR0_config just before Secure KBL jumps to Non-secure KBL. After that, accessing TrustZone region from Non-secure World, with memalloc with pbase for example, will cause a DABT.<br />
<br />
== Secure Devices ==<br />
<br />
See [[Physical Memory]] for a list of known devices that can only be accessed in the Secure World. The DRAM region <code>0x40000000</code> for 2MB (3MB prior to System Software version 3.50) can only be accessed in Secure World. This is where the secure bootloader and kernel are loaded to. [[CMeP]] can only be accessed in Secure World and only Secure World can handle [[Interrupts|interrupts]] from that processor.<br />
<br />
== SCR ==<br />
<br />
After the boot initialization, the SCR is set to 0x00000004 which means FIQs are handled in Secure World.<br />
<br />
== TrustZone Debugger ==<br />
<br />
On PS Vita DevKit, TrustZone debugging is enabled. There are whole documentations about it. See also rtems-debugger-arm.c for ARM v7 TrustZone debugger.<br />
<br />
=== Unlocking Memory Interface ===<br />
<br />
<source lang="C"><br />
volatile unsigned int * unlock_memory_interface(void) {<br />
volatile unsigned int *base = pa2va(0xE3314000);<br />
base[1004] = 0xC5ACCE55;<br />
return base;<br />
}<br />
</source><br />
<br />
=== Executing ARM Instruction in TrustZone ===<br />
<br />
<source lang="C"><br />
void NonSecureToSecure(volatile unsigned int *base) {<br />
unsigned int saved_cpsr;<br />
unsigned int new_cpsr;<br />
unsigned int scr;<br />
// Step 0: Save the processor mode<br />
saved_cpsr = ReadCPSR(base);<br />
// Step 1: Change the processor mode to Monitor Mode<br />
new_cpsr = (saved_cpsr & ~0x1F) | 0x16;<br />
WriteCPSR(base, new_cpsr);<br />
// Step 2: Clear the Non-secure bit<br />
scr = ReadCPReg(base, 15, 0, 1, 1, 0);<br />
scr = (scr & ~1);<br />
WriteCPReg(base, 15, 0, 1, 1, 0, scr);<br />
// Step 3: Restore the processor mode<br />
WriteCPSR(base, saved_cpsr);<br />
}<br />
<br />
void halt_core_secure(volatile unsigned int *base) {<br />
base[34] = (base[34] & 0xffff7fff) | 0x4000; // unset HDBGen, set MDBGen<br />
//printf("halt req\n");<br />
base[36] = 1; // halt request<br />
//printf("halt wait\n");<br />
while (!(base[34] & 1)); // wait for halt<br />
base[34] |= 0x2000; // ITRen<br />
//printf("n2s\n");<br />
NonSecureToSecure(base);<br />
}<br />
<br />
void ExecuteARMInstruction(volatile unsigned int *base, unsigned int instr) {<br />
unsigned int dscr;<br />
// Step 1. Poll DSCR until InstrCompl is set to 1.<br />
do { dscr = base[34]; } while (!(dscr & (1<<24)));<br />
// Step 2. Write the opcode to the ITR.<br />
base[33] = instr;<br />
// Step 3. Poll DSCR until InstrCompl is set to 1.<br />
do { dscr = base[34]; } while (!(dscr & (1<<24)));<br />
}<br />
<br />
volatile unsigned int *base = unlock_memory_interface();<br />
ExecuteARMInstruction(base, armv7_infloop); // execute infinite loop to prove arbitrary code execution in TrustZone<br />
</source><br />
<br />
=== Offsets ===<br />
<br />
<pre><br />
DBGOSLAR offset 0x300<br />
1004 -> 0xFB0<br />
<br />
DBGOSLSR offset 0x304<br />
status USEFUL<br />
<br />
DBGOSSRR offset 0x308<br />
Save and Restore Register<br />
Read this once to get "num" then read "num" times to save the logic state.<br />
</pre><br />
<br />
=== ARM v7 Debug OS Save sequence ===<br />
<br />
To preserve the debug logic state over a power-down, this state must be saved to non-volatile storage. This means that the OS Save sequence must:<br />
1. Set the OS Lock by writing the key value, 0xC5ACCE55, to the DBGOSLAR. This also initializes the DBGOSSRR.<br />
2. If using the CP14 interface, execute an ISB instruction.<br />
3. Perform an initial read of DBGOSSRR. This returns the number of reads of the DBGOSSRR that are required to save the entire debug logic state. This number is IMPLEMENTATION DEFINED but must be less than or equal to 128. <br />
<br />
[[Category:Kernel]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Cmep_Key_Ring_Base&diff=21078
Cmep Key Ring Base
2024-01-18T23:55:36Z
<p>CelesteBlue: /* 0x600~0x6FF: OTP keyrings */</p>
<hr />
<div>Physical address: <code>0xE0058000 + 0x20 * keyring_number</code>.<br />
<br />
Flags: See [[Cmep_registers#0xE003002C:_KeyringQueryFlagsResponse|here]]<br />
<br />
= Keyring information =<br />
<br />
== 0x0~0xFF: Slave keyrings ==<br />
<br />
Initial state: Empty keyrings.<br />
0x000-0x007: Empty group0 slave keyrings, for AES decryption only.<br />
0x008-0x00F: Empty group1 slave keyrings, any algorithm.<br />
0x010-0x01F: Empty group2 slave keyrings, for AES decryption only.<br />
0x020-0x02F: Empty group3 slave keyrings, any algorithm.<br />
0x030-0x07F: Empty normal keyrings, any algorithm.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0<br />
| rowspan="3" | 0x04420001<br />
| 0x04420003<br />
| Y/N<br />
| Secure Modules<br />
| General common keyring for crypto operation.<br />
|-<br />
| 1<br />
<!-- | 0x04420001 --><br />
| 0x04420001<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
|-<br />
| 2-7<br />
<!-- | 0x04420001 --><br />
| 0x00400001<br />
<!-- | ?<br />
| ?<br />
| ? --><br />
|-<br />
| 8<br />
| rowspan="3" | 0x049F0001<br />
| 0x00810003<br />
| rowspan="2" | Y<br />
| rowspan="3" | first_loader<br />
| [[SLSK]] personalization key. Derived from keyrings 0x206.<br />
|-<br />
| 9<br />
<!-- | 0x049F0001 --><br />
| 0x00800001<br />
<!-- | ? --><br />
<!-- | ? --><br />
| [[SLSK]] personalization key. Derived from keyrings 0x207.<br />
|-<br />
| 0xA-0xF<br />
<!-- | 0x049F0001 --><br />
| 0x00800003<br />
| N<br />
<!-- | first_loader --><br />
| 6 [[SLSK]] metadata decryption keys. Derived from keyrings 0x208-0x20D.<br />
|-<br />
| 0x10<br />
| rowspan="2" | 0x05020001<br />
| 0x05020001<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| Supports decryption only.<br />
|-<br />
| 0x11-0x1F<br />
<!-- | 0x05020001 --><br />
| 0x01000001<br />
<!-- | ? --><br />
<!-- | ? --><br />
| ?<br />
|-<br />
| 0x20<br />
| rowspan="3" | 0x061F0001<br />
| 0x02000003<br />
| N<br />
| first_loader<br />
| [[SLSK]] HMAC-SHA256 Key. Derived from keyring 0x344.<br />
|-<br />
| 0x21-0x24<br />
<!-- | 0x061F0001 --><br />
| 0x061F0001<br />
| rowspan="5" | ?<br />
| rowspan="5" | N/A<br />
| Supports encryption and decryption.<br />
|-<br />
| 0x25-0x2F<br />
<!-- | 0x061F0001 --><br />
| 0x02000001<br />
<!-- | ? --><br />
<!-- | ? --><br />
| rowspan="3" | ?<br />
|-<br />
| 0x30-0x34<br />
| rowspan="2" | 0x041F0001<br />
| 0x041F0001<br />
<!-- | ? --><br />
<!-- | ? --><br />
<!-- | ? --><br />
|-<br />
| 0x35-0x7F<br />
<!-- | 0x041F0001 --><br />
| 0x00000001<br />
<!-- | ? --><br />
<!-- | ? --><br />
<!-- | ? --><br />
|-<br />
| 0x80-0xFF<br />
| 0x00000000<br />
| 0x00000000<br />
<!-- | ?<br />
| N/A --><br />
| Not exist.<br />
|}<br />
<br />
== 0x100~0x1FF: Slave keyrings (Reserved) ==<br />
<br />
Initial state: Empty keyrings.<br />
0x100-0x17F: Empty normal keyrings, any algorithm.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0x100<br />
| 0x041F0001<br />
| 0x041F0001<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x101-0x13F<br />
| 0x00000001<br />
| rowspan="2" | 0x00000001<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
|-<br />
| 0x140-0x17F<br />
<!-- | 0x041F0001 --><br />
| 0x041F0001<br />
<!-- | ?<br />
| ?<br />
| ? --><br />
|-<br />
| 0x180-0x1FF<br />
| 0x00000000<br />
| 0x00000000<br />
<!-- | ? --><br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x200~0x2FF: Master keyrings ==<br />
<br />
Initial state: Filled in, key material.<br />
0x200-0x203: AES decryption-only keys (for memory buffers).<br />
0x204-0x205: Master keys (for group0), any algorithm.<br />
0x206-0x20D: Master keys (for group1), any algorithm.<br />
0x20E-0x20F: Emmc keys, fully protected.<br />
0x210-0x217: General purpose keys (for memory buffers).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0x200-0x203<br />
| 0x00020003<br />
| 0x00000003<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x204<br />
| rowspan="2" | 0x006F0003<br />
| rowspan="2" | 0x006F0003<br />
| rowspan="2" | Y<br />
| rowspan="7" | Bigmac<br />
| AES-256 master key for IdStorage Certificates AES-128-ECB keys derivation. Used by KIRK commands 0x10, 0x12, 0x17 and 0x19.<br />
|-<br />
| 0x205<br />
<!-- | 0x006F0003<br />
| 0x006F0003<br />
| Y<br />
| Bigmac --><br />
| ?<br />
|-<br />
| 0x206<br />
| rowspan="3" | 0x00AF0003<br />
| rowspan="3" | 0x00A00003<br />
| rowspan="2" | Y<br />
<!-- | Bigmac --><br />
| Master key used to derive key used to decrypt personalized layer over [[SLSK]]. <br />
|-<br />
| 0x207<br />
<!-- | 0x00AF0003<br />
| 0x00A00003<br />
| ?<br />
| Bigmac --><br />
| Master key used instead of keyring 0x206 when first_loader secret debug mode is set.<br />
|-<br />
| 0x208-0x20D<br />
<!-- | 0x00AF0003<br />
| 0x00A00003 --><br />
| N<br />
<!-- | Bigmac --><br />
| 6 master keys used to derive AES-128-CBC Key to decrypt [[SLSK]] metadata. Which one is used depends on encryption key revision in [[SLSK]] header.<br />
|-<br />
| 0x20E<br />
| rowspan="2" | 0xXXXX0003<br />
| rowspan="2" | 0x00100003<br />
| rowspan="2" | ?<br />
<!-- | Bigmac --><br />
| per-console eMMC crypto keys.<br />
|-<br />
| 0x20F<br />
<!-- | 0xXXXX0003<br />
| 0x00100003<br />
| ?<br />
| Bigmac --><br />
| per-console eMMC crypto keys.<br />
|-<br />
| 0x210-0x211<br />
| rowspan="7" | 0x001F0003<br />
| 0x00000003<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x212<br />
<!-- | 0x001F0003 --><br />
| rowspan="2" | 0x001F0003<br />
| rowspan="2" | Y<br />
| rowspan="2" | Bigmac<br />
| AES-256-CMAC key used by KIRK commands 0x12 and 0x19.<br />
|-<br />
| 0x213<br />
<!-- | 0x001F0003<br />
| 0x001F0003<br />
| Y<br />
| Bigmac --><br />
| AES-256-CBC key used to derive (by seed encryption) SMI keys in second_loader, which are used for minimum firmware version decryption.<br />
|-<br />
| 0x214<br />
<!-- | 0x001F0003 --><br />
| rowspan="2" | 0x00000003<br />
| rowspan="2" | ?<br />
| rowspan="2" | ?<br />
| AES-256-CBC key used to derive (by seed encryption) keyrings 0x514 and 0x515 in second_loader. IVs and seeds hardcoded in second_loader.<br />
|-<br />
| 0x215<br />
<!-- | 0x001F0003<br />
| 0x00000003<br />
| ?<br />
| ? --><br />
| ?<br />
|-<br />
| 0x216<br />
<!-- | 0x001F0003 --><br />
| 0x001F0003<br />
| Y<br />
| Bigmac<br />
| AES-256-CBC key used to derive (by seed encryption) keyrings 0x502-0x504 in second_loader. IV hardcoded in second_loader. If SMI minimum FW < 0.996, this key is not used and keyrings 0x502-0x504 are set with hardcoded values from second_loader.<br />
|-<br />
| 0x217<br />
<!-- | 0x001F0003 --><br />
| 0x00000003<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x218-0x2FF<br />
| 0x00000000<br />
| 0x00000000<br />
| X<br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x300~0x3FF: Master keyrings 2 ==<br />
<br />
Initial state: Filled in, key material.<br />
0x300-0x33F: AES decryption-only keys (for memory buffers).<br />
0x340-0x343: Master keys (for group2), any algorithm.<br />
0x344-0x353: Master keys (for group3), any algorithm.<br />
0x354-0x3FF: General purpose keys (for memory buffers).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x300-0x33F || 0x00020003 || 0x00000003 || ? || ? || ?<br />
|-<br />
| 0x340 || 0x012F0003 || 0x012F0003 || ? || ? || Used to decrypt keys into the 0x10 keyring.<br />
|-<br />
| 0x341-0x343 || 0x012F0003 || 0x01200003 || ? || ? || ?<br />
|-<br />
| 0x344 || 0x022F0003 || 0x02200003 || ? || ? || Master key used to derive the 0x20 keyring in first_loader.<br />
|-<br />
| 0x345-0x348 || 0x022F0003 || 0x022F0003 || ? || ? || Used to decrypt keys into one of the 0x21-0x24 keyrings.<br />
|-<br />
| 0x349-0x353 || 0x022F0003 || 0x02200003 || ? || ? || ?<br />
|-<br />
| 0x354-0x3FF || 0x001F0003 || 0x00000003 || ? || ? || ?<br />
|}<br />
<br />
== 0x400~0x4FF: RW storage keyrings (Reserved) ==<br />
<br />
Initial state: Empty data storage, read-write from keyring.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring<br />
! Initial flags<br />
! Flags after kernel boot<br />
! Per-console<br />
! Set By<br />
! Description<br />
|-<br />
| 0x400-0x47F<br />
| 0x18000001<br />
| 0x00000001<br />
| ?<br />
| ?<br />
| ?<br />
|-<br />
| 0x480-0x4FF<br />
| 0x00000000<br />
| 0x00000000<br />
| X<br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x500~0x5FF: RW storage keyrings ==<br />
<br />
Initial state: Empty data storage, read-write from keyring.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x500 || 0x18000001 || 0x18000001 || ? || ? || ?<br />
|-<br />
| 0x501 || 0x18000001? || 0x10000007 || N || first_loader || Used by first_loader to figure out whether to load from eMMC or ARM comms after reset. Also [[SLSK]] AES Key revision on offset>0x1C-byte>bit:0xF0000000<br />
|-<br />
| 0x502 || 0x18000001 || 0x18000003 || Y || second_loader || AES XTS Tweak for Ernie SNVS sectors.<br />
|-<br />
| 0x503 || 0x18000001 || 0x18000003 || Y || second_loader || AES XTS Decryption Key for Ernie SNVS sectors.<br />
|-<br />
| 0x504 || 0x18000001 || 0x18000003 || Y || second_loader || AES-128-CMAC Key for Ernie SNVS sectors.<br />
|-<br />
| 0x505 || 0x18000001 || 0x00000001 || ? || ? || ?<br />
|-<br />
| 0x506 || 0x18000001 || 0x18000003 || N || second_loader || QAF Token AES-256-CBC and AES-256-CMAC key. Hardcoded in second_loader. Used with IV = keyring 0x507.<br />
|-<br />
| 0x507 || 0x18000001 || 0x18000003 || N || second_loader || QAF Token AES-256-CBC IV. Hardcoded in second_loader.<br />
|-<br />
| 0x508 || 0x18000001 || 0x18000003 || Y || second_loader || Ernie version. Comes from [[Ernie]] Code Flash memory ([[Ernie]] command 1). 4 bytes. If lower (older) than 0x00090903, old Ernie protocols (unencrypted SNVS packets and maybe different SNVS keys) are used.<br />
|-<br />
| 0x509 || 0x18000001 || 0x18000003 || Y || second_loader || ConsoleId of unit. Comes from IdStorage (eMMC).<br />
|-<br />
| 0x50A || 0x18000001? || 0x18000007 || Y || second_loader || [[KBL Param#QA_flags|QA flags]]. 0x10 bytes. Comes from [[Ernie]] NVS ([[Ernie]] command 0x1082).<br />
|-<br />
| 0x50B || 0x18000001 || 0x18000003 || Y || second_loader || Mgmt Data. 8 bytes. Comes from [[Ernie]] SNVS block 0 ([[Ernie]] command 0xD2).<br />
|-<br />
| 0x50C || 0x18000001 || 0x18000003 || N || second_loader || [[Second_Loader#Boot_type_indicator_for_slsk]]<br />
|-<br />
| 0x50D || 0x18000001 || 0x18000003 || Y || second_loader || OpenPSID of unit. Comes from IdStorage (eMMC).<br />
|-<br />
| 0x50E || 0x18000001<br />
| 1.69: 0x18000003<br />
3.60: 0x10000003<br />
| Y || second_loader || Current System Software version. Comes from [[Ernie]] SNVS sector 1 first block ([[Ernie]] command 0xD0). Used by secure_kernel for KPRX version checks.<br />
|-<br />
| 0x50F || 0x18000001 || 0x18000003 || Y || second_loader || Minimum firmware version. 4 bytes. Comes from IdStorage SMI leaf (eMMC).<br />
|-<br />
| 0x510 || 0x18000001 || 0x18000003 || Y || second_loader || [[KBL Param#DIP_Switches|DIP Switches]]. 0x20 bytes. Comes from CP and [[Ernie]] ScratchPad ([[Ernie]] command 0x90 offset 0xE0).<br />
|-<br />
| 0x511 || 0x18000001 || 0x18000003 || N (random) || second_loader || Ernie communication session key. Unique per boot. It is generated by a handshake with Ernie through Ernie command 0xD0. AES-128-ECB key used to enc/dec the content of Ernie secure packets. If (ernieVersion < 0x90903 && (ernieDLVersion & 0xffffff) < 0x3600) it is zeroed by second_loader. Part of SKSO data. Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x512 || 0x18000001? || 0x18000007 || N (counter) || second_loader || Ernie communication ticket count. Used as a challenge at the start of each secure Ernie encrypted communication, for example for SNVS read/write. On each boot it is set to a random value by second_loader. Incremented by 1 after each Ernie secure commmand usage. Part of SKSO data. Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x513 || 0x18000001 || 0x18000003 || Y || second_loader || DRAM size. Set to 0x20000000 by default, 0x40000000 on DevKit in DevKit Memory Size mode. Determined by [[KBL Param#DIP_Switches|DIP Switches]] (CP).<br />
|-<br />
| 0x514 || 0x18000001 || 0x18000003 || see keyring 0x214 || second_loader || SKSO AES-256-CMAC key. Protected on FW 1.05. Data size 0x90 bytes. Used to verify SKSO. Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x515 || 0x18000001 || 0x18000003 || see keyring 0x214 || second_loader || SKSO AES-128-CBC key. Protected on FW 1.05. Data size 0xA0 bytes. Hardcoded IV in second_loader and second_kernel. Used to encrypt/decrypt SKSO (the content written into keyrings 0x511, 0x512, 0x517 and 0x519). Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x516 || 0x18000001? || 0x18000007 || N || second_loader || Some status. Set to 0 at the start of second_loader main(). Checked for 0 before initiating communication with Ernie. 4 bytes. Used by secure_kernel command 0xF01: writes (u32)1 here after having exported the SKSO to paddr 0x4001FF00.<br />
|-<br />
| 0x517 || 0x18000001 || 0x18000003 || Y || second_loader, act_sm || Kit Activation status. 4 bytes. Part of SKSO data. When initializing the keyrings, this is zeroed if keyring ?0x50D? has bit8 clear (on FW 1.692). Used by secure_kernel command 0xF01.<br />
|-<br />
| 0x518 || 0x18000001 || 0x18000003 || Y || second_loader || Fallback current System Software version (3.60+?). Comes from SNVS sector 1 second block ([[Ernie]] command 0xD0). Used in in update_service_sm command 0x40002 as fallback for "os0" SPKGs version checks.<br />
|-<br />
| 0x519 || 0x18000001 || 0x18000003 || Y? || second_loader/utoken_sm || Part of SKSO data. Used by secure_kernel command 0xF01. Not used (maybe zeroed) on old FWs. Used on FW 3.60.<br />
|-<br />
| 0x51A || 0x18000001 || 0x18000003 || N (random) || second_loader || Coredump Encrypted Session Key (FW 2.12+). Randomized 0x20 byte key. Unique for every boot/reboot/resume. Used for Kernel coredump encryption. See [[KBL Param]] and [[SCECAF#Kernel_Coredump_Encrypted_ELF]]. Used by secure_kernel command 0x1001.<br />
|-<br />
| 0x51B || 0x18000001 || 0x18000003 || Y || second_loader || [[KBL Param#Hardware_Info|Hardware Info]]. 4 bytes. Comes from [[Ernie]] Code Flash memory ([[Ernie]] command 5).<br />
|-<br />
| 0x51C-0x51D || 0x18000001 || 0x00000001 || ? || ? || Used in update_service_sm for NVS. 4 bytes for each keyring.<br />
|-<br />
| 0x51E-0x521 || 0x18000001 || 0x00000001 || ? || ? || Used in update_service_sm for NVS. 4 bytes for each keyring.<br />
|-<br />
| 0x522-0x57F || 0x18000001 || 0x00000001 || ? || ? || ?<br />
|-<br />
| 0x580-0x5FF<br />
| 0x00000000<br />
| 0x00000000<br />
| X<br />
| N/A<br />
| Not exist.<br />
|}<br />
<br />
== 0x600~0x6FF: OTP keyrings ==<br />
<br />
Initial state: Filled in data, read-only. Keyring only.<br />
0x603: DWORD BootromFlags.<br />
Bit 0~15: HasRsaRevocationKey. This is set to 0xFFFF.<br />
Bit 16: UseAlternativeEmmcClock<br />
Bit 17: Maybe eMMC clock speed option.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x600 || 0x10000003 || 0x10000003 || Y || ? || VisibleId of unit. Can also be obtained through [[Syscon UART RPC]] command 0x120.<br />
|-<br />
| 0x601 || 0x10000003 || 0x10000003 || Y || ? || First half (0x20 bytes) of [https://www.psdevwiki.com/psp/index.php?title=Kirk#PSP_Individual_Key_Mesh_Certificate ScePspIndividualKeyMeshCert]. Copied to 0xE0020120 by second_loader.<br />
|-<br />
| 0x602 || 0x10000003 || 0x10000003 || Y || ? || Second half (0x20 bytes) of [https://www.psdevwiki.com/psp/index.php?title=Kirk#PSP_Individual_Key_Mesh_Certificate ScePspIndividualKeyMeshCert]. Copied to 0xE0020100 by second_loader.<br />
|-<br />
| 0x603 || 0x10000003 || 0x10000003 || N || ? || [[SLSK]] RSA public key flags<br />
|-<br />
| 0x604 || 0x10000003 || 0x10000003 || N || ? || ?<br />
|-<br />
| 0x605 || 0x10000003 || 0x00000003 || N || ? || ?<br />
|-<br />
| 0x606 || 0x10000003 || 0x00000003 || Y || ? || ?<br />
|-<br />
| 0x607 || 0x10000003 || 0x00000003 || Y || ? || ?<br />
|-<br />
| 0x608-0x6FF || 0x00000000 || 0x00000000 || X || N/A || Does not exist.<br />
|}<br />
<br />
== 0x700~0x7FF: SLSK RSA Public keyrings ==<br />
<br />
Initial state: Filled in data, read-only. Keyring only.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Keyring !! Initial flags !! Flags after kernel boot !! Per-console !! Set By !! Description<br />
|-<br />
| 0x700-0x77F || 0x10000003 || 0x00000003 || N || Bigmac || 16 RSA public keys for [[SLSK]] files. Which key is used depends on public key revision specified in [[SLSK]] header.<br />
|-<br />
| 0x780-0x7FF || 0x00000000 || 0x00000000 || N || - || -<br />
|}</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSyscon&diff=21074
SceSyscon
2024-01-17T22:39:03Z
<p>CelesteBlue: </p>
<hr />
<div>SceSyscon is a kernel module in charge of interacting with the System Controller by executing commands.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.931.010-3.740.011 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.931.010-3.740.011 || [[SceSyscon#SceSysconForDriver|SceSysconForDriver]] || Non-secure || Kernel || 0x60A35F64<br />
|}<br />
<br />
== Types ==<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_ERROR_SYSCON_ERROR 0x80250000<br />
#define SCE_SYSCON_ERROR_INVALID_SIZE 0x80250001<br />
#define SCE_SYSCON_ERROR_INVALID_ARGUMENT 0x80250002<br />
#define SCE_SYSCON_ERROR_INVALID_POINTER 0x80250003<br />
#define SCE_SYSCON_ERROR_INVALID_STATUS 0x80250004<br />
#define SCE_SYSCON_ERROR_NOT_INTR_ALLOWED 0x80250005<br />
#define SCE_SYSCON_ERROR_TX_SIZE_TOO_LONG 0x80250006<br />
<br />
#define SCE_SYSCON_ERROR_ILLEGAL_SIZE 0x80250100<br />
#define SCE_SYSCON_ERROR_ILLEGAL_STATUS 0x80250101<br />
#define SCE_SYSCON_ERROR_NOEXEC 0x80250102<br />
#define SCE_SYSCON_ERROR_INVALID_FLAGS 0x80250105<br />
<br />
// Syscon error codes are gotten with 0x80250200 | rx[3], where rx is the data returned by Syscon<br />
<br />
typedef struct SceSysconPacket { // size is 0x80<br />
struct SceSysconPacket *next;<br />
SceUInt32 status; // Lower 16 bits contain flags<br />
SceUID semaId;<br />
SceUInt32 index; // Out: returns to which packet list the packet was inserted into<br />
SceUInt8 tx[32]; // tx[0..1] = cmd, tx[2] = size i.e. sizeof(actual_data)+1, rx[3..31] = actual_data<br />
SceUInt8 rx[32]; // rx[0..1] = cmd, rx[2] = size i.e. sizeof(actual_data)+2, rx[3] = error_code, rx[4..31] = actual_data<br />
void *tx_extra;<br />
void *rx_extra;<br />
SceSize rx_extra_size;<br />
SceUInt32 rx_offset;<br />
int (*callback)(SceSysconPacket *packet, void *argp);<br />
void *argp;<br />
SceUInt32 time;<br />
SceUInt32 unk[5];<br />
} SceSysconPacket;<br />
<br />
typedef enum SceSysconControl {<br />
SCE_SYSCON_CTRL_UP = 0x1,<br />
SCE_SYSCON_CTRL_RIGHT = 0x2,<br />
SCE_SYSCON_CTRL_DOWN = 0x4,<br />
SCE_SYSCON_CTRL_LEFT = 0x8,<br />
SCE_SYSCON_CTRL_TRIANGLE = 0x10,<br />
SCE_SYSCON_CTRL_CIRCLE = 0x20,<br />
SCE_SYSCON_CTRL_CROSS = 0x40,<br />
SCE_SYSCON_CTRL_SQUARE = 0x80,<br />
SCE_SYSCON_CTRL_SELECT = 0x100,<br />
SCE_SYSCON_CTRL_LTRIGGER = 0x200,<br />
SCE_SYSCON_CTRL_RTRIGGER = 0x400,<br />
SCE_SYSCON_CTRL_START = 0x800,<br />
SCE_SYSCON_CTRL_PSBUTTON = 0x1000,<br />
SCE_SYSCON_CTRL_POWER = 0x4000,<br />
SCE_SYSCON_CTRL_VOLUP = 0x10000,<br />
SCE_SYSCON_CTRL_VOLDOWN = 0x20000,<br />
SCE_SYSCON_CTRL_HEADPHONE = 0x8000000<br />
} SceSysconControl;<br />
</source><br />
<br />
Flags (passed to <code>sceSysconCmdExecForDriver</code>, etc), also lower bits of <code>status</code>:<br />
{| class="wikitable"<br />
! Flags !! Meaning<br />
|-<br />
| 0x1 || Some kind of priority that helps to select to which packet list the packet is inserted into.<br />
|-<br />
| 0x100 || Do not insert packet checksum (at <code>tx_buf[2 + len]</code>), where <code>len = tx_buf[2]</code>. And don't memset the rest of the buffer to -1 (<code>memset(tx_buf + len + 3, -1, 29 - len)</code>) if len < 29.<br />
|-<br />
| 0x400 || When set, use rx_extra to receive the data. rx_extra_size must be greater than 32.<br />
|-<br />
| 0x800 || When set, use tx_extra instead of tx for sending data. The size is contained in tx_extra[2] and must be smaller or equal to 253. When cleared: use tx and the size is contained in tx[2], which has to be smaller or equal 29.<br />
|}<br />
<br />
== SceSysconForDriver ==<br />
<br />
=== sceSysconErnieShutdownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x94AB13CC<br />
|}<br />
<br />
Calls Syscon command 0xC1.<br />
<br />
<source lang="C"><br />
#define ERNIE_SHUTDOWN_SHUTDOWN 0<br />
#define ERNIE_SHUTDOWN_REBOOT 1<br />
<br />
int sceSysconErnieShutdownForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconErnieResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x14B99945<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconPowerCtrlKermitResetForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=RESET and mode=0: <code>return sceSysconSetPowerModeForDriver(2, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieResetForDriver(void);</source><br />
<br />
=== sceSysconErnieHibernateForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4278E614<br />
|}<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=HIBERNATE and mode=0: <code>return sceSysconSetPowerModeForDriver(5, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieHibernateForDriver(void);</source><br />
<br />
=== sceSysconBatterySWResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x87DA378D<br />
|}<br />
<br />
If Syscon version <= 0x70503, it does nothing and returns error 0x8025023F.<br />
<br />
<source lang="C">int sceSysconBatterySWResetForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xF93CF833<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryFullCapacityForDriver.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(SceUInt32 *pCap);</source><br />
<br />
=== sceSysconGetBicTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000 || 0xECFA7242<br />
|-<br />
| 1.000.041-3.740.011 || not present. Renamed to sceSysconGetAbbyTempForDriver.<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replaced (just renaming) by [[#sceSysconGetAbbyTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetBicTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetAbbyTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present. Was named sceSysconGetBicTempForDriver.<br />
|-<br />
| 1.000.041-3.740.011 || 0xE1885F68<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replacement (just renaming) for [[#sceSysconGetBicTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetAbbyTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetBatteryCycleCountForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCD73079D<br />
|}<br />
<br />
Calls Syscon command 0x98C.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryCycleCountForDriver(SceUInt32 *pCount);</source><br />
<br />
=== sceSysconBatteryStartBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2CEF078E<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStartBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatteryStopBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4AE7852<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStopBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatterySetBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4F29744<br />
|}<br />
<br />
BL command (1 byte at most) must be contained in either unk_byte or pSrc.<br />
<br />
<source lang="C">int sceSysconBatterySetBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk_byte, void *pSrc, SceUInt8 size);</source><br />
<br />
=== sceSysconBatteryExecBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x74B2AB55<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryExecBLCommandForDriver(SceUInt16 ctx);</source><br />
<br />
=== sceSysconBatteryReadBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x448DAFF1<br />
|}<br />
<br />
<source lang="C"><br />
// size must be between 0 and 0x10<br />
int sceSysconBatteryReadBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk1, SceUInt8 unk2, void *pDst, SceUInt8 size);<br />
</source><br />
<br />
=== sceSysconGetManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4FEC564C<br />
|}<br />
<br />
<source lang="C">int sceSysconGetManualChargeModeForDriver(int *piMode);</source><br />
<br />
=== sceSysconCtrlManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xC6A2C9EF<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlManualChargeModeForDriver(int mode);</source><br />
<br />
=== sceSysconSetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B6A6F64<br />
|}<br />
<br />
Calls Syscon command 0x81.<br />
<br />
Sets current Syscon power on time in ticks of 0.5 second. The set value can be get with [[#sceSysconGetClockForDriver]].<br />
<br />
Used in [[SceRtc]]. Set to 0 just before setting Current Tick, to reset syscon power on time.<br />
<br />
<source lang="C">int sceSysconSetClockForDriver(SceUInt32 time);</source><br />
<br />
=== SceSysconForDriver_51164951 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x51164951<br />
|}<br />
<br />
Calls Syscon command 0x82. On Syscon version < 0x90907, 4 bytes are sent to Syscon, whilst on Syscon version >= 0x90907, 5 bytes are sent to Syscon.<br />
<br />
Sets an alarm tick. The set tick can be get using Syscon command 0x12 via [[#SceSysconForDriver_3168F3AF]].<br />
<br />
Used in [[SceRtc#sceRtcSetAlarmTickForDriver]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_51164951(void *tick);<br />
<br />
// FW 3.600.011-3.740.011<br />
// tick_low: seen value: 0xffffffff during Syscon Init<br />
// tick_hi: some 8-bit flag, seen value: 0 during Syscon Init<br />
int SceSysconForDriver_51164951(SceUint32 tick_low, SceUInt8 tick_hi);<br />
</source><br />
<br />
=== SceSysconForDriver_373ECF8A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x373ECF8A<br />
|}<br />
<br />
Calls Syscon command 0x83. Sends 3 bytes to Syscon. Used only if [[KBL Param#Hardware Info|Hardware Info]] indicates that the motherboard is not IRT-001 or IRT-002 or type 0x10 (maybe named IRS-001) and if console is not in manufacturing mode.<br />
<br />
<source lang="C">int SceSysconForDriver_373ECF8A(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_2659535C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x2659535C<br />
|}<br />
<br />
Calls Syscon command 0x84. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_2659535C(void);</source><br />
<br />
=== SceSysconForDriver_4295D497 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4295D497<br />
|}<br />
<br />
Calls Syscon command 0x85. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_4295D497(void);</source><br />
<br />
=== sceSysconGetLogInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x701535FC<br />
|}<br />
<br />
Calls Syscon command 0x86.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconLogInfo { // size is 8 on FW 3.600.011<br />
uint8_t unk_0[8];<br />
} SceSysconLogInfo;<br />
<br />
int sceSysconGetLogInfoForDriver(SceSysconLogInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLogStartForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E55CF5E<br />
|}<br />
<br />
Calls Syscon command 0x87. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int sceSysconLogStartForDriver(void);</source><br />
<br />
=== sceSysconLogReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x487D97F3<br />
|}<br />
<br />
Calls Syscon command 0x88.<br />
<br />
<source lang="C">int sceSysconLogReadDataForDriver(SceUInt16 offset, void *pData, SceSize size);</source><br />
<br />
=== sceSysconLogStartWaitingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x9C0B1E61<br />
|}<br />
<br />
Calls Syscon command 0x89.<br />
<br />
<source lang="C">int sceSysconLogStartWaitingForDriver(void);</source><br />
<br />
=== sceSysconCtrlUSBSupplyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7BFA95DA<br />
|}<br />
<br />
This function is used instead of [[#sceSysconCtrlChargeVBUSForDriver]] on PS Vita Slim.<br />
<br />
Calls Syscon command 0x8C8. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
Used in factTest module.<br />
<br />
<source lang="C">int sceSysconCtrlUSBSupplyForDriver(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_451C1662 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x451C1662<br />
|}<br />
<br />
Calls Syscon command 0x8C9. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_451C1662(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_79074DE4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x79074DE4<br />
|}<br />
<br />
Calls Syscon command 0x8CA. Sends 0 byte to Syscon. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_79074DE4(SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_7D25F6D2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7D25F6D2<br />
|}<br />
<br />
Calls Syscon command 0x8CB. Sends 1 byte to Syscon: id. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_7D25F6D2(SceUInt8 id, SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_D2ADABCA ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xD2ADABCA<br />
|}<br />
<br />
Calls Syscon command 0x8CC. Sends 2 bytes from Syscon: id, data.<br />
<br />
<source lang="C">int SceSysconForDriver_D2ADABCA(SceUInt8 id, SceUInt8 data);</source><br />
<br />
=== sceSysconGetTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3B354824<br />
|}<br />
<br />
Calls Syscon command 0x8CE. Gets 0x10 bytes from Syscon.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconTemperatureLog { // size is 0x10 bytes<br />
char log[16];<br />
} SceSysconTemperatureLog;<br />
<br />
int sceSysconGetTemperatureLogForDriver(SceSysconTemperatureLog *pLog);<br />
</source><br />
<br />
=== sceSysconClearTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3843D657<br />
|}<br />
<br />
Calls Syscon command 0x8CF. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int sceSysconClearTemperatureLogForDriver(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_F87679EE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 3.600.011-3.740.011 || 0xF87679EE<br />
|}<br />
<br />
Calls Syscon command 0x8D0. Sends 2 bytes to Syscon.<br />
<br />
Probably related to Syscon Temperature Log.<br />
<br />
<source lang="C">int SceSysconForDriver_F87679EE(SceUInt32 unk);</source><br />
<br />
=== sceSysconGetUsbDetStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xEF810687<br />
|}<br />
<br />
Calls Syscon command 0x805.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int sceSysconGetUsbDetStatusForDriver(SceUInt32 *pStatus);</source><br />
<br />
=== SceSysconForDriver_E7F5D3DC ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7F5D3DC<br />
|}<br />
<br />
Calls Syscon command 0x806.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
On PS TV returns data 0x00000000<br />
<br />
<source lang="C">int SceSysconForDriver_E7F5D3DC(SceUInt32 *pResult);</source><br />
<br />
=== SceSysconForDriver_253CC522 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x253CC522<br />
|}<br />
<br />
Calls Syscon command 0x807. Gets 2 bytes from Syscon.<br />
<br />
On DevKit, it returns 0x8025023F. Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
On PS TV returns data 0xca1a<br />
<br />
<source lang="C">int SceSysconForDriver_253CC522(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconCtrlDolceLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x727F985A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
#define STATE_ON 0<br />
#define STATE_BLINK_SLOW 1<br />
#define STATE_BLINK_FAST 2<br />
<br />
int sceSysconCtrlDolceLEDForDriver(SceUInt32 state);<br />
</source><br />
<br />
=== sceSysconGetTimeStampForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4D588A0A<br />
|}<br />
<br />
This is a guessed named, derived from PSP. Temp name was sceSysconGetBaryonTimestampForDriver.<br />
<br />
Returns the timestamp of latest installed Syscon firmware patch, formatted as <code>YYYYMMDDhhmm</code>. This comes from a string stored in Syscon firmware under another format: <code>$Date:: YYYY-MM-DD hh:mm:ss +0900#$</code><br />
<br />
Example: <code>$Date:: 2013-12-13 15:52:05 +0900#$</code> in Syscon firmware becomes <code>201312131552</code> in Syscon command 2.<br />
<br />
<source lang="c"><br />
// pTimestamp will point to a buffer of size 0x10 bytes, containing a string of size 13 (12: length + 1: terminal character)<br />
int sceSysconGetTimeStampForDriver(char *pTimestamp);<br />
</source><br />
<br />
=== sceSysconGetWakeupFactorForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCF5B2F2F<br />
|}<br />
<br />
Result is 2 bytes wakeup factor coming from Syscon command 0x10.<br />
<br />
Used in [[SceWlanBt]].<br />
<br />
<source lang="C">int sceSysconGetWakeupFactorForDriver(SceUInt32 *pWakeupFactor);</source><br />
<br />
=== sceSysconCtrlHdmiCecPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x62155962<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
Sets the pin CDC Hot Plug Detect (HPD) state of the HDMI bridge (AD80244 / ADV7533).<br />
<br />
<source lang="c">int sceSysconCtrlHdmiCecPowerForDriver(SceBool enable_HDMI_CDC_HPD_pin);</source><br />
<br />
=== sceSysconCtrlMotionSensorPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x063425AE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
<source lang="C">int sceSysconCtrlMotionSensorPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3FDD29D6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3FDD29D6<br />
|}<br />
<br />
Calls Syscon command 0x884. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_3FDD29D6(int value, SceBool use_flag);</source><br />
<br />
=== SceSysconForDriver_79E6DD8B ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x79E6DD8B<br />
|}<br />
<br />
Calls Syscon command 0x885. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_79E6DD8B(int value, SceBool use_flag);</source><br />
<br />
=== sceSysconCtrlVoltageForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.920.050-3.740.011 || 0x7F198FA2<br />
|}<br />
<br />
Temp name was sceSysconSetVoltageForDriver.<br />
<br />
Calls Syscon command 0x88E.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
/*<br />
type:<br />
0: Reserved<br />
1: DD1 (VDD - IFTU, DMAC, Internal bus, SPM 32KiB/128KiB) SetSysClockFrequency, SetDmac5ClockFrequency, SetBusClockFrequency, SetCameraBusClockFrequency<br />
2: DD2 (VDDA - ARM core, L2 cache) SetArmClockFrequency<br />
3: DD3 (VDDC - Codec Engine, AVC Decoder) SetVipClockFrequency, SetVeneziaClockFrequency<br />
4: DD4 (VDDG - GPU core) SetGpuClockFrequencyInternal, SetGpuXbarClockFrequency, SetCompatClockFrequency<br />
<br />
vid:<br />
0x22 (0.34V)<br />
0x8A (1.38V) - (something got from ScePervasiveForDriver)<br />
*/<br />
<br />
#define SCE_SYSCON_VOLTAGE_DD1 (1)<br />
#define SCE_SYSCON_VOLTAGE_DD2 (2)<br />
#define SCE_SYSCON_VOLTAGE_DD3 (3)<br />
#define SCE_SYSCON_VOLTAGE_DD4 (4)<br />
<br />
int sceSysconCtrlVoltageForDriver(SceUInt32 type, SceUInt32 vid);<br />
</source><br />
<br />
=== sceSysconSetPowerModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8A95D35C<br />
|}<br />
<br />
Temp name was sceSysconResetDeviceForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A.<br />
<br />
The <code>mode</code> argument is usually set to <code>0x2</code> or sometimes <code>0x8002</code> (which seems to correspond to some request by the UDC and BT drivers).<br />
<br />
The <code>type</code> argument determines what to do.<br />
<br />
Real definition names are like: "SCE_SYSCON_POWERMODE_MODE_STANDBY".<br />
<br />
{| class="wikitable"<br />
! Type !! Description !! Syscon command arguments <code>{cmd_no_low, cmd_no_hi, args_size, args}</code><br />
|-<br />
| 0 || Power off || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 1 || Suspend (low-power state) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 2 || Reset (cold reset) || <code>{0x01, 8, 1, 0}</code><br />
|-<br />
| 3 || Reset to external boot mode || <code>{0xC1, 0, 2, 0}</code><br />
|-<br />
| 4 || ?Reset to update mode? || <code>{0xC1, 0, 2, 1}</code><br />
|-<br />
| 5 || Hibernate || <code>{0xC2, 0, 2, 0x5A}</code><br />
|-<br />
| 16 || ?Resume? || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 17 || Resume (soft reset: suspend and immediately resume) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|}<br />
<br />
<source lang="c">int sceSysconSetPowerModeForDriver(int type, int mode);</source><br />
<br />
=== sceSysconEnableHibernateIOForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4946538A<br />
|}<br />
<br />
<source lang="C">int sceSysconEnableHibernateIOForDriver(int maybe_enable);</source><br />
<br />
=== sceSysconWaitReadyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x55DF1C9B<br />
|}<br />
<br />
Temp name was sceSysconWaitInitializedForDriver.<br />
<br />
<source lang="c">int sceSysconWaitReadyForDriver(void);</source><br />
<br />
=== sceSysconCmdSyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x6E517D22<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdSyncForDriver(SceSysconPacket *packet, int noWait);</source><br />
<br />
=== sceSysconCmdExecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9ADDCA4A<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdExecForDriver(SceSysconPacket *packet, unsigned int flags);</source><br />
<br />
=== sceSysconCmdExecAsyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2224E82<br />
|}<br />
<source lang="c">int sceSysconCmdExecAsyncForDriver(SceSysconPacket *packet, u32 flags, int (*callback)(SceSysconPacket *, void *), void *argp);</source><br />
<br />
=== sceSysconCtrlSdPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xBE1ADE4F<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x888.<br />
<br />
Enables/disables GameCard reader.<br />
<br />
Used in [[SceSdstor]].<br />
<br />
<source lang="c"><br />
// param: 1 = enable SD (GameCard reader) power, 0 = disable SD (GameCard reader) power<br />
int sceSysconCtrlSdPowerForDriver(SceUInt16 param);<br />
</source><br />
<br />
=== sceSysconCtrlWirelessPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0x4FBDA504<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x88A.<br />
<br />
Replaced by function [[#sceSysconCtrlWirelessPower2ForDriver]].<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconCtrlWirelessPower2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA2E85DB9<br />
|}<br />
<br />
Replacement function for [[#sceSysconCtrlWirelessPowerForDriver]]. Calls Syscon command 0x88A.<br />
<br />
Used in [[SceWlanBt]]:<br />
<source lang="C"><br />
scePowerSetWakeupConditionForDriver(4, 0);<br />
uVar2 = 0;<br />
sceSysconCtrlDeviceResetForDriver(0x10, 0);<br />
sceSysconCtrlWirelessPower2ForDriver(0);<br />
sceClockgenWlanBtClkDisableForDriver();<br />
</source><br />
<br />
<source lang="C">int sceSysconCtrlWirelessPower2ForDriver(SceUInt16 enable);</source><br />
<br />
=== sceSysconCtrlWirelessPowerDownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0xDF8C6D2D<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If motherboard is not "hardware info third byte 0x10" (probably IRS-001), it does nothing and returns 0, probably because missing hardware. Calls Syscon command 0xB1. Wireless power down might be a button to enable/disable Wireless, like on PSP.<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerDownForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconGetConfigStorageInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.995.000-3.740.011 || 0xCE48E8EB<br />
|}<br />
<br />
Get Syscon Config Storage Info using Syscon command 0x1300.<br />
<br />
Config Storage Info is part of the [[Syscon]] "ConfZZ" header.<br />
<br />
<source lang="C"><br />
typedef struct SceKernelConfigStorageInfo { // size is 8 bytes<br />
SceUInt16 version;<br />
SceUInt16 unk_2;<br />
SceUInt32 unk_4;<br />
} SceKernelConfigStorageInfo;<br />
<br />
int sceSysconGetConfigStorageInfoForDriver(SceKernelConfigStorageInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLoadConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x89C5CFD6<br />
|}<br />
<br />
Calls Syscon command 0x1385.<br />
<br />
The OS uses this function to change between modes: IDU mode, Show Mode, no mode. This works by spoofing or rewriting [[KBL Param#Hardware Info|Hardware Info]]. This is reboot persistent.<br />
<br />
<source lang="C">int sceSysconLoadConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== sceSysconVerifyConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xCC6F90A8<br />
|}<br />
<br />
Calls Syscon command 0x1386.<br />
<br />
This function is not used in the OS and anyway it would always return error because it calls a command that is not implemented in Syscon FW.<br />
<br />
<source lang="C">int sceSysconVerifyConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== SceSysconForDriver_FD65FFCB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xFD65FFCB<br />
|}<br />
<br />
Calls Syscon command 0x1392.<br />
<br />
<source lang="C">int SceSysconForDriver_FD65FFCB(SceUInt8 offset, SceUInt16 a2);</source><br />
<br />
=== sceSysconBeginConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xA4968B8C<br />
|}<br />
<br />
<source lang="C">int sceSysconBeginConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconCommitConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x7B9B3617<br />
|}<br />
<br />
<source lang="C">int sceSysconCommitConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconEndConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xFCC3E8EE<br />
|}<br />
<br />
<source lang="C">int sceSysconEndConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconSetDebugHandlersForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF245CD6F<br />
|}<br />
<br />
<source lang="c"><br />
/** A set of debug handlers for syscon, that you can set in sceSysconSetDebugHandlersForDriver(). */<br />
typedef struct SceSysconDebugHandlers {<br />
/** Structure size (probably, unused). */<br />
s32 size;<br />
/** Callback ran right before running a packet, with a pointer to it passed as the first argument. */<br />
void (*start)(SceSysconPacket *packet);<br />
/** Callback ran right after finishing running a packet, with a pointer to it passed as the first argument. */<br />
void (*end)(SceSysconPacket *packet);<br />
} SceSysconDebugHandlers;<br />
<br />
int sceSysconSetDebugHandlersForDriver(SceSysconDebugHandlers *debug_handlers);<br />
</source><br />
<br />
=== sceSysconGetBatteryCalibDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x9ADC9936<br />
|}<br />
<br />
<source lang="C">int sceSysconGetBatteryCalibDataForDriver(int *piData1, int *piData2, int *piData3, int *piData4);</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF492E69E<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelTouchpanelDeviceInfo { // size is 8 bytes<br />
uint16_t FrontVendorID;<br />
uint16_t FrontFirmwareRev;<br />
uint16_t RearVendorID;<br />
uint16_t RearFirmwareRev;<br />
} SceKernelTouchpanelDeviceInfo;<br />
<br />
int sceSysconGetTouchpanelDeviceInfoForDriver(SceKernelTouchpanelDeviceInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.690.011-3.740.011 || 0x030D447F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns extended touchpanel info.<br />
<br />
<source lang="C"><br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelInfo { // size is 0xA bytes<br />
SceUInt16 vendorID;<br />
SceUInt16 firmwareRev;<br />
SceUInt16 configRev;<br />
SceUInt8 hwVersion;<br />
SceUInt8 vendorInfo;<br />
SceUInt16 reserved;<br />
} SceKernelTouchpanelInfo;<br />
<br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelDeviceInfo2 { // size is 0x14 bytes<br />
SceKernelTouchpanelInfo front;<br />
SceKernelTouchpanelInfo rear;<br />
} SceKernelTouchpanelDeviceInfo2;<br />
<br />
int sceSysconGetTouchpanelDeviceInfo2ForDriver(SceKernelTouchpanelDeviceInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconMotionGetMeasureDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x270B7B0B<br />
|}<br />
<br />
Calls Syscon command 0x400.<br />
<br />
=== sceSysconMotionGetDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD01E64FC<br />
|}<br />
<br />
Returns motion sensor device info.<br />
<br />
Calls Syscon command 0x480.<br />
<br />
See [[SceMotionDev#sceMotionDevGetDeviceInfoForDriver]] for the SceKernelMotionDeviceInfo structure.<br />
<br />
<source lang="C">int sceSysconMotionGetDeviceInfoForDriver(SceKernelMotionDeviceInfo *pInfo);</source><br />
<br />
=== SceSysconForDriver_9A7858B6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9A7858B6<br />
|}<br />
<br />
Calls Syscon command 0x481. Sends 3 bytes to Syscon.<br />
<br />
Probably used to send information to the motion sensor device.<br />
<br />
<source lang="C">int SceSysconForDriver_9A7858B6(SceBool a1, SceUint16 a2);</source><br />
<br />
=== sceSysconGetHardwareInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCBD6D8BC<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info|Hardware Info]] obtained from Syscon command 0x5.<br />
<br />
<source lang="C">int sceSysconGetHardwareInfoForDriver(void);</source><br />
<br />
=== sceSysconGetHardwareInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x965C68C3<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info 2|Hardware Info 2]] obtained from Syscon command 0x6.<br />
<br />
This function was certainly added for PS Vita Slim or PS TV support because [[KBL Param#Hardware Info|Hardware Info]] risked being fulfilled if too many hardware revisions were made.<br />
<br />
Used in [[SceAudio#SceAudioIn|SceAudioIn]] (maybe to check Conexant IC), [[SceCodec]] (maybe to check Conexant IC), and [[SceVshBridge#vshSysconGetHardwareInfo2|_vshSysconGetHardwareInfo2]].<br />
<br />
<source lang="C"><br />
typedef struct SceKernelHardwareInfo2 {<br />
SceUInt8 flags[0x10];<br />
} SceKernelHardwareInfo2;<br />
<br />
int sceSysconGetHardwareInfo2ForDriver(SceKernelHardwareInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconGetErnieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xFF86F4C5<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconGetBaryonVersionForDriver.<br />
<br />
<source lang="c">int sceSysconGetErnieVersionForDriver(void);</source><br />
<br />
=== SceSysconForDriver_EBE3262C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBE3262C<br />
|}<br />
<br />
In [[SceSblPostSsMgr]], used just after [[#sceSysconGetErnieVersionForDriver]].<br />
<br />
Returns 8 bits of some Syscon Mode information. Bit 6 (from right) is Syscon DownLoader Mode flag. Bit 3 (from right) is Power Online flag.<br />
<br />
<source lang="C">SceUInt8 SceSysconForDriver_EBE3262C(void);</source><br />
<br />
=== sceSysconIsDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x9ADD60D2<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconIsDealDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB7BCC638<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDealDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconNopForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0D0B6D25<br />
|}<br />
<br />
<source lang="C">int sceSysconNopForDriver(void);</source><br />
<br />
=== sceSysconIsPowerOnlineForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9DA2A5AB<br />
|}<br />
<br />
Returns true iff Syscon information bit 3 (from right) is set. See also [[#SceSysconForDriver_EBE3262C]].<br />
<br />
Used in many [[ScePower]] functions for example before setting display brightness (to save battery).<br />
<br />
<source lang="C">SceBool sceSysconIsPowerOnlineForDriver(void);</source><br />
<br />
=== sceSysconGetErnieDLVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD2F456DC<br />
|}<br />
<br />
Calls Syscon command 0x1100.<br />
<br />
<source lang="C">void sceSysconGetErnieDLVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetBatteryVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x68E0031E<br />
|}<br />
<br />
Battery IC codename: if HWinfo > 7 "Abby" else unknown codename, maybe just "Bic".<br />
<br />
<source lang="C">int sceSysconGetBatteryVersionForDriver(SceUInt16 *HWinfo, SceUInt16 *FWinfo, SceUInt16 *DFinfo);</source><br />
<br />
=== sceSysconReadCookieStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.740.011 || 0xDFB024C4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceSysconAbbySyncForDriver.<br />
<br />
<source lang="C">int sceSysconReadCookieStatusForDriver(SceUInt32 *puiStatus);</source><br />
<br />
=== sceSysconGetManufacturesStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3E09A1F4<br />
|}<br />
<br />
In theory, this function should only be called when Product Mode is already set.<br />
<br />
<source lang="C">int sceSysconGetManufacturesStatusForDriver(int *piStatus);</source><br />
<br />
=== sceSysconReadScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x299B1CE7<br />
|}<br />
<br />
Temp name was sceSysconReadCommandForDriver, sceSysconVsReadDataForDriver.<br />
<br />
Calls Syscon command 0x90.<br />
<br />
Used in [[SceRtc]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconReadScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconWriteScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE26488B9<br />
|}<br />
<br />
Temp name was sceSysconSendCommandForDriver, sceSysconVsWriteDataForDriver.<br />
<br />
Calls Syscon command 0x91.<br />
<br />
Used in [[SceRtc]] and [[ScePower]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconWriteScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconNvsSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x81A6060D<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]].<br />
<br />
<source lang="C"><br />
// mode: 0 before NVS read/write<br />
int sceSysconNvsSetRunModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsSetUnkModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2EC6D55D<br />
|}<br />
<br />
<source lang="C"><br />
// mode: unk<br />
int sceSysconNvsSetUnkModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACAFA2B8<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblSsGetNvsDataForDriver|sceSblSsGetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsReadDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconNvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x10C9657A<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]] and [[SceSblSsMgr#sceSblSsSetNvsDataForDriver|sceSblSsSetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsWriteDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconGetMultiCnInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x1503D6A0<br />
|}<br />
<br />
Returns data obtained by Syscon command 0x103.<br />
<br />
Returns 0x4ff00 when nothing is connected.<br />
<br />
Returns 0x40080 when pin 11 is pulled to GND.<br />
<br />
Returns 0x40680 when pin 12 is pulled to GND.<br />
<br />
Returns 0x40380 when pin 12 is pulled to GND while pin 11 pulled to ground via 100K resistor.<br />
<br />
Returns 0x40000 on PSTV<br />
<br />
Bits 8 and 9 indicate that an audio-out dock is connected.<br />
<br />
Bits 8, 9, 11, 12, 13, 14 and 15 indicate that [[UDC]] pins are connected.<br />
<br />
Used in [[SceHpremote]], [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconGetMultiCnInfoForDriver(SceUInt32 *pInfo);</source><br />
<br />
=== sceSysconSetMultiCnPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8AAB6308<br />
|}<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C"><br />
// port: 0: for Jig mode, 1 for UART0 logging mode, 0x10000: for normal mode<br />
int sceSysconSetMultiCnPortForDriver(int port);<br />
</source><br />
<br />
=== sceSysconCtrlLedPwmBlinkForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x6F586D1A<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
// unk: SceLedConfig.unk_4<br />
<br />
int sceSysconCtrlLedPwmBlinkForDriver(int device, SceUInt32 unk);<br />
</source><br />
<br />
=== sceSysconSetChargeLedCtrlForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x9CA6EB70<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
On motherboards IRT-001 and older, it does nothing and returns 0, probably because missing hardware that could be a LED, else it sends 2 bytes using Syscon command 0x89E.<br />
<br />
Used in [[ScePower#ScePowerForDriver_38415146]]. Related to LED.<br />
<br />
<source lang="C">int sceSysconSetChargeLedCtrlForDriver(SceBool state);</source><br />
<br />
=== sceSysconCtrlAccPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8D1D97E8<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlAccPowerForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlUsbStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x59DC5938<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x89A.<br />
<br />
Related to [[SceUdcd]] and [[ScePower]].<br />
<br />
<source lang="C">int sceSysconCtrlUsbStatusForDriver(SceUInt32 value);</source><br />
<br />
=== sceSysconCtrlRMRPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x710A7CF0<br />
|}<br />
<br />
Temp name was sceSysconCtrlMsPowerForDriver.<br />
<br />
<source lang="c">int sceSysconCtrlRMRPowerForDriver(int enable_power);</source><br />
<br />
=== sceSysconCtrlMultiCnPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xB1F88B11<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlMultiCnPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3274A925 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3274A925<br />
|}<br />
<br />
Temp name was sceSysconCtrlDolceUsbPowerForDriver.<br />
<br />
This function enables/disables a USB bus related to either PS Vita IRS-1001 Wlan/Bt module USB or PS Vita 3G modem USB. This also affects PS TV USB host and maybe also PS TV ethernet.<br />
<br />
Used in [[SceUsbEtherSmsc]], [[SceUsbServ]].<br />
<br />
This function was maybe added to support IRS-1001 motherboard.<br />
<br />
<source lang="C">int SceSysconForDriver_3274A925(SceBool enable);</source><br />
<br />
=== sceSysconJigOpenPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x44A173F5<br />
|}<br />
<br />
<source lang="C">int sceSysconJigOpenPortForDriver(void);</source><br />
<br />
=== sceSysconJigClosePortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x483FAE05<br />
|}<br />
<br />
<source lang="C">int sceSysconJigClosePortForDriver(void);</source><br />
<br />
=== sceSysconJigSetConfigForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD24BF916<br />
|}<br />
<br />
<source lang="C">int sceSysconJigSetConfigForDriver(SceUInt8 a1, SceUInt8 a2);</source><br />
<br />
=== sceSysconOutputClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x058941D7<br />
|}<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB0.<br />
<br />
=== sceSysconCtrlHostOutputViaDongleForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xDECCB2B4<br />
|}<br />
<br />
Enables / disables Kermit UART0 output (logs) via Dongle (Jig).<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB2.<br />
<br />
<source lang="C">int sceSysconCtrlHostOutputViaDongleForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_33B5CDB3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x33B5CDB3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB3.<br />
<br />
This function was probably added to support IRS-002 motherboard.<br />
<br />
=== SceSysconForDriver_F6D4DDC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xF6D4DDC4<br />
|}<br />
<br />
Guessed name is sceSysconGetWlanGpioStateForDriver<br />
<br />
Reads from Syscon using Syscon command 0xB4. It is probably the "get" equivalent of [[#SceSysconForDriver_00AE3AEB]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_00AE3AEB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x00AE3AEB<br />
|}<br />
<br />
Guessed name is sceSysconSetWlanGpioStateForDriver<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB5. It is probably the "set" equivalent of [[#SceSysconForDriver_F6D4DDC4]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_0D300158 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x0D300158<br />
|}<br />
<br />
It is probably a "sceSysconCtrl...ForDriver" function.<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB6. It is probably the "set" equivalent of [[#SceSysconForDriver_91EF4EC3]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== SceSysconForDriver_91EF4EC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x91EF4EC3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB7. It is probably the "get" equivalent of [[#SceSysconForDriver_0D300158]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== receive_pm_sm_jig_msg_from_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3C80B529<br />
|}<br />
<br />
Calls Syscon command 0x2083.<br />
<br />
<source lang="C">int receive_pm_sm_jig_msg_from_syscon(SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_short_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xCE346793<br />
|}<br />
<br />
Calls Syscon command 0x2084.<br />
<br />
Sends a message of maximum 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_short_msg_to_syscon(SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x7BFBA09E<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Sends a message by chunks of 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_msg_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_stop_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x933D813F<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Used just after send_pm_sm_jig_msg_to_syscon or when it fails before.<br />
<br />
<source lang="C">int send_pm_sm_stop_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size);</source><br />
<br />
=== sceSysconIduModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x956D07CB<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeSetForDriver(void);</source><br />
<br />
=== sceSysconIduModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x34574496<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeClearForDriver(void);</source><br />
<br />
=== sceSysconShowModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x6D65B70F<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeSetForDriver(void);</source><br />
<br />
=== sceSysconShowModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x8D7724C0<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeClearForDriver(void);</source><br />
<br />
=== sceSysconSetWlanCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || 0x4DEB8712<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a Wlan-related callback.<br />
<br />
index 5 on FWs 0.931.010-0.940.<br />
<br />
=== SceSysconForDriver_18A6F4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x18A6F4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_C0F215B7]].<br />
<br />
<source lang="C">int SceSysconForDriver_18A6F4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_DE613081 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xDE613081<br />
|}<br />
<br />
A guessed name is sceSysconSetHeadphoneCallbackForDriver.<br />
<br />
Registers an headphone remote related callback.<br />
<br />
index 1 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
Related to [[#SceSysconForDriver_C3504ADE]].<br />
<br />
<source lang="C">int SceSysconForDriver_DE613081(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_229A07C2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x229A07C2<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 2 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_B832B72C]].<br />
<br />
<source lang="C">int SceSysconForDriver_229A07C2(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_8351526D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x8351526D<br />
|}<br />
<br />
A guessed name is sceSysconSetAlarmTimerCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 3 on FW 3.600.011.<br />
<br />
Used in [[SceRtc]].<br />
<br />
Related to [[#SceSysconForDriver_86BAAF7D]].<br />
<br />
<source lang="C">int SceSysconForDriver_8351526D(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_9F8340FF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9F8340FF<br />
|}<br />
<br />
A guessed name is sceSysconSetResumeRequestCallbackForDriver.<br />
<br />
Registers the "is resume requested" callback.<br />
<br />
Used in [[ScePower]] to register a callback that sets the [[ScePower]] global variable g_resume_requested to SCE_TRUE.<br />
<br />
index 4 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_A57B5433]].<br />
<br />
<source lang="C">int SceSysconForDriver_9F8340FF(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_35E1689F ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x35E1689F<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
index 5 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACC7F71E]].<br />
<br />
<source lang="C">int SceSysconForDriver_35E1689F(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_474A9EA7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x474A9EA7<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xC on FWs 0.931.010-0.940. index 6 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_769F9AC4]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_474A9EA7(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_4E88B4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E88B4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 8 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4BC63A40]].<br />
<br />
Used in [[SceBbmc]]<br />
<br />
<source lang="C">int SceSysconForDriver_4E88B4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_376CCCB8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x376CCCB8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 9 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_99A254A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_376CCCB8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_3BAAC8A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x3BAAC8A9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xA on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9A4F4B7C]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_3BAAC8A9(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAccCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x4A42712F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for accessory port.<br />
<br />
index 0xF on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetAccCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3F0DB7C0<br />
|}<br />
<br />
Registers the low-battery callback.<br />
<br />
index 6 on FWs 0.931-0.940. index 0x10 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_80D6E061 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x80D6E061<br />
|}<br />
<br />
A guessed name is sceSysconSetBatteryOnlineCallbackForDriver.<br />
<br />
Registers a callback. Maybe related to Battery online status.<br />
<br />
index 0x11 on FW 3.600.011.<br />
<br />
<source lang="C">int SceSysconForDriver_80D6E061(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_7682FE69 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x7682FE69<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x12 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4A184B7C]].<br />
<br />
<source lang="C">int SceSysconForDriver_7682FE69(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_E0D52DF0 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE0D52DF0<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x13 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACEE1C70]].<br />
<br />
<source lang="C">int SceSysconForDriver_E0D52DF0(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2D471528 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x2D471528<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a callback very similar to the low battery callback.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x14 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_03C50DC3]].<br />
<br />
<source lang="C">int SceSysconForDriver_2D471528(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_129EA022 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x129EA022<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x15 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_BFDA5590]].<br />
<br />
<source lang="C">int SceSysconForDriver_129EA022(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_85E5DEBF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x85E5DEBF<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
index 0x16 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_63B14156]].<br />
<br />
Used by [[SceBbmc]]<br />
<br />
<source lang="C">int SceSysconForDriver_85E5DEBF(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetThermalAlertCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x773B8126<br />
|}<br />
<br />
Registers the thermal alert callback.<br />
<br />
index 0x17 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_50CAE242]].<br />
<br />
<source lang="C">int sceSysconSetThermalAlertCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2E4BA4B8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2E4BA4B8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x19 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_29CF4335]].<br />
<br />
No use case seen. Maybe used in internal modules for Jig.<br />
<br />
<source lang="C">int SceSysconForDriver_2E4BA4B8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_C442D0BE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xC442D0BE<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1A on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9F4042F8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_C442D0BE(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_61AE3970 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0x61AE3970<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1B on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_C50568E9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_61AE3970(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x94678881<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-reboot callback.<br />
<br />
index 0x1C on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x7AA00C01<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-download callback.<br />
<br />
index 0x1D on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetStandbyButtonCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x423D0C58<br />
|}<br />
<br />
Registers a callback.<br />
<br />
index 0x20 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetStandbyButtonCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_154676F1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x154676F1<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x21 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_154676F1(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_63352A39 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x63352A39<br />
|}<br />
<br />
A guessed name is sceSysconSetMicrophoneCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x22 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_63352A39(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_14730196 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x14730196<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x23 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_14730196(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAlarmCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32418370<br />
|}<br />
<br />
Registers the alarm callback.<br />
<br />
index 0 on FWs 0.931.010-0.940. index 0x24 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetAlarmCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMultiCnOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA26586B2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for multi-connector OTG on PS Vita Fat.<br />
<br />
index 0x25 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMultiCnOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMiniUsbOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x67A4CB9F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for mini-USB OTG on PS Vita Slim.<br />
<br />
index 0x26 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMiniUsbOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconUpdaterSetSegmentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B00BC7F<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// segment_no: a 8bit value<br />
int sceSysconUpdaterSetSegmentForDriver(SceUInt32 segment_no);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x356B9696<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegmentForDriver.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramDataForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramData2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x734544E4<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegment2ForDriver.<br />
<br />
Same functionality as [[#sceSysconUpdaterLoadSegmentForDriver]] except that the segment is copied to an intermediate 0x7A-byte zeroed buffer. This implementation seems bad as the Syscon packet first 6 bytes are written twice.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramData2ForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCalcChecksumForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD27C3D80<br />
|}<br />
<br />
Computes checksum to use with [[#sceSysconUpdaterExecProgrammingForDriver]]. It does not call any Syscon command.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterCalcChecksumForDriver(void *data, SceSize size, int *puiChecksum);</source><br />
<br />
=== sceSysconUpdaterExecProgrammingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x69AD76E4<br />
|}<br />
<br />
Executes programming, i.e writes segments to Syscon Flash memory.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// checksum: value got from sceSysconUpdaterCalcChecksumForDriver<br />
int sceSysconUpdaterExecProgrammingForDriver(int checksum);<br />
</source><br />
<br />
=== sceSysconUpdaterSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB487C2FB<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterSetRunModeForDriver(int mode);</source><br />
<br />
=== sceSysconUpdaterExecFinalizeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC7747A63<br />
|}<br />
<br />
Finalize Syscon update by sending checksum from ARM to Syscon.<br />
<br />
Calls Syscon command 0x1184.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// digest: sha1 of decrypted concatenated segments, comes from Syscon Update package packet type 0x20<br />
// size: usually 0x14 (sha1 size)<br />
int sceSysconUpdaterExecFinalizeForDriver(void *digest, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCheckSignatureForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCBA836FF<br />
|}<br />
<br />
Sends a 0x18-byte buffer to Syscon command 0x1185. This Syscon command 0x1185 seems to be unimplemented in recent Syscon firmwares: it does not do anything. It can be explained by the fact that the signature packet is not embedded in Syscon Update SPKGs.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// size: must be 0x18<br />
int sceSysconUpdaterCheckSignatureForDriver(void *pSig, SceSize size);<br />
</source><br />
<br />
=== SceSysconForDriver_4D03754A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x4D03754A<br />
|}<br />
<br />
Temp name was syscon_update_command_0xD00002.<br />
<br />
Calls Syscon command 0xD0.<br />
<br />
Used in [[SceSblUpdateMgr]] with [[update_service_sm]] function [[Secure_Modules_Functions#0xD0002|0xD0002]].<br />
<br />
<source lang="C"><br />
// in_buf: buffer that embeds input data, usually 0xD0002 command request + 8<br />
// in_size: usually 0x28<br />
// out_buf: buffer to receive result, usually 0xD0002 command request + 0x30<br />
// out_size: usually 0x28<br />
int SceSysconForDriver_4D03754A(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== SceSysconForDriver_C14BD637 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 1.000.041-3.740.011 || 0xC14BD637<br />
|}<br />
<br />
Calls Syscon command 0xD1.<br />
<br />
Seems unused.<br />
<br />
<source lang="C">int SceSysconForDriver_C14BD637(void);</source><br />
<br />
=== sceSysconSnvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBDF88B9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD2.<br />
<br />
Used in [[SceSblPostSsMgr]] to read data from SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] commands 0xB0002 and 0xC0002.<br />
<br />
<source lang="C"><br />
// in_size: 0x10<br />
// out_size: 0x30<br />
int sceSysconSnvsReadDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSnvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x63683B9B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD3.<br />
<br />
Used in [[SceSblPostSsMgr]] to write data to SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] functions [[Secure_Modules_Functions#0xB0002 - sceSblUsSmSnvsEncryptDecryptSector|0xB0002]] and [[Secure_Modules_Functions#0xC0002 - sceSblUsSmSnvsEncryptDecryptMgmtData|0xC0002]].<br />
<br />
<source lang="C"><br />
// in_size: 0x30<br />
// out_size: 0x10<br />
int sceSysconSnvsWriteDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSetAffirmativeRertyModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x901D6CD4<br />
|}<br />
<br />
This is an official name. Typo is the name is intentional.<br />
<br />
Sets AffirmativeRertyMode flag in kernel memory. During SceSyscon initialization, AffirmativeRertyMode is enabled by default.<br />
<br />
AffirmativeRertyMode flag is used by [[SceSyscon]] kernel module when executing Syscon commands.<br />
<br />
Used in [[SceCtrl]], [[ScePower]].<br />
<br />
<source lang="C">int sceSysconSetAffirmativeRertyModeForDriver(int enable);</source><br />
<br />
=== sceSysconGetControlsInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x145F59A4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[KBL Param#Boot Controls Info|Boot Controls Info]].<br />
<br />
Calls Syscon command 0x100.<br />
<br />
<source lang="C">int sceSysconGetControlsInfoForDriver(SceUInt32 *pCtrl);</source><br />
<br />
=== SceSysconForDriver_76272CB9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x76272CB9<br />
|}<br />
<br />
Calls Syscon command 0x120. Gets a 4-byte value.<br />
<br />
<source lang="C">int SceSysconForDriver_76272CB9(SceUInt32 *pRes);</source><br />
<br />
=== sceSysconGetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7BEFF8B<br />
|}<br />
<br />
Gets Syscon power-on time in ticks of 0.5 second. Each second the counter automatically increases by 2.<br />
<br />
Calls Syscon command 0x11.<br />
<br />
Used in [[SceRtc]] to calculate the current time and date.<br />
<br />
<source lang="C">int sceSysconGetClockForDriver(SceUInt32 *puiTime);</source><br />
<br />
=== SceSysconForDriver_3168F3AF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3168F3AF<br />
|}<br />
<br />
Calls Syscon command 0x12.<br />
<br />
Gets the tick of an alarm timer. The alarm tick must be set using Syscon command 0x82 via [[#SceSysconForDriver_51164951]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTick);<br />
<br />
// FW 3.600.011-3.740.011<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTickLow, SceUInt8 *pTickHi);<br />
</source><br />
<br />
=== SceSysconForDriver_BA09F171 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xBA09F171<br />
|}<br />
<br />
Calls Syscon command 0x13.<br />
<br />
It might be related to alarm/timer. Sends 0 byte to Syscon. Gets 2 bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_BA09F171(SceUInt8 *pResult, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_93075DD1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x93075DD1<br />
|}<br />
<br />
Calls Syscon command 0x14. Sends 0 byte to Syscon. Gets ?1-4? bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_93075DD1(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetPowerStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x175CE5A1<br />
|}<br />
<br />
Calls Syscon command 0x883. Gets 8 bytes from Syscon. Reads Elmo registers 0xA0 through 0xA3.<br />
<br />
<source lang="C"><br />
// pStatus: pointer to a buffer of at least 8 bytes<br />
int sceSysconGetPowerStatusForDriver(void *pStatus);<br />
</source><br />
<br />
=== sceSysconCtrlDeviceResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x40FF3898<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x88F.<br />
<br />
<source lang="C"><br />
// The following defines are guessed names<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_UNK_1 1<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_MOTION 2<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_TP_FRONT 4<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_TP_REAR 8<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_WLANBT 0x10<br />
#define SCE_SYSCON_CTRL_DEVICE_RESET_SMSC_ETH 0x20<br />
<br />
// mode: 0 or 1, probably for the reset type such as reset or shutdown<br />
int sceSysconCtrlDeviceResetForDriver(SceUInt8 device, SceBool mode);<br />
</source><br />
<br />
=== SceSysconForDriver_285594F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x285594F8<br />
|}<br />
<br />
Calls Syscon command 0x890.<br />
<br />
<source lang="C">int SceSysconForDriver_285594F8(SceUInt16 value);</source><br />
<br />
=== sceSysconCtrlLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x04EC7579<br />
|}<br />
<br />
<source lang="C"><br />
#define STATE_ON 1<br />
#define STATE_OFF 0<br />
<br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
int sceSysconCtrlLEDForDriver(SceUInt16 device, SceBool state);<br />
</source><br />
<br />
=== sceSysconCtrlChargeACForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x596B17B7<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x892. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconCtrlChargeACForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlChargeVBUSForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2A4B0437<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x893. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C"><br />
// a1: ex: 0, 1<br />
// a2: ex: 0, 1<br />
<br />
// FW 0.931.010<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1);<br />
<br />
// FW 3.600.011-3.740.011<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1, SceUInt32 a2);<br />
</source><br />
<br />
=== SceSysconForDriver_5CDDA14D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5CDDA14D<br />
|}<br />
<br />
A guessed name is sceSysconCtrlHpremoteForDriver.<br />
<br />
If Syscon version < 0x80001, it does nothing and returns 0, else it sends 2 bytes to Syscon command 0x899.<br />
<br />
Maybe enables/disables Jack power.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_5CDDA14D(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_A2FE9BF9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA2FE9BF9<br />
|}<br />
<br />
Calls Syscon command 0x800.<br />
<br />
Gets information related to battery charge status, or USB power connection. See also [[Ernie#CMD_0x0800]].<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int SceSysconForDriver_A2FE9BF9(void *pResult);</source><br />
<br />
=== sceSysconCtrlLedBlinkType2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCB41B531<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0x89F.<br />
<br />
<br />
=== sceSysconGetBatteryTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9070F139<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A0, else Syscon command 0x981.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryTempForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryRemainCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC562AF3A<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryRemainCapacityForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x802, else Syscon command 0x900.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainCapForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryVoltForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x03F11220<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x803, else Syscon command 0x901.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryVoltForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryLifePercentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xAD0A8275<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryLifePercentForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x00A65FC1<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A1, else Syscon command 0x982.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryElecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0826BA07<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A2, else Syscon command 0x983.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryElecForDriver(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconGetBatteryTTEForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB841C141<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryLifeTimeForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A3, else Syscon command 0x984.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryTTEForDriver(SceUInt16 *pTTE);</source><br />
<br />
=== sceSysconGetBatterySOHForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x91D3B7A3<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A4, else Syscon command 0x985.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatterySOHForDriver(void *pSOH);</source><br />
<br />
=== sceSysconReadBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2FB5565<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A8, else Syscon command 0x986.<br />
<br />
<source lang="C">int sceSysconReadBatteryRegForDriver(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== sceSysconWriteBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B779DB0<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A9, else Syscon command 0x987.<br />
<br />
<source lang="C">int sceSysconWriteBatteryRegForDriver(SceUInt16 offset, SceUInt16 value);</source><br />
<br />
=== SceSysconForDriver_A5AB19B1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA5AB19B1<br />
|}<br />
<br />
Read 2 bytes from some Battery device. Is is an alternative register-reading function that seems to be Syscon-side implemented only on internal System Software version 4.00 or DevKit ones.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8AA, else Syscon command 0x988.<br />
<br />
Offset must be between 0 and 0xFFFF else returns error 0x80250001.<br />
<br />
<source lang="C">int SceSysconForDriver_A5AB19B1(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== SceSysconForDriver_CFCEE733 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCFCEE733<br />
|}<br />
<br />
Sends 2 bytes from Syscon command 0x181.<br />
<br />
<source lang="C">int SceSysconForDriver_CFCEE733(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_FDB3AE9D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xFDB3AE9D<br />
|}<br />
<br />
Gets 0x10 bytes from Syscon command 0x183.<br />
<br />
<source lang="C">int SceSysconForDriver_FDB3AE9D(int *pResult);</source><br />
<br />
=== SceSysconForDriver_C3504ADE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC3504ADE<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_DE613081]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C3504ADE(void);</source><br />
<br />
=== SceSysconForDriver_B832B72C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB832B72C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_229A07C2]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B832B72C(void);</source><br />
<br />
=== SceSysconForDriver_86BAAF7D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x86BAAF7D<br />
|}<br />
<br />
A guessed name is sceSysconIsAlarmTimerExistForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_8351526D]].<br />
<br />
Used in [[SceRtc]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_86BAAF7D(void);</source><br />
<br />
=== SceSysconForDriver_A57B5433 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA57B5433<br />
|}<br />
<br />
A guessed name is sceSysconIsResumeRequestedForDriver.<br />
<br />
Related to [[#SceSysconForDriver_9F8340FF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_A57B5433(void);</source><br />
<br />
=== SceSysconForDriver_ACC7F71E ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACC7F71E<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_35E1689F]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACC7F71E(void);</source><br />
<br />
=== SceSysconForDriver_769F9AC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x769F9AC4<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_474A9EA7]].<br />
<br />
Returns always SCE_TRUE on PS TV. This function could be related to USB or ethernet availability.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_769F9AC4(void);</source><br />
<br />
=== SceSysconForDriver_4BC63A40 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4BC63A40<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_4E88B4D9]].<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4BC63A40(void);</source><br />
<br />
=== SceSysconForDriver_99A254A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x99A254A9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_376CCCB8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_99A254A9(void);</source><br />
<br />
=== SceSysconForDriver_9A4F4B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x9A4F4B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_3BAAC8A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9A4F4B7C(void);</source><br />
<br />
=== SceSysconForDriver_92D2C6A4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x92D2C6A4<br />
|}<br />
<br />
<source lang="C">int SceSysconForDriver_92D2C6A4(void);</source><br />
<br />
=== SceSysconForDriver_B9EA2FA8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xB9EA2FA8<br />
|}<br />
<br />
A guessed name is sceSysconIsAccExistForDriver.<br />
<br />
Only used in [[SceUsbServ]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B9EA2FA8(void);</source><br />
<br />
=== SceSysconForDriver_29CF4335 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x29CF4335<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2E4BA4B8]].<br />
<br />
It is related to Ernie DL Mode.<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_29CF4335(void);</source><br />
<br />
=== SceSysconForDriver_32B2DB3D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32B2DB3D<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_32B2DB3D(void);</source><br />
<br />
=== sceSysconIsHeadphoneExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x142D5E82<br />
|}<br />
<br />
Used in [[SceHpremote#sceHprmIsHeadphoneExistForDriver]].<br />
<br />
<source lang="c">SceBool sceSysconIsHeadphoneExistForDriver(void);</source><br />
<br />
=== sceSysconIsMotionDevExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x490C5548<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Used in [[SceMotionDev]].<br />
<br />
<source lang="c">SceBool sceSysconIsMotionDevExistForDriver(void);</source><br />
<br />
=== SceSysconForDriver_012B57B3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.940-3.740.011 || 0x012B57B3<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_012B57B3(void);</source><br />
<br />
=== SceSysconForDriver_27758A64 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x27758A64<br />
|}<br />
<br />
A guessed name is sceSysconIsBatteryOnlineForDriver, deriving from [[#sceSysconIsPowerOnlineForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]], [[ScePower#scePowerIsLowBatteryForDriver]], [[ScePower]]'s module_start.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_80D6E061]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_27758A64(void);</source><br />
<br />
=== SceSysconForDriver_4A184B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x4A184B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns some information about battery.<br />
<br />
Used in [[ScePower#ScePowerForDriver_627A89C6]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_7682FE69]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4A184B7C(void);</source><br />
<br />
=== SceSysconForDriver_ACEE1C70 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xACEE1C70<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns information about battery. Only used when battery is working.<br />
<br />
Used in [[ScePower#ScePowerForDriver_0D56C601]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_E0D52DF0]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACEE1C70(void);</source><br />
<br />
=== SceSysconForDriver_03C50DC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x03C50DC3<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2D471528]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_03C50DC3(void);</source><br />
<br />
=== SceSysconForDriver_BFDA5590 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xBFDA5590<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_129EA022]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_BFDA5590(void);</source><br />
<br />
=== SceSysconForDriver_63B14156 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x63B14156<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_85E5DEBF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_63B14156(void);</source><br />
<br />
=== SceSysconForDriver_50CAE242 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x50CAE242<br />
|}<br />
<br />
A guessed name is sceSysconIsThermalAlertForDriver.<br />
<br />
Returns the global variable related to [[#sceSysconSetThermalAlertCallbackForDriver]].<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_50CAE242(void);</source><br />
<br />
=== SceSysconForDriver_9F4042F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x9F4042F8<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_C442D0BE]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9F4042F8(void);</source><br />
<br />
=== SceSysconForDriver_C50568E9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xC50568E9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_61AE3970]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C50568E9(void);</source><br />
<br />
=== sceSysconIsLowBatteryForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7F5A797<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">SceBool sceSysconIsLowBatteryForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateRebootForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1A0C140F<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateRebootForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateDownloadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1E3130EE<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateDownloadForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryRemainLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x26F9D729<br />
|}<br />
<br />
Only used if Syscon version >= 0x1040105.<br />
<br />
This function was added along with [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainLevelForDriver(SceUInt8 *pResult1, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_C0F215B7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xC0F215B7<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_18A6F4D9]].<br />
<br />
The global variable is updated by [[#sceSysconCmdSyncForDriver]].<br />
<br />
It looks like it checks for WlanBt presence (used in [[SceWlanBt]], skipping sdio/etc initialization if SceSysconForDriver_C0F215B7 returns 0).<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C0F215B7(void);</source><br />
<br />
=== SceSysconForDriver_D6F6D472 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xD6F6D472<br />
|}<br />
<br />
Guessed name is sceSysconGetMicroUsbInfoForDriver.<br />
<br />
Gets electric information (maybe intensity) of the device connected to USB OTG on PS Vita Slim.<br />
<br />
Returns a global variable updated by [[#sceSysconCmdSyncForDriver]], obtained using Syscon command 0x130.<br />
<br />
<source lang="C">int SceSysconForDriver_D6F6D472(int *pInfo);</source><br />
<br />
=== SceSysconForDriver_F99BC858 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xF99BC858<br />
|}<br />
<br />
Detects microSD swap.<br />
<br />
Calls syscon command 0x131.<br />
<br />
This function was maybe added to support a prototype motherboard that has a microSD port.<br />
<br />
<source lang="C">int SceSysconForDriver_F99BC858(SceBool *isSwapped);</source><br />
<br />
=== SceSysconForDriver_E7893732 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7893732<br />
|}<br />
<br />
Guessed name is sceSysconSetMicroUsbPortForDriver.<br />
<br />
Calls Syscon command 0x1B0. Related to UART or Jig on PS Vita Slim or PS TV.<br />
<br />
<source lang="C"><br />
// value holds 3 useful bytes and 1 byte not sent to syscon<br />
int SceSysconForDriver_E7893732(int value);<br />
</source><br />
<br />
=== sceSysconGetElmoVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA039B563<br />
|}<br />
<br />
Temp name was sceSysconGetElmoFwVersionForDriver.<br />
<br />
Calls Syscon command 0x880. Read Elmo registers 0xD0 through 0xEF.<br />
<br />
On PS Vita 1000 series with IRS-001 motherboard, Elmo Fw Version is 0x192.<br />
<br />
<source lang="C">int sceSysconGetElmoVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetCookieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9BF78047<br />
|}<br />
<br />
Temp name was sceSysconGetCookieFwVersionForDriver.<br />
<br />
Calls Syscon command 0x881.<br />
<br />
<source lang="C">int sceSysconGetCookieVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconReadElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5BF765BB<br />
|}<br />
<br />
Calls Syscon command 0x895.<br />
<br />
=== sceSysconWriteElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCCC71C28<br />
|}<br />
<br />
Calls Syscon command 0x896.<br />
<br />
=== sceSysconReadCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x95975DD1<br />
|}<br />
<br />
Calls Syscon command 0x897.<br />
<br />
=== sceSysconWriteCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF39300D3<br />
|}<br />
<br />
Calls Syscon command 0x898.<br />
<br />
Returns error 0x80250001 if offset is greater than 0xFF.<br />
<br />
<source lang="C"><br />
// offset: 0-0xFF<br />
int sceSysconWriteCookieRegForDriver(SceUInt32 offset, SceUInt16 data);<br />
</source><br />
<br />
== Commands ==<br />
<br />
It seems like the command format is as follows: <code>(direction << 8) | cmd_id</code>, where <code>direction = 1</code> means write to syscon, and <code>direction = 0</code> means read from syscon.<br />
<br />
{| class="wikitable"<br />
! Command<br />
! Return size (without considering the 2 bytes rx.size and rx.error_code)<br />
! Functions NIDs<br />
! Description<br />
|-<br />
| 0x0<br />
| 0x0<br />
| 0x0D0B6D25<br />
| sceSysconNopForDriver<br />
|-<br />
| 0x1<br />
| 0x4<br />
| module_start<br />
| sceSysconGetErnieVersionForDriver. Used during SysconInit.<br />
|-<br />
| 0x2<br />
| 0xC<br />
| module_start<br />
| sceSysconGetTimeStampForDriver. Returns 12-byte string followed by at least 2-byte memory leak. Used during SysconInit.<br />
|-<br />
| 0x3<br />
| 0x4<br />
| module_start<br />
| sceSysconGetSleepFactor. Used during SysconInit.<br />
|-<br />
| 0x4<br />
| 0x4<br />
| <br />
| Unknown. Run during boot. See [[Ernie#CMD_0x0004]].<br />
|-<br />
| 0x5<br />
| 0x4<br />
| 0xCBD6D8BC, module_start<br />
| sceSysconGetHardwareInfoForDriver<br />
|-<br />
| 0x6<br />
| 0x10<br />
| 0x965C68C3, module_start<br />
| sceSysconGetHardwareInfo2ForDriver. Get Hardware Info 2. See [[KBL_Param#Hardware_Info_2]].<br />
|-<br />
| 0x10<br />
| 0x2<br />
| 0xCF5B2F2F<br />
| sceSysconGetWakeupFactorForDriver<br />
|-<br />
| 0x11<br />
| 0x4<br />
| 0xD7BEFF8B<br />
| sceSysconGetClockForDriver<br />
|-<br />
| 0x12<br />
| 0x5 or 0x6<br />
| 0x3168F3AF<br />
| SceSysconForDriver_3168F3AF. Gets information about alarm timer. Return value is 1 byte indicating data size then 4 or 5 bytes of data.<br />
|-<br />
| 0x13<br />
| 0x2<br />
| 0xBA09F171<br />
| SceSysconForDriver_BA09F171<br />
|-<br />
| 0x14<br />
| ?between 0x1 and 0x4?<br />
| 0x93075DD1<br />
| SceSysconForDriver_93075DD1<br />
|-<br />
| 0x15<br />
| 0x4<br />
| 0x3E09A1F4<br />
| sceSysconGetManufacturesStatusForDriver<br />
|-<br />
| 0x80<br />
| 0x0<br />
| module_start<br />
| ?? Used during SysconInit. Sends 2 bytes (ex: 0x0012) to Syscon.<br />
|-<br />
| 0x81<br />
| ?<br />
| 0x9B6A6F64<br />
| sceSysconSetClockForDriver. Sends 5 bytes to Syscon: 1 byte for size=5 and 4 bytes of data.<br />
|-<br />
| 0x82<br />
| ?<br />
| 0x51164951<br />
| SceSysconForDriver_51164951<br />
|-<br />
| 0x83<br />
| ?<br />
| 0x373ECF8A<br />
| SceSysconForDriver_373ECF8A. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x84<br />
| ?<br />
| 0x2659535C<br />
| SceSysconForDriver_2659535C. Sends 1 byte to Syscon.<br />
|-<br />
| 0x85<br />
| ?<br />
| 0x4295D497<br />
| SceSysconForDriver_4295D497<br />
|-<br />
| 0x86<br />
| 8<br />
| 0x701535FC<br />
| sceSysconGetLogInfoForDriver<br />
|-<br />
| 0x87<br />
| 0<br />
| 0x4E55CF5E<br />
| sceSysconLogStartForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x88<br />
| 0x18<br />
| 0x487D97F3<br />
| sceSysconLogReadDataForDriver. Sends 2 bytes to Syscon: offset.<br />
|-<br />
| 0x89<br />
| 0<br />
| 0x9C0B1E61<br />
| sceSysconLogStartWaitingForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x90<br />
| ?0x3B?<br />
| 0x299B1CE7<br />
| sceSysconReadScratchPadForDriver<br />
|-<br />
| 0x91<br />
| ?0x3B?<br />
| 0xE26488B9<br />
| sceSysconWriteScratchPadForDriver<br />
|-<br />
| 0xA0<br />
| ?0x10 or 0x28?<br />
| second_loader<br />
| Handshake during boot. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xB0<br />
| 0<br />
| 0x058941D7<br />
| sceSysconOutputClockForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB1<br />
| 0<br />
| 0xDF8C6D2D<br />
| sceSysconCtrlWirelessPowerDownForDriver<br />
|-<br />
| 0xB2<br />
| 0<br />
| 0xDECCB2B4<br />
| sceSysconCtrlHostOutputViaDongleForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB3<br />
| at least 1<br />
| 0x33B5CDB3<br />
| SceSysconForDriver_33B5CDB3<br />
|-<br />
| 0xB4<br />
| at least 1<br />
| 0xF6D4DDC4<br />
| SceSysconForDriver_F6D4DDC4<br />
|-<br />
| 0xB5<br />
| 0<br />
| 0x00AE3AEB<br />
| SceSysconForDriver_00AE3AEB. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB6<br />
| 0<br />
| 0x0D300158<br />
| SceSysconForDriver_0D300158. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB7<br />
| at least 1<br />
| 0x91EF4EC3<br />
| SceSysconForDriver_91EF4EC3<br />
|-<br />
| 0xC0<br />
| ?0x3E?<br />
| <br />
| <br />
|-<br />
| 0xC1<br />
| 0<br />
| 0x94AB13CC<br />
| sceSysconErnieShutdownForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xD0<br />
| ?0x2A or 0x28?<br />
| 0x4D03754A<br />
| SceSysconForDriver_4D03754A. Handshake before SNVS RW. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD1<br />
| ?0x0 or 0x2?<br />
| 0xC14BD637<br />
| SceSysconForDriver_C14BD637<br />
|-<br />
| 0xD2<br />
| ?0x30?<br />
| 0xEBDF88B9, second_loader<br />
| sceSysconSnvsReadDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD3<br />
| ?0x12?<br />
| 0x63683B9B<br />
| sceSysconSnvsWriteDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0x100<br />
| 0x4<br />
| 0x145F59A4<br />
| sceSysconGetControlsInfoForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x101<br />
| 0x8<br />
| <br />
| sceSysconGetControlsInfo2ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]]. Uses Ernie version and Ernie DL version.<br />
|-<br />
| 0x102<br />
| 0xC<br />
| <br />
| <br />
|-<br />
| 0x103<br />
| 0x4<br />
| 0x1503D6A0<br />
| sceSysconGetMultiCnInfoForDriver<br />
|-<br />
| 0x104<br />
| 0xC<br />
| <br />
| sceSysconGetControlsInfo3ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x105<br />
| ?<br />
| <br />
| Uses string "PS" then "TUV".<br />
|-<br />
| 0x106<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x107<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x108<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x109<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x110<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x120<br />
| ?<br />
| 0x76272CB9<br />
| SceSysconForDriver_76272CB9<br />
|-<br />
| 0x121<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x130<br />
| 0x4<br />
| module_start (SysconInit), 0xD6F6D472<br />
| SceSysconForDriver_D6F6D472<br />
|-<br />
| 0x131<br />
| ?0x1? (read)<br />
| 0xF99BC858<br />
| SceSysconForDriver_F99BC858. Added on a FW > 3.01 and <= 3.100.081.<br />
|-<br />
| 0x140<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x141<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x142<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x143<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x144<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x145<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x146<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x147<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x148<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x150<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x151<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x152<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x153<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x154<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x155<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x156<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x157<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x160<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x161<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x162<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x163<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x168<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x170<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x171<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x172<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x180<br />
| ?<br />
| <br />
| Set analog sampling. Sends 2 bytes to Syscon: 0 to disable, 1 to enable on Syscon version is < 0x90202, 3 to enable on Syscon version is >= 0x90202. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x181<br />
| 0<br />
| 0xCFCEE733<br />
| SceSysconForDriver_CFCEE733. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x182<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x183<br />
| 0x10<br />
| 0xFDB3AE9D<br />
| SceSysconForDriver_FDB3AE9D. Gets some information.<br />
|-<br />
| 0x184<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x185<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x186<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x187<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x188<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x189<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18A<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18B<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18C<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18D<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18E<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18F<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x190<br />
| 0<br />
| 0x8AAB6308<br />
| sceSysconSetMultiCnPortForDriver. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x191<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x192<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1B0<br />
| 0<br />
| 0xE7893732<br />
| SceSysconForDriver_E7893732. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x1B2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D5<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x300<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x301<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x303<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x380<br />
| at least 1<br />
| 0xF492E69E<br />
| sceSysconGetTouchpanelDeviceInfoForDriver<br />
|-<br />
| 0x38A<br />
| at least 1<br />
| 0xA1F1B973<br />
| ??<br />
|-<br />
| 0x390<br />
| at least 1<br />
| 0x030D447F<br />
| sceSysconGetTouchpanelDeviceInfo2ForDriver<br />
|-<br />
| 0x392<br />
| ?<br />
| 0x48ED8981, 0x060E55C1<br />
| SceSysconForDriver_48ED8981 / SceSysconForDriver_060E55C1. Sends 2 bytes to Syscon: 0 or 1.<br />
|-<br />
| 0x393<br />
| ?<br />
| 0x9A28BEEF, 0x8874EF45<br />
| SceSysconForDriver_9A28BEEF / SceSysconForDriver_8874EF45. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]].<br />
|-<br />
| 0x3A0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3A1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3A2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3A3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3A4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3A9<br />
| 0<br />
| 0x010F95D9<br />
| SceSysconForDriver_010F95D9. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3AB<br />
| ?<br />
| 0x357CC9D9<br />
| SceSysconForDriver_010F95D9. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3AC<br />
| ?between 0x1 and 0x4?<br />
| 0x3664E2C0<br />
| SceSysconForDriver_3664E2C0. Gets information.<br />
|-<br />
| 0x3AF<br />
| ?<br />
| 0xB8F4F4E3<br />
| SceSysconForDriver_B8F4F4E3. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3B0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3B1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3B2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3B3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3B4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3B9<br />
| ?<br />
| 0x42E599AC<br />
| SceSysconForDriver_42E599AC. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3BB<br />
| ?<br />
| 0xCCA56A16<br />
| SceSysconForDriver_CCA56A16. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3BC<br />
| ?between 0x1 and 0x4?<br />
| 0x2E6D97CD<br />
| SceSysconForDriver_2E6D97CD. Gets information.<br />
|-<br />
| 0x3BF<br />
| ?<br />
| 0x240A604E<br />
| SceSysconForDriver_240A604E. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3C2<br />
| ?<br />
| 0x5946B29B, 0x10327C64<br />
| SceSysconForDriver_5946B29B / SceSysconForDriver_10327C64. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]]<br />
|-<br />
| 0x400<br />
| ?<br />
| 0x270B7B0B<br />
| sceSysconMotionGetMeasureDataForDriver<br />
|-<br />
| 0x480<br />
| 4<br />
| 0xD01E64FC<br />
| sceSysconMotionGetDeviceInfoForDriver<br />
|-<br />
| 0x481<br />
| ?<br />
| 0x9A7858B6<br />
| SceSysconForDriver_9A7858B6. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x800<br />
| ?0x2 or 0x4?<br />
| 0xA2FE9BF9<br />
| SceSysconForDriver_A2FE9BF9. [[ScePower]] related.<br />
|-<br />
| 0x801<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0x802<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaced by Syscon command 0x900 on Syscon version > 0x70503.<br />
|-<br />
| 0x803<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaced by Syscon command 0x901 on Syscon version > 0x70503.<br />
|-<br />
| 0x804<br />
| ?<br />
| <br />
| ??<br />
|-<br />
| 0x805<br />
| 4<br />
| 0xEF810687<br />
| sceSysconGetUsbDetStatusForDriver<br />
|-<br />
| 0x806<br />
| ?0x1?<br />
| 0xE7F5D3DC<br />
| SceSysconForDriver_E7F5D3DC. Reboots PS Vita?<br />
|-<br />
| 0x807<br />
| 0x2<br />
| 0x253CC522<br />
| SceSysconForDriver_253CC522.<br />
|-<br />
| 0x820<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED on.<br />
|-<br />
| 0x821<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink slowly.<br />
|-<br />
| 0x822<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink fast.<br />
|-<br />
| 0x840<br />
| ?0x1?<br />
| 0x4FEC564C<br />
| sceSysconGetManualChargeModeForDriver<br />
|-<br />
| 0x841<br />
| ?0x1?<br />
| 0x3C3B949C<br />
| SceSysconForDriver_3C3B949C<br />
|-<br />
| 0x842<br />
| ?0x1?<br />
| 0x1C29C00E<br />
| SceSysconForDriver_1C29C00E<br />
|-<br />
| 0x843<br />
| ?0x1?<br />
| 0x730E4725<br />
| SceSysconForDriver_730E4725<br />
|-<br />
| 0x880<br />
| 0x4<br />
| 0xA039B563<br />
| sceSysconGetElmoVersionForDriver<br />
|-<br />
| 0x881<br />
| ?<br />
| 0x9BF78047<br />
| sceSysconGetCookieVersionForDriver<br />
|-<br />
| 0x882<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaced by Syscon command 0x980 on Syscon version > 0x70503.<br />
|-<br />
| 0x883<br />
| 0x8<br />
| 0x175CE5A1<br />
| sceSysconGetPowerStatusForDriver<br />
|-<br />
| 0x884<br />
| ?<br />
| 0x3FDD29D6<br />
| SceSysconForDriver_3FDD29D6. Same usage as command 0x885. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x885<br />
| ?<br />
| 0x79E6DD8B<br />
| SceSysconForDriver_79E6DD8B. Same usage as command 0x884. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x886<br />
| ?0x2?<br />
| 0x62155962<br />
| sceSysconCtrlHdmiCecPowerForDriver<br />
|-<br />
| 0x887<br />
| ?<br />
| 0x063425AE<br />
| sceSysconCtrlMotionSensorPowerForDriver<br />
|-<br />
| 0x888<br />
| ?0x2?<br />
| 0xBE1ADE4F<br />
| sceSysconCtrlSdPowerForDriver<br />
|-<br />
| 0x889<br />
| ?0x2?<br />
| 0x8D1D97E8<br />
| sceSysconCtrlAccPowerForDriver<br />
|-<br />
| 0x88A<br />
| ?<br />
| 0x4FBDA504, 0xA2E85DB9<br />
| sceSysconCtrlWirelessPowerForDriver, sceSysconCtrlWirelessPower2ForDriver<br />
|-<br />
| 0x88B<br />
| ?<br />
| 0x5A614349<br />
| SceSysconForDriver_5A614349. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88C<br />
| ?<br />
| 0xB872E904<br />
| SceSysconForDriver_B872E904. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88D<br />
| ?<br />
| 0xDD16ABD9<br />
| SceSysconForDriver_DD16ABD9. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88E<br />
| 0x0<br />
| 0x7F198FA2<br />
| sceSysconCtrlVoltageForDriver. See [[Ernie#CMD_0x088E_-_CtrlVoltage]].<br />
|-<br />
| 0x88F<br />
| ?0x2?<br />
| 0x40FF3898<br />
| sceSysconCtrlDeviceResetForDriver. ?UsbEtherSmsc and WlanBt related?<br />
|-<br />
| 0x890<br />
| ?<br />
| 0x285594F8<br />
| SceSysconForDriver_285594F8. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x891<br />
| ?0x2?<br />
| 0x04EC7579<br />
| sceSysconCtrlLEDForDriver<br />
|-<br />
| 0x892<br />
| ?0?<br />
| 0x596B17B7<br />
| sceSysconCtrlChargeACForDriver. [[ScePower]] related.<br />
|-<br />
| 0x893<br />
| ?0?<br />
| 0x2A4B0437<br />
| sceSysconCtrlChargeVBUSForDriver. [[ScePower]] related.<br />
|-<br />
| 0x895<br />
| ?<br />
| 0x5BF765BB<br />
| sceSysconReadElmoRegForDriver<br />
|-<br />
| 0x896<br />
| ?<br />
| 0xCCC71C28<br />
| sceSysconWriteElmoRegForDriver<br />
|-<br />
| 0x897<br />
| ?<br />
| 0x95975DD1<br />
| sceSysconReadCookieRegForDriver<br />
|-<br />
| 0x898<br />
| ?<br />
| 0xF39300D3<br />
| sceSysconWriteCookieRegForDriver<br />
|-<br />
| 0x899<br />
| ?0?<br />
| 0x5CDDA14D<br />
| ?Guessed name: sceSysconCtrlHpremoteForDriver? [[SceHpremote]] related.<br />
|-<br />
| 0x89A<br />
| ?0?<br />
| 0x59DC5938<br />
| sceSysconCtrlUsbStatusForDriver<br />
|-<br />
| 0x89B<br />
| ?0x2?<br />
| 0x710A7CF0<br />
| sceSysconCtrlRMRPowerForDriver<br />
|-<br />
| 0x89C<br />
| ?0x2?<br />
| 0xB1F88B11<br />
| sceSysconCtrlMultiCnPowerForDriver. [[SceUsbServ]] related.<br />
|-<br />
| 0x89D<br />
| ?<br />
| 0x6F586D1A<br />
| sceSysconCtrlLedPwmBlinkForDriver<br />
|-<br />
| 0x89E<br />
| ?<br />
| 0x9CA6EB70<br />
| sceSysconSetChargeLedCtrlForDriver. Sends 2 bytes to Syscon. [[ScePower]] related.<br />
|-<br />
| 0x89F<br />
| ?<br />
| 0xCB41B531<br />
| sceSysconCtrlLedBlinkType2ForDriver. Sends 6 bytes to Syscon.<br />
|-<br />
| 0x8A0<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaced by Syscon command 0x981 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A1<br />
| ?0x3B or 0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaced by Syscon command 0x982 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x8A2<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaced by Syscon command 0x983 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A3<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaced by Syscon command 0x984 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A4<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaced by Syscon command 0x985 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A8<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaced by Syscon command 0x986 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A9<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaced by Syscon command 0x987 on Syscon version > 0x70503.<br />
|-<br />
| 0x8AA<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaced by Syscon command 0x988 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B0<br />
| ?<br />
| 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaced by Syscon command 0x9B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x8B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaced by Syscon command 0x9B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaced by Syscon command 0x9B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaced by Syscon command 0x9B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaced by Syscon command 0x9B4 on Syscon version > 0x70503.<br />
|-<br />
| 0x8C0<br />
| ?<br />
| 0xC6A2C9EF<br />
| sceSysconCtrlManualChargeModeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C1<br />
| ?<br />
| ??<br />
| sceSysconCtrlBatteryChargeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C2<br />
| ?<br />
| ??<br />
| sceSysconCtrlChargingCurrentForDriver (accepts 0x00 - 0x1F as value)<br />
|-<br />
| 0x8C3<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentAcForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C4<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentUsbForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C5<br />
| ?0x0 or 0x2?<br />
| 0x3274A925<br />
| SceSysconForDriver_3274A925. [[SceUsbServ]] and [[SceUsbEtherSmsc]] related.<br />
|-<br />
| 0x8C6<br />
| ?<br />
| 0xDFB024C4<br />
| sceSysconReadCookieStatusForDriver. [[SceSblUpdateMgr]] related.<br />
|-<br />
| 0x8C7<br />
| ?<br />
| 0x87FF8041<br />
| SceSysconForDriver_87FF8041. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C8<br />
| ?<br />
| 0x7BFA95DA<br />
| sceSysconCtrlUSBSupplyForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C9<br />
| ?0?<br />
| 0x451C1662<br />
| SceSysconForDriver_451C1662. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CA<br />
| 1<br />
| 0x79074DE4<br />
| SceSysconForDriver_79074DE4. Sends 0 byte to Syscon.<br />
|-<br />
| 0x8CB<br />
| 1<br />
| 0x7D25F6D2<br />
| SceSysconForDriver_7D25F6D2. Sends 1 byte to Syscon.<br />
|-<br />
| 0x8CC<br />
| ?0?<br />
| 0xD2ADABCA<br />
| SceSysconForDriver_D2ADABCA. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CE<br />
| 0x10<br />
| 0x3B354824<br />
| sceSysconGetTemperatureLogForDriver<br />
|-<br />
| 0x8CF<br />
| 0<br />
| 0x3843D657<br />
| sceSysconClearTemperatureLogForDriver. Sends 2 bytes to syscon.<br />
|-<br />
| 0x8D0<br />
| ?<br />
| 0xF87679EE<br />
| SceSysconForDriver_F87679EE. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x900<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaces Syscon command 0x802 on Syscon version > 0x70503.<br />
|-<br />
| 0x901<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaces Syscon command 0x803 on Syscon version > 0x70503.<br />
|-<br />
| 0x902<br />
| ?0x4?<br />
| 0xAD0A8275<br />
| sceSysconGetBatteryLifePercentForDriver<br />
|-<br />
| 0x903<br />
| 0x2<br />
| 0x26F9D729<br />
| sceSysconGetBatteryRemainLevelForDriver. Added on a FW higher than 2.50 and Syscon version >= 0x1040105.<br />
|-<br />
| 0x904<br />
| ?<br />
| 0x9ADC9936<br />
| sceSysconGetBatteryCalibDataForDriver<br />
|-<br />
| 0x910<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x911<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x912<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x913<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x914<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x915<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x916<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x917<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x932<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x944<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x945<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x952<br />
| ?<br />
| <br />
| Uses string "PC" then "TUV".<br />
|-<br />
| 0x953<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x954<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x961<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x962<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x963<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x964<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x965<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x966<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x967<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x968<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x969<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x980<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaces Syscon command 0x882 on Syscon version > 0x70503.<br />
|-<br />
| 0x981<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaces Syscon command 0x8A0 on Syscon version > 0x70503.<br />
|-<br />
| 0x982<br />
| ?0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaces Syscon command 0x8A1 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x983<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaces Syscon command 0x8A2 on Syscon version > 0x70503.<br />
|-<br />
| 0x984<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaces Syscon command 0x8A3 on Syscon version > 0x70503.<br />
|-<br />
| 0x985<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaces Syscon command 0x8A4 on Syscon version > 0x70503.<br />
|-<br />
| 0x986<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaces Syscon command 0x8A8 on Syscon version > 0x70503.<br />
|-<br />
| 0x987<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaces Syscon command 0x8A9 on Syscon version > 0x70503.<br />
|-<br />
| 0x988<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaces Syscon command 0x8AA on Syscon version > 0x70503.<br />
|-<br />
| 0x989<br />
| ?<br />
| 0x87DA378D<br />
| sceSysconBatterySWResetForDriver<br />
|-<br />
| 0x98A<br />
| ?between 0x2 and 0x4?<br />
| 0xF93CF833<br />
| sceSysconGetBatteryFullCapForDriver<br />
|-<br />
| 0x98B<br />
| ?between 0x2 and 0x4?<br />
| 0xECFA7242 / 0xE1885F68<br />
| sceSysconGetBicTempForDriver / sceSysconGetAbbyTempForDriver<br />
|-<br />
| 0x98C<br />
| ?0x4?<br />
| 0xCD73079D<br />
| sceSysconGetBatteryCycleCountForDriver<br />
|-<br />
| 0x9B0<br />
| ?<br />
| 0x2CEF078E / 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaces Syscon command 0x8B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x9B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaces Syscon command 0x8B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaces Syscon command 0x8B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaces Syscon command 0x8B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaces Syscon command 0x8B4 on Syscon version > 0x70503.<br />
|-<br />
| 0xA00<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0xA82<br />
| ?<br />
| 0x7BAFE083<br />
| SceSysconForDriver_7BAFE083. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x1080<br />
| ?0x0 or 0x2?<br />
| 0x81A6060D<br />
| sceSysconNvsSetRunModeForDriver<br />
|-<br />
| 0x1081<br />
| ?0x0 or 0x2?<br />
| 0x2EC6D55D<br />
| sceSysconNvsSetUnkModeForDriver<br />
|-<br />
| 0x1082<br />
| ?around 0x20?<br />
| 0xACAFA2B8<br />
| sceSysconNvsReadDataForDriver<br />
|-<br />
| 0x1083<br />
| ?0x2?<br />
| 0x10C9657A<br />
| sceSysconNvsWriteDataForDriver<br />
|-<br />
| 0x1100<br />
| 0x4<br />
| 0xD2F456DC<br />
| sceSysconGetErnieDLVersionForDriver<br />
|-<br />
| 0x1101<br />
| 0x4<br />
| <br />
| <br />
|-<br />
| 0x1180<br />
| ?<br />
| 0x9B00BC7F<br />
| sceSysconUpdaterSetSegmentForDriver<br />
|-<br />
| 0x1181<br />
| ?<br />
| 0x356B9696, 0x734544E4<br />
| sceSysconUpdaterSendProgramDataForDriver, sceSysconUpdaterSendProgramData2ForDriver<br />
|-<br />
| 0x1182<br />
| ?<br />
| 0x69AD76E4<br />
| sceSysconUpdaterExecProgrammingForDriver<br />
|-<br />
| 0x1183<br />
| ?<br />
| 0xB487C2FB<br />
| sceSysconUpdaterSetRunModeForDriver<br />
|-<br />
| 0x1184<br />
| ?<br />
| 0xC7747A63<br />
| sceSysconUpdaterExecFinalizeForDriver<br />
|-<br />
| 0x1185<br />
| ?<br />
| 0xCBA836FF<br />
| sceSysconUpdaterCheckSignatureForDriver. Sends 0x18 bytes to Syscon.<br />
|-<br />
| 0x1300<br />
| 0x8<br />
| 0xCE48E8EB<br />
| sceSysconGetConfigStorageInfoForDriver<br />
|-<br />
| 0x1310<br />
| 0x1<br />
| 0x351946B0<br />
| SceSysconForDriver_351946B0<br />
|-<br />
| 0x1382<br />
| ?<br />
| 0xA4968B8C<br />
| sceSysconBeginConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1383<br />
| ?<br />
| 0xFCC3E8EE<br />
| sceSysconEndConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1384<br />
| ?<br />
| 0x7B9B3617<br />
| sceSysconCommitConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1385<br />
| ?<br />
| 0x89C5CFD6<br />
| sceSysconLoadConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1386 (called from ARM Kernel but not implemented in Syscon FW)<br />
| ?<br />
| 0xCC6F90A8<br />
| sceSysconVerifyConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1392<br />
| ?0?<br />
| 0xFD65FFCB<br />
| SceSysconForDriver_FD65FFCB. Sends 3 bytes to Syscon: 1 byte offset (between 0 and 0xFF), 2 bytes a2 (between 0 and 2).<br />
|-<br />
| 0x1393<br />
| ?<br />
| 0x02350352<br />
| SceSysconForDriver_02350352. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x1394<br />
| ?<br />
| 0x7DE84CE3<br />
| SceSysconForDriver_7DE84CE3. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x2080<br />
| ?<br />
| 0x44A173F5<br />
| sceSysconJigOpenPortForDriver<br />
|-<br />
| 0x2081<br />
| ?<br />
| 0x483FAE05<br />
| sceSysconJigClosePortForDriver<br />
|-<br />
| 0x2082<br />
| ?<br />
| 0xD24BF916<br />
| sceSysconJigSetConfigForDriver<br />
|-<br />
| 0x2083<br />
| ?<br />
| 0x3C80B529<br />
| receive_pm_sm_jig_msg_from_syscon<br />
|-<br />
| 0x2084<br />
| ?<br />
| 0xCE346793<br />
| send_pm_sm_jig_short_msg_to_syscon<br />
|-<br />
| 0x2085<br />
| ?<br />
| 0x7BFBA09E / 0x933D813F<br />
| send_pm_sm_jig_msg_to_syscon / send_pm_sm_stop_to_syscon<br />
|}<br />
<br />
== Callbacks ==<br />
<br />
All the following exported functions have this function prototype: <code>int sceSysconSet...Callback(void (*func)(int enable, void *argp), void *argp);</code>.<br />
<br />
{| class="wikitable"<br />
! Callback name !! Callback setter function !! State getter function !! Callback setter caller !! Comments<br />
|-<br />
| SYSCON_CB_ACC || [[#sceSysconSetAccCallbackForDriver]] || [[#SceSysconForDriver_B9EA2FA8]] || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MULTI_CN_OTG || [[#sceSysconSetMultiCnOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MINI_USB_OTG || [[#sceSysconSetMiniUsbOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_ALARM || [[#sceSysconSetAlarmCallbackForDriver]] || NA || [[ScePower]] ||<br />
|-<br />
| ?SYSCON_CB_WLANBT? || [[#SceSysconForDriver_18A6F4D9]] || [[#SceSysconForDriver_C0F215B7]] || [[SceWlanBt]] but not used on <= 0.996.090 ||<br />
|-<br />
| ?SYSCON_CB_HEADPHONE? || [[#SceSysconForDriver_DE613081]] || [[#SceSysconForDriver_C3504ADE]] || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_MICROPHONE? || [[#SceSysconForDriver_63352A39]] || NA || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_REMOTE? || [[#SceSysconForDriver_35E1689F]] || [[#SceSysconForDriver_ACC7F71E]] || [[SceHpremote]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY || [[#sceSysconSetLowBatteryCallbackForDriver]] || [[#sceSysconIsLowBatteryForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_THERMAL_ALERT || [[#sceSysconSetThermalAlertCallbackForDriver]] || [[#SceSysconForDriver_50CAE242]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_REBOOT || [[#sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateRebootForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_DOWNLOAD || [[#sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateDownloadForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_BATTERY_ONLINE || [[#SceSysconForDriver_80D6E061]] || [[#SceSysconForDriver_27758A64]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_RESUME_REQUEST || [[#SceSysconForDriver_9F8340FF]] || [[#SceSysconForDriver_A57B5433]] || [[ScePower]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2D471528]] || [[#SceSysconForDriver_03C50DC3]] || [[ScePower]] || Very similar to SYSCON_CB_LOW_BATTERY.<br />
|-<br />
| ? || [[#SceSysconForDriver_7682FE69]] || [[#SceSysconForDriver_4A184B7C]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_E0D52DF0]] || [[#SceSysconForDriver_ACEE1C70]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_229A07C2]] || [[#SceSysconForDriver_B832B72C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_474A9EA7]] || [[#SceSysconForDriver_769F9AC4]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_129EA022]] || [[#SceSysconForDriver_BFDA5590]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_ALARM_TIMER || [[#SceSysconForDriver_8351526D]] || [[#SceSysconForDriver_86BAAF7D]] || [[SceRtc]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2E4BA4B8]] || [[#SceSysconForDriver_29CF4335]] || No use case seen. || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_4E88B4D9]] || [[#SceSysconForDriver_4BC63A40]] || [[SceBbmc]] || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_376CCCB8]] || [[#SceSysconForDriver_99A254A9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_3BAAC8A9]] || [[#SceSysconForDriver_9A4F4B7C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_85E5DEBF]] || [[#SceSysconForDriver_63B14156]] || [[SceBbmc]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_14730196]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_C442D0BE]] || [[#SceSysconForDriver_9F4042F8]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_61AE3970]] || [[#SceSysconForDriver_C50568E9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_423D0C58]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_154676F1]] || NA || No use case seen. ||<br />
|}<br />
<br />
See also [http://uofw.github.io/upspd/docs/SilverSpring_Blog/my.malloc.us/silverspring/2007/12/03g-model-psp/index.html SilverSpring's PSP Syscon callbacks enum] and [https://github.com/pspdev/pspsdk/blob/master/src/power/psppower.h PSPSDK power callbacks enum].<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSdif&diff=21073
SceSdif
2024-01-17T22:37:04Z
<p>CelesteBlue: /* wlan_bt_cmd52_sdio */</p>
<hr />
<div>Sdif likely stands for Storage Device InterFace. SceSdif is a kernel module that is primary responsible for communicating with SD devices. This includes eMMC (internal storage), gamecard MMC, SD/micro SD card, Wlan/Bt SDIO devices. Memory Card is handled by [[SceMsif]] instead as it uses an authentication security layer.<br />
<br />
To communicate with a particular device SceSdif module uses device index (sd_ctx_index).<br />
<br />
{| class="wikitable"<br />
|-<br />
! Device Index !! Device !! Device Type !! Description<br />
|-<br />
| 0 || Internal || MMC || eMMC (internal storage)<br />
|-<br />
| 1 || Game card || MMC/SD || Gamecard/?SD card?<br />
|-<br />
| 2 || Wlan/Bt || SDIO || Wlan/Bt<br />
|-<br />
| 3 || Micro SD || SD || Used by [[SceSdstor]] "usd" device. Related to error 0x80320013 on release FW 3.600.011 but maybe used on old FW versions.<br />
|}<br />
<br />
There is one more index value that closely correlates with Device Index. This is speculated to be Device Type Index. It is initialized by internal subroutine that does preinitialization (cmd0, cmd8, cmd5_sdio, cmd55, acmd41). Value is typically stored in sd_context_data structure in field dev_type_idx.<br />
<br />
{| class="wikitable"<br />
! Device Type Index !! Device Type !! Associated SceSdif init function<br />
|-<br />
| 0 || Unknown (invalid?) || None?<br />
|-<br />
| 1 || MMC || [[#get_sd_context_part_validate_mmc|get_sd_context_part_validate_mmc]]<br />
|-<br />
| 2 || SD || [[#get_sd_context_part_validate_sd|get_sd_context_part_validate_sd]]<br />
|-<br />
| 3 || SDIO || [[#get_sd_context_part_validate_sdio|get_sd_context_part_validate_sdio]]<br />
|}<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.990.000-3.740.011 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.990.000-3.740.011 || [[SceSdif#SceSdifForDriver|SceSdifForDriver]] || Non-secure || Kernel || 0x96D306FA<br />
|}<br />
<br />
== Data segment layout ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Address !! Size !! Description<br />
|-<br />
| 0x0000 || 0x40 || sdif_context_general<br />
|-<br />
| 0x0040 || 0x24C0 || sd_context_global (eMMC)<br />
|-<br />
| 0x2500 || 0x24C0 || sd_context_global (gamecard)<br />
|-<br />
| 0x49C0 || 0x24C0 || sd_context_global (wlan/bt)<br />
|-<br />
| 0x6E80 || 0x398 || sd_context_part_mmc (eMMC)<br />
|-<br />
| 0x7218 || 0x398 || sd_context_part_mmc (gamecard)<br />
|-<br />
| 0x75B0 || 0xC0 || sd_context_part_sd (unknown) used in [[#initialize_sd_device|initialize_sd_device]]<br />
|-<br />
| 0x7670 || 0xC0 || sd_context_part_sd (gamecard) used in [[#initialize_sd_device|initialize_sd_device]]<br />
|-<br />
| 0x7730 || 0xC0 || sd_context_part_sd (unknown) used in [[#initialize_sd_device|initialize_sd_device]]<br />
|-<br />
| 0x77F0 || 0xD38 || custom context used in [[#wlan_bt_initialize_custom_context2|wlan_bt_initialize_custom_context2]]<br />
|-<br />
| 0x8528 || 0xD38 || custom context used in [[#wlan_bt_initialize_custom_context2|wlan_bt_initialize_custom_context2]]<br />
|-<br />
| 0x9260 || 0x398 || sd_context_part_wlanbt (wlan/bt)<br />
|-<br />
| 0x95F8 || 0x888 || unknown<br />
|-<br />
| 0x9E80 || 0x118 || some wlan/bt data<br />
|}<br />
<br />
== Allocated blocks ==<br />
<br />
During initialization step Sdif driver allocates couple of memory blocks. This happens when 'module_start' function is called, inside 'init' function.<br />
<br />
There are 2 blocks per device context. Each block is named as SceSdif<N> where N is array index.<br />
<br />
First block is of size 0x1000 - SceUID and void* are stored in sd_context_data per device context.<br />
<br />
Second block is of size 0x10000 - SceUID and void* are stored in sd_context_data per device context.<br />
<br />
First block is DMA copied to / from corresponding SceSdif<N> [[Physical_Memory|physical address]].<br />
<br />
First block looks like to have layout that corresponds to standard SD/MMC host that is described in "Physical Layer Simplified Specification".<br />
<br />
== SceSdifForDriver ==<br />
<br />
=== Types ===<br />
<br />
<source lang="C"><br />
typedef enum SceSdifDevice {<br />
SCE_SDIF_DEVICE_EMMC = 0,<br />
SCE_SDIF_DEVICE_GC = 1,<br />
SCE_SDIF_DEVICE_SDIO = 2,<br />
SCE_SDIF_DEVICE_USD = 3,<br />
} SceSdifDevice;<br />
<br />
typedef enum SceSdifDeviceType {<br />
SCE_SDIF_DEVICE_TYPE_INVALID = 0,<br />
SCE_SDIF_DEVICE_TYPE_MMC = 1,<br />
SCE_SDIF_DEVICE_TYPE_SD = 2,<br />
SCE_SDIF_DEVICE_TYPE_SDIO = 3,<br />
} SceSdifDeviceType;<br />
<br />
typedef struct cmd_info {<br />
uint32_t state_flags;<br />
uint32_t command;<br />
uint32_t argument;<br />
void* buffer;<br />
uint16_t resp_block_size;<br />
uint16_t resp_n_blocks;<br />
<br />
union {<br />
struct {<br />
char data[0x10];<br />
} db;<br />
struct {<br />
uint32_t dw0;<br />
uint32_t dw1;<br />
uint32_t dw2;<br />
uint32_t dw3;<br />
} dw;<br />
} response;<br />
<br />
uint32_t error_code;<br />
} cmd_info;<br />
<br />
typedef struct host_info {<br />
sd_mmc_registers* host_registers;<br />
uint32_t unk_4;<br />
uint32_t base_clock; // = 48000000 dec<br />
uint32_t bus_width; // = 1 / 4 / 8 (bits)<br />
uint32_t clock_frequency; // = base_clock >> (SDCLK Frequency Select)<br />
uint8_t timeout_control_register;<br />
uint8_t specification_version_number; // = 1 / 2 / 3<br />
uint8_t vendor_version_number;<br />
uint8_t unk_17;<br />
uint32_t unk_18;<br />
uint32_t unk_1C;<br />
uint32_t unk_20;<br />
uint32_t unk_24;<br />
} host_info;<br />
<br />
typedef struct device_info {<br />
uint32_t dev_type_idx; // (1,2,3)<br />
uint32_t unk_4;<br />
uint16_t unk_8;<br />
} device_info;<br />
<br />
typedef struct sdif_context_general { //size is 0x40<br />
SceUID suspend_callback_id;<br />
uint32_t max_array_index; // typically 3<br />
uint32_t unk_8;<br />
uint32_t unk_C; <br />
<br />
uint32_t unk_10;<br />
uint32_t unk_14;<br />
uint32_t unk_18;<br />
uint32_t unk_1C; <br />
<br />
uint32_t unk_20;<br />
uint32_t unk_24;<br />
uint32_t unk_28;<br />
uint32_t unk_2C; <br />
<br />
uint32_t unk_30;<br />
uint32_t unk_34;<br />
uint32_t unk_38;<br />
uint32_t unk_3C; <br />
} sdif_context_general;<br />
<br />
typedef struct cmd_input { // size is 0x240<br />
uint32_t size; // 0x240<br />
<br />
// bit 10 (shift left 0x15) - request invalidate flag - invalidate vaddr_1C0 and vaddr_200<br />
// this flag is used for CMD56 and CMD17<br />
// bit 20 (shift left 0xB) - request mem_188 free - free memblock with uid mem_188<br />
<br />
// bit 20 or bit 9 cancels invalidation (both must be clear)<br />
uint32_t state_flags; // interrupt handler completion flag<br />
<br />
uint32_t command;<br />
uint32_t argument;<br />
<br />
// stores normal response without command index and crc-7<br />
// can also store CID or CSD. crr-7 will be cleared<br />
// storage order is reversed<br />
union {<br />
struct {<br />
char data[0x10];<br />
} db;<br />
struct {<br />
uint32_t dw0;<br />
uint32_t dw1;<br />
uint32_t dw2;<br />
uint32_t dw3;<br />
} dw;<br />
} response;<br />
<br />
void* buffer; // cmd data buffer ptr - dest for vaddr_1C0<br />
uint16_t resp_block_size_24; // block size of response. typically 0x200 which is default sector size<br />
uint16_t resp_n_blocks_26; // number of blocks in response. typically number of sectors to read/write<br />
uint32_t error_code; // error code from interrupt handler (confirmed)<br />
uint32_t unk_2C;<br />
<br />
uint8_t data0[0x30]; <br />
<br />
struct cmd_input* next_cmd;<br />
uint32_t unk_64; // some flag. must be 3 for invalidation to happen<br />
uint32_t array_index;<br />
int(*set_event_flag_callback)(void* ctx);<br />
<br />
SceUID evid; // event id SceSdif0, SceSdif1, SceSdif2 (SceSdif3 ?)<br />
struct cmd_input* secondary_cmd; // (when multiple commands are sent)<br />
struct sd_context_global* gctx_ptr;<br />
uint32_t unk_7C;<br />
<br />
char vaddr_80[0x80]; // 3 - mapped to paddr_184 (invalidate 0x80)<br />
<br />
void* vaddr_100;<br />
uint8_t data_104[0x7C];<br />
<br />
uint32_t unk_180;<br />
void* paddr_184; // 3 - phys address of vaddr_80<br />
SceUID mem_188; // SceSdif memblock<br />
uint32_t unk_18C;<br />
<br />
uint32_t unk_190;<br />
uint32_t unk_194;<br />
void* base_198; // dest base for vaddr_200 (also ptr for invalidate)<br />
// data at base contains CMD17 data<br />
// data at base also contains fragments of CMD56 response<br />
// data at offset is unknown (zeroes)<br />
uint32_t offset_19C; //dest offset for vaddr_200 (also size for invalidate)<br />
<br />
uint32_t size_1A0; // size of vaddr_1C0 - only valid if request invalidate flag is set<br />
uint32_t size_1A4; // size of vaddr_200 - only valid if request invalidate flag is set<br />
void* paddr_1A8; // 1 - phys address of vaddr_1C0<br />
void* paddr_1AC; // 2 - phys address of vaddr_200<br />
<br />
SceInt64 wide_time1; // 0x1B0<br />
SceInt64 wide_time2; // 0x1B8 - relevant for commands that need to wait for data on DAT lines<br />
<br />
char vaddr_1C0[0x40]; // 1 - mapped to paddr_1A8 (invalidate 0x40)<br />
// - only valid if request invalidate flag is set<br />
// - contains fragments of CMD56 request/response<br />
// - does not contain CMD17 data<br />
<br />
char vaddr_200[0x40]; // 2 - mapped to paddr_1AC (invalidate 0x40)<br />
// - only valid if request invalidate flag is set<br />
// - contains unknown data (zeroes)<br />
} cmd_input;<br />
<br />
typedef struct sd_mmc_registers {<br />
<br />
} sd_mmc_registers;<br />
<br />
typedef struct sd_context_data { // size is 0xC0<br />
struct cmd_input* cmd_ptr;<br />
struct cmd_input* cmd_ptr_next;<br />
uint32_t unk_8;<br />
uint32_t unk_C;<br />
<br />
uint32_t dev_type_idx; // (1, 2, 3)<br />
sd_context_part_base* ctx; // pointer to custom context (sd_context_part_mmc*, sd_context_part_sd*, sd_context_part_wlanbt*)<br />
uint32_t voltages; // MMC_VDD_165_195, MMC_VDD_32_33, etc. Values seen: SDIF0 and SDIF2: 0x80, SDIF1 and SDIF3: 0x300000<br />
uint32_t unk_1C;<br />
<br />
uint32_t array_idx; // (0,1,2)<br />
uint8_t unk_24;<br />
uint8_t unk_25;<br />
uint8_t unk_26;<br />
uint8_t unk_27;<br />
cmd_input* cmd_28;<br />
cmd_input* cmd_2C;<br />
<br />
sd_mmc_registers* host_registers; // membase of SceSdif (0,1,2) memblock of size 0x1000<br />
uint32_t unk_34;<br />
uint8_t unk_38;<br />
uint8_t slow_mode; // relevant only for 2 read and 2 write functions<br />
uint8_t unk_3A;<br />
uint8_t unk_3B;<br />
<br />
SceUID host_registers_uid; // UID of SceSdif (0,1,2) memblock of size 0x1000<br />
<br />
SceUID evid; // event id SceSdif0, SceSdif1, SceSdif2 (SceSdif3 ?)<br />
fast_mutex sdif_fast_mutex; //size is 0x40 - SceSdif0, SceSdif1, SceSdif2 (SceSdif3 ?) <br />
<br />
//it looks like this chunk is separate structure since offset 0x2480 is used too often<br />
<br />
//offset 0x2484<br />
SceUID uid_10000; // UID of SceSdif (0,1,2) memblock of size 0x10000<br />
void* membase_10000; // membase of SceSdif (0,1,2) memblock of size 0x10000<br />
uint32_t unk_8C;<br />
<br />
uint32_t unk_90;<br />
int lockable_int;<br />
uint32_t unk_98;<br />
uint32_t unk_9C;<br />
<br />
uint32_t unk_A0;<br />
uint32_t unk_A4;<br />
uint32_t unk_A8;<br />
uint32_t unk_AC;<br />
<br />
uint32_t unk_B0;<br />
uint32_t unk_B4;<br />
uint32_t unk_B8;<br />
uint32_t unk_BC;<br />
} sd_context_data;<br />
<br />
typedef struct sd_context_part_base {<br />
struct sd_context_global* gctx_ptr;<br />
uint32_t unk_4;<br />
uint32_t def_sector_size_mmc; // looks like default sector size - used in mmc read/write commands for resp_block_size_24<br />
uint32_t def_sector_size_sd; // looks like default sector size - used in sd read/write commands for resp_block_size_24<br />
<br />
uint8_t unk_10; // can be padding<br />
uint8_t CID[15]; // this is CID data but in reverse<br />
<br />
uint8_t unk_20; // can be padding<br />
uint8_t CSD[15]; // this is CSD data but in reverse<br />
} sd_context_part_base;<br />
<br />
typedef struct sd_context_part_mmc { // size is 0x398<br />
sd_context_part_base ctxb;<br />
<br />
uint8_t EXT_CSD[0x200]; // 0x30<br />
<br />
uint8_t data_230[0x160];<br />
<br />
void* unk_390;<br />
uint32_t unk_394;<br />
} sd_context_part_mmc;<br />
<br />
typedef struct sd_context_part_sd { // size is 0xC0<br />
sd_context_part_base ctxb;<br />
<br />
uint8_t data[0x90];<br />
} sd_context_part_sd;<br />
<br />
typedef struct sd_context_part_wlanbt { // size is 0x398<br />
struct sd_context_global* gctx_ptr;<br />
<br />
uint8_t data[0x394];<br />
} sd_context_part_wlanbt;<br />
<br />
typedef struct sd_context_global { // size is 0x24C0<br />
struct cmd_input commands[16];<br />
struct sd_context_data ctx_data;<br />
} sd_context_global;<br />
<br />
typedef struct bulk_transfer {<br />
uint32_t unk0;<br />
uint32_t unk1;<br />
uint32_t count;<br />
uint32_t unk2;<br />
uint32_t type; // 1: register access, 2: memory access<br />
uint32_t unk3;<br />
void * (*get_next)(void *); // callback to get next buffer<br />
uint32_t unk4;<br />
}<br />
</source><br />
<br />
=== sceSdifInitForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0eb0ef86<br />
|}<br />
<br />
<source lang="c">SceInt32 sceSdifInitForDriver(void);</source><br />
<br />
=== deinit ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xe5e5f42e<br />
|}<br />
<br />
<source lang="c">int deinit();</source><br />
<br />
=== return_error ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x235ad556<br />
|}<br />
<br />
<source lang="c">int return_error();</source><br />
<br />
=== sceSdifMemoryCardEnableSlowModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xF37CF8E5<br />
|}<br />
<br />
Temp name was sceSdifEnableSlowCardModeForDriver.<br />
<br />
sets slow_mode flag in sd_context_data for gamecard device<br />
<br />
also tries to set flag for device with index 3 but it does not actually exist<br />
<br />
<source lang="c">int sceSdifMemoryCardEnableSlowModeForDriver(void);</source><br />
<br />
=== sceSdifDisableSlowCardModeForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x29A71E7F<br />
|}<br />
<br />
Temp name was sceSdifMemoryCardEnableSlowModeForDriver.<br />
<br />
resets slow_mode flag in sd_context_data for gamecard device<br />
<br />
also tries to reset flag for device with index 3 but it does not actually exist<br />
<br />
<source lang="c">int sceSdifDisableSlowCardModeForDriver(void);</source><br />
<br />
=== sceSdifMemoryCardGetCardInsertStateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x36a2b01b<br />
|}<br />
<br />
gc/gcsd.<br />
<br />
Temp name was sceSdifGetCardInsertState1ForDriver, get_card_insert_state1.<br />
<br />
<source lang="c">int sceSdifMemoryCardGetCardInsertStateForDriver(SceSdifDevice dev);</source><br />
<br />
=== get_card_insert_state2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xfd9e5cfa<br />
|}<br />
<br />
<source lang="c">int get_card_insert_state2(int sd_ctx_index);</source><br />
<br />
=== gc_cmd56_response ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x134e06c4<br />
|}<br />
<br />
<source lang="c">int gc_cmd56_response(sd_context_part* ctx, char* buffer, int length);</source><br />
<br />
=== gc_cmd56_request ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xb0996641<br />
|}<br />
<br />
sceMmcSendGeneralCmdData<br />
<br />
<source lang="c">int gc_cmd56_request(sd_context_part* ctx, char* buffer, int length);</source><br />
<br />
=== get_sd_context_global ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xdc8f52f8<br />
|}<br />
<br />
<source lang="c">sd_context_global* get_sd_context_global(int sd_ctx_index);</source><br />
<br />
=== get_sd_context_part_validate_mmc ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6a71987f<br />
|}<br />
<br />
<source lang="c">sd_context_part* get_sd_context_part_validate_mmc(int sd_ctx_index);</source><br />
<br />
=== get_sd_context_part_validate_sd ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xb9ea5b1e<br />
|}<br />
<br />
<source lang="c">sd_context_part* get_sd_context_part_validate_sd(int sd_ctx_index);</source><br />
<br />
=== get_sd_context_part_validate_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6a8235fc<br />
|}<br />
<br />
<source lang="c">sd_context_part* get_sd_context_part_validate_sdio(int sd_ctx_index);</source><br />
<br />
=== initialize_mmc_device ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x22c82e79<br />
|}<br />
<br />
this function only initializes devices with sd_ctx_index 0 and 1 and returns 0x80320013 on any other sd_ctx_index<br />
<br />
it is confirmed that this function sends sequence of commands that correspond to MMC initialization protocol<br />
<br />
<source lang="c">int initialize_mmc_device(SceSdifDevice dev, sd_context_part** result);</source><br />
<br />
=== wlan_bt_acquiredev ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3428884d<br />
|}<br />
<br />
Called in initialization sequence. <br />
<br />
<source lang="c">int wlan_bt_acquiredev(wlan_context* wlan_ctx);</source><br />
<br />
=== wlan_bt_release ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xe80293ef<br />
|}<br />
<br />
Called in failures. Assumed to be release of sdio device.<br />
<br />
<source lang="c">int wlan_bt_release(wlan_context* wlan_ctx);</source><br />
<br />
=== sceSdioReadForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xD0F78D9B<br />
|}<br />
<br />
Reads from Wlan/BT SDIO device.<br />
<br />
Example from [[SceWlanBt]]:<br />
<source lang="C">ret = sceSdioReadForDriver(wlan_ctx, 0x5C, 1, &g_card_rev, 1);</source><br />
<br />
<source lang="c"><br />
// type: 1 for register access, 2 for data access<br />
int sceSdioReadForDriver(wlan_context* wlan_ctx, int reg, int count, void* dst, int type);<br />
</source><br />
<br />
=== sceSdioWriteForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3C4CDC8B<br />
|}<br />
<br />
Writes from wlan sdio device.<br />
<br />
Type variable seems to define which access to use. 1 is for register access, 2 is for data access. <br />
<br />
<source lang="c">int sceSdioWriteForDriver(wlan_context* wlan_ctx, int reg, int count, void *src, int type);</source><br />
<br />
=== sceSdioSetBlockLenForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x733BC373<br />
|}<br />
<br />
<source lang="c">int sceSdioSetBlockLenForDriver(wlan_context* wlan_ctx, int num);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xdece963b<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(sd_context_part* ctx, int num0, int num1, void* unk2);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x5D65E66B<br />
|}<br />
<br />
<source lang="c"><br />
// cond: wakeup condition as in scePowerSetWakeupConditionForDriver<br />
int wlan_bt_cmd52_sdio(sd_context_part* ctx, int cond, SceBool num1, SceUInt32* pOut);<br />
</source><br />
<br />
=== sceSdioChangeBusSpeedForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xBC45C83D<br />
|}<br />
<br />
<source lang="c">int sceSdioChangeBusSpeedForDriver(sd_context_part* ctx, int num);</source><br />
<br />
=== wlan_bt_initialize_custom_context2 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xAABAA0F0<br />
|}<br />
<br />
this function can send these commands: cmd3, cmd52_sdio, cmd0, cmd5_sdio, cmd55, acmd41, cmd7, cmd8<br />
<br />
this function uses array of 2 custom contexts.<br />
<br />
this function can either set device type index to 3 and use custom context for initialization.<br />
<br />
or it can use preinitialization (cmd0, cmd8, cmd5_sdio, cmd55, acmd41) and then check that device type index is 3.<br />
<br />
if device type index is not 3 then 0x80320017 error is returned.<br />
<br />
<source lang="c">int wlan_bt_initialize_custom_context2(int sd_ctx_index, sd_context_part** ctx);</source><br />
<br />
=== wlan_bt_bulk_transfer ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x855C95E1<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
This function is used in aggregated frame transmit when more than one packet is being transmitted over Wlan. <br />
<br />
<source lang="c">int wlan_bt_bulk_transfer(wlan_context* wlan_ctx, bulk_transfer* b, void* unk1);</source><br />
<br />
=== wlan_bt_get_wlan_context ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0c66e36f<br />
|}<br />
<br />
Get wlan_context for sdio device. Vidpid is an array with Marvell Vid and Wlan/Bt pid.<br />
<br />
For Wlan: vidpid = [0x2df, 0x911a]. For Bt: vidpid = [0x2df, 0x9119].<br />
<br />
<source lang="c">int wlan_bt_get_wlan_context(sd_context_part* ctx, int vidpid[2]);</source><br />
<br />
=== sceSdifGoStandbyStateForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xAB0222F2<br />
|}<br />
<br />
Temp name was wlan_bt_cmd7.<br />
<br />
<source lang="c">int sceSdifGoStandbyStateForDriver(sd_context_part* ctx);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x55baeb2d<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(wlan_context* wlan_ctx);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xfe6f3e7b<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(wlan_context* wlan_ctx);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xf1a24edd<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(wlan_context* wlan_ctx);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x1847b18c<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(wlan_context* wlan_ctx);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xd3c1e2b6<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(wlan_context* wlan_ctx, int unk0, int unk1, int unk2);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x5bac6e70<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(wlan_context* wlan_ctx, int unk0, int unk1, int unk2);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x01e8eb6c<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(sd_context_part* ctx, char* output, int destLength_100);</source><br />
<br />
=== wlan_bt_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x763f1075<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd52_sdio(sd_context_part* ctx);</source><br />
<br />
=== wlan_bt_initialize_custom_context1 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x53962379<br />
|}<br />
<br />
This function is just a wrapper for [[SceSdif#wlan_bt_initialize_custom_context2|wlan_bt_initialize_custom_context2]].<br />
<br />
<source lang="c">int wlan_bt_initialize_custom_context1(int sd_ctx_index);</source><br />
<br />
=== wlan_bt_cmd0 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3b6ab29e<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd0(wlan_context* wlan_ctx, void* unk0, int* result);</source><br />
<br />
=== wlan_bt_cmd0_cmd52_sdio ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x180e7395<br />
|}<br />
<br />
<source lang="c">int wlan_bt_cmd0_cmd52_sdio(wlan_context* wlan_ctx, char* output, int destLength_100);</source><br />
<br />
=== wlan_bt ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x0f157f49<br />
|}<br />
<br />
<source lang="c">int wlan_bt(wlan_context* wlan_ctx);</source><br />
<br />
=== wlan_bt ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x849e3216<br />
|}<br />
<br />
<source lang="c">int wlan_bt(wlan_context* wlan_ctx);</source><br />
<br />
=== wlan_bt ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xb05eff68<br />
|}<br />
<br />
<source lang="c">int wlan_bt(wlan_context *wlan_ctx, int unk0);</source><br />
<br />
=== sceMmcReadSectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x6F8D529B<br />
|}<br />
<br />
<source lang="c">int sceMmcReadSectorForDriver(sd_context_part* ctx, int sector, char* buffer, int nSectors);</source><br />
<br />
=== sdstor_read_sector_sd ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xb9593652<br />
|}<br />
<br />
If <code>nSectors</code> is <code>1</code>, then issues command <code>0x11</code> (<code>READ_SINGLE_BLOCK</code>), and otherwise, command <code>0x12</code> (<code>READ_MULTIPLE_BLOCK</code>).<br />
<br />
<source lang="c">int sdstor_read_sector_sd(sd_context_part* ctx, int sector, char* buffer, int nSectors);</source><br />
<br />
=== sceMmcWriteSectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x175543D2<br />
|}<br />
<br />
<source lang="c">int sceMmcWriteSectorForDriver(sd_context_part* ctx, int sector, char* buffer, int nSectors);</source><br />
<br />
=== sceSdWriteSectorForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0xE0781171<br />
|}<br />
<br />
<source lang="c">int sceSdWriteSectorForDriver(sd_context_part* ctx, int sector, char* buffer, int nSectors);</source><br />
<br />
=== sddev_get_sd_cidForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.20 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x23A4EF01<br />
|}<br />
<br />
This is the name of the subroutine. Temp name was sdstor_get_cidForDriver, sceSdifGetCIDForDriver.<br />
<br />
<source lang="c"><br />
//size of cid is 0x10<br />
int sddev_get_sd_cidForDriver(sd_context_part* ctx, char* cid);<br />
</source><br />
<br />
=== sdstor_cmd0_cmd13 ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x6cc8e28d<br />
|}<br />
<br />
<source lang="c">int sdstor_cmd0_cmd13(int sd_ctx_index);</source><br />
<br />
=== sceSdEraseForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x35ba9df8<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sdstor_cmd32_cmd33_cmd38_sdio.<br />
<br />
Used by [[SceSdstor]].<br />
<br />
<source lang="C">int sceSdEraseForDriver(SceSdifDevice dev, SceUID callback_id);</source><br />
<br />
=== initialize_sd_device ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xC1271539<br />
|}<br />
<br />
This function sends sequence of commands that correspond to SD initialization protocol. These commands include: cmd0, cmd8, cmd5_sdio, cmd2, cmd3, cmd6, cmd9, cmd7, cmd16. Some paired commands are: (cmd55, acmd41), (cmd55, acmd42), (cmd55, acmd13), (cmd55, acmd51).<br />
* it does not check sd_ctx_index argument.<br />
* it uses array of 3 custom contexts instead of sd_context_part structures.<br />
* it checks device type index after preinitialization (cmd0, cmd8, cmd5_sdio, cmd55, acmd41)<br />
* it only initializes device with device type index 2. otherwise 0x80320017 error is returned.<br />
<br />
<source lang="c">int initialize_sd_device(SceSdifDevice dev, int* result);</source><br />
<br />
=== sceMmcHasWriteProtectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60-3.65 || 0x995748EA<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sdstor_cmd6_cmd30, sendWriteProtectStatusForDriver.<br />
<br />
<source lang="c">int sceMmcHasWriteProtectForDriver(sd_context_part *input, SceUInt32 posSector, SceUInt32 nSector, SceBool *result);</source><br />
<br />
=== sceSdHasWriteProtectForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xE091BA2E<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="c">int sceSdHasWriteProtectForDriver(sd_context_part *input, SceUInt32 posSector, SceUInt32 nSector, SceBool *result);</source><br />
<br />
=== sceMmcWriteSectorInternalForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x60642F49<br />
|}<br />
<br />
Temp name was sceMmcWriteSector2ForDriver.<br />
<br />
<source lang="c">int sceMmcWriteSectorInternalForDriver(sd_context_part *ctx, int unk0, int unk1);</source><br />
<br />
=== sceSdWriteSectorInternalForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.60 || 0x0203ECDC<br />
|}<br />
<br />
Temp name was sceSdWriteSector2ForDriver.<br />
<br />
<source lang="c">int sceSdWriteSectorInternalForDriver(sd_context_part *ctx, int unk0, int unk1);</source><br />
<br />
=== sdif_cmd0_cmd13===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x53518827<br />
|}<br />
<br />
<source lang="c">int sdif_cmd0_cmd13(sd_context_global *ctx, int *result);</source><br />
<br />
=== reset_to_low_speed_mode ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x475d8e45<br />
|}<br />
<br />
this function sends CMD0 reset command to the card<br />
<br />
then enables (Internal Clock Enable) bit<br />
<br />
then waits til clock is stable (Internal Clock Stable)<br />
<br />
then enables (SD Clock Enable) bit for sdio device<br />
<br />
then resets (High Speed Enable) bit<br />
<br />
then resets (Data Transfer Width) bit<br />
<br />
then resets (Extended Data Transfer Width) bit<br />
<br />
<source lang="c">int reset_to_low_speed_mode(int sd_ctx_index);</source><br />
<br />
=== get_host_info ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x3df7e207<br />
|}<br />
<br />
<source lang="c">int get_host_info(int sd_ctx_index, host_info *info);</source><br />
<br />
=== get_device_info ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0x76d2b87b<br />
|}<br />
<br />
<source lang="c">int get_device_info(int sd_ctx_index, device_info* result);</source><br />
<br />
=== sdif_cmd_exec===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xb83f7518<br />
|}<br />
<br />
<source lang="c">int sdif_cmd_exec(int sd_ctx_index, cmd_info* info);</source><br />
<br />
=== set_default_sector_size_mmc===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xb32776c7<br />
|}<br />
<br />
this function internally also executes CMD16 which sets BLOCKLEN<br />
<br />
<source lang="c"><br />
// default_sector_size should be equal to 0x200<br />
int set_default_sector_size_mmc(sd_context_part* ctx, int default_sector_size);<br />
</source><br />
<br />
=== sdif_cmd0_cmd16===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 3.60 || 0xaf702fe7<br />
|}<br />
<br />
<source lang="c">int sdif_cmd0_cmd16(sd_context_part* ctx, int num_200);</source><br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Robin&diff=21072
Robin
2024-01-17T22:30:56Z
<p>CelesteBlue: </p>
<hr />
<div>Robin is the condename of the Wireless LAN and Bluetooth card contained in the PS Vita.<br />
<br />
= Hardware =<br />
<br />
Marvell 88W878S-BKB2 is the chip used in the PS Vita OLED (PCH-1XXX) to support Wi-Fi/Bluetooth. It has a Marvell SD8787 based wifi module. It might share some similarities with Marvell Avastar 88W8787. It is connected to ?[[Kermit]] or [[Ernie]]? through SDIO interface.<br />
<br />
= Firmware =<br />
<br />
See [[SceWlanBt]], [[SceWlanBtRobinImageAx]] and [[SceSdif]].<br />
<br />
An open-source linux driver for Marvell SD8787 is named mwifiex and can be found at<br />
[https://github.com/boundarydevices/linux/tree/boundary-imx_3.0.35_4.0.0/drivers/net/wireless/mwifiex].<br />
<br />
* Robin firmware uses ARMv5TE processor architecture.<br />
* Robin firmware image is stored in wlanbt_robin_img_ax.skprx starting at offset 305 on System Software version 3.600.011.<br />
<br />
= Resources =<br />
<br />
* Marvell 88W8787 Overview & doc: [[File:Marvell_Avastar_88W8787_SoC.pdf]]<br />
* Marvell 88W8787 Engineering specs: [[File:Marvell_88W8787_engineering_specifications_—_Foxconn_for_Sony.pdf]]<br />
* Linux drivers: https://wikidevi.wi-cat.ru/Mwifiex#Drivers<br />
* Chromium OS source: https://chromium.googlesource.com/chromiumos/third_party/marvell/+/854d5b47fe714bbf42dfb495b9af5f3893ca5530<br />
<br />
= Speed =<br />
<br />
Marvell SD8787 supports up to 150 Mbps for IEEE 802.11n, so the speed of PS Vita's 88W878S-BKB2 is probably severely nerfed. It is not sure yet whether the speed limitation comes from the OS through some commands, or the firmware itself.<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Robin&diff=21071
Robin
2024-01-17T22:30:14Z
<p>CelesteBlue: </p>
<hr />
<div>Robin is the condename of the Wireless LAN and Bluetooth card contained in the PS Vita.<br />
<br />
= Hardware =<br />
<br />
Marvell 88W878S-BKB2 is the chip used in the PS Vita OLED (PCH-1XXX) to support Wi-Fi/Bluetooth. It has a Marvell SD8787 based wifi module. It might share some similarities with Marvell Avastar 88W8787. It is connected to ?[[Kermit]] or [[Ernie]]? through SDIO interface.<br />
<br />
= Firmware =<br />
<br />
See [[SceWlanBt]], [[SceWlanBtRobinImageAx]] and SDIF part of [[SceSdio]].<br />
<br />
An open-source linux driver for Marvell SD8787 is named mwifiex and can be found at<br />
[https://github.com/boundarydevices/linux/tree/boundary-imx_3.0.35_4.0.0/drivers/net/wireless/mwifiex].<br />
<br />
* Robin firmware uses ARMv5TE processor architecture.<br />
* Robin firmware image is stored in wlanbt_robin_img_ax.skprx starting at offset 305 on System Software version 3.600.011.<br />
<br />
= Resources =<br />
<br />
* Marvell 88W8787 Overview & doc: [[File:Marvell_Avastar_88W8787_SoC.pdf]]<br />
* Marvell 88W8787 Engineering specs: [[File:Marvell_88W8787_engineering_specifications_—_Foxconn_for_Sony.pdf]]<br />
* Linux drivers: https://wikidevi.wi-cat.ru/Mwifiex#Drivers<br />
* Chromium OS source: https://chromium.googlesource.com/chromiumos/third_party/marvell/+/854d5b47fe714bbf42dfb495b9af5f3893ca5530<br />
<br />
= Speed =<br />
<br />
Marvell SD8787 supports up to 150 Mbps for IEEE 802.11n, so the speed of PS Vita's 88W878S-BKB2 is probably severely nerfed. It is not sure yet whether the speed limitation comes from the OS through some commands, or the firmware itself.<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSblFwLoader&diff=21070
SceSblFwLoader
2024-01-17T22:18:37Z
<p>CelesteBlue: /* Usage */</p>
<hr />
<div>SceSblFwLoader is a PS Vita kernel module in charge of loading specific firmware images such as PSPEmu Initial Program Loader contained in [[SceSblPcbcBin]] (PSP Compatibility Boot Code), PSPEmu Flash memory files contained in [[SceSblPcffBin]] (PSP Compatibility Flash Files) as well as Wireless LAN and Bluetooth ([[Robin]]) driver image contained in [[SceWlanBtRobinImageAx]].<br />
<br />
This module has been removed and its content moved to [[SceSblPostSsMgr]] since System Software version 1.800.071.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.990.000-1.692.000 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.990.000-1.692.000 || [[SceSblFwLoader#SceSblFwLoaderForDriver|SceSblFwLoaderForDriver]] || Non-secure || Kernel || 0x6FE424E4<br />
|-<br />
| 1.800.071-3.740.011 || [[SceSblFwLoader#SceSblFwLoaderForDriver|SceSblFwLoaderForDriver]] || Non-secure || Kernel || not present. Moved to [[SceSblPostSsMgr#SceSblFwLoaderForDriver]].<br />
|}<br />
<br />
== SceSblFwLoaderForDriver ==<br />
<br />
This library was moved to [[SceSblPostSsMgr#SceSblFwLoaderForDriver]] since System Software version 1.800.071.<br />
<br />
=== sceSblFwLoaderLoadForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x91C73A54<br />
|}<br />
<br />
Loads firmware into the buffer at virtual address "pVA". Actual loaded size is returned in "puiLoadedSize".<br />
<br />
<source lang="c"><br />
/**<br />
* Loads firmware in the provided buffer.<br />
*<br />
* @param[in] unk_on - unknown. Maybe a boolean. Example: 1.<br />
* @param[out] pVA - destination buffer address<br />
* @param[in] maxSize - destnation buffer size<br />
* @param[out] puiLoadedSize - read byte<br />
*<br />
* @return 0 on success, < 0 on error<br />
*/<br />
int sceSblFwLoaderLoadForDriver(int unk_one, void *pVA, SceSize maxSize, SceSize *puiLoadedSize);<br />
</source><br />
<br />
=== sceSblFwLoaderLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xA6278D27<br />
|}<br />
<br />
Inline calls <code>sceSblFwLoaderSetPath</code>.<br />
<br />
Locks the firmware loader and sets path to firmware file to work with.<br />
<br />
<source lang="c">SceInt32 sceSblFwLoaderLockForDriver(const char *path, int unk_zero);</source><br />
<br />
=== sceSblFwLoaderUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xBB59FC7A<br />
|}<br />
<br />
<source lang="c">int sceSblFwLoaderUnlockForDriver(void);</source><br />
<br />
== Usage ==<br />
<br />
=== Loading Robin firmware image ===<br />
<br />
The following code is used in [[SceWlanBt]] on System Software version 0.996.090.<br />
<br />
<source lang="C"><br />
ret = sceSblFwLoaderLockForDriver("os0:kd/wlanbt_robin_img_ax.skprx");<br />
if (ret < 0) goto fail;<br />
ret = sceSblFwLoaderLoadForDriver(1, 0, 0x80000, &g_fwLoadedSize);<br />
if (ret < 0) {<br />
sceSblFwLoaderUnlockForDriver();<br />
goto fail;<br />
}<br />
ret = sceSblFwLoaderUnlockForDriver();<br />
if (ret < 0) goto fail;<br />
g_isWlanbtRobinImgAxLoaded = 1;<br />
</source><br />
<br />
=== Loading PSPEmu firmware images ===<br />
<br />
See [[SceCompat#sceCompatPrepareLoad]], [[SceCompat#sceCompatInit]] and [[SceCompat#sceCompatInitEx]] for PCBC and PCFF loading.<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSblPcbcBin&diff=21069
SceSblPcbcBin
2024-01-17T22:15:31Z
<p>CelesteBlue: </p>
<hr />
<div>SceSblPcbcBin is a kernel module containing the PSP Compatibility Flash Files i.e. PSPEmu Flash memory files.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 3.60 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
This module does not export any library except NONAME library.<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSblFwLoader&diff=21068
SceSblFwLoader
2024-01-17T22:14:50Z
<p>CelesteBlue: </p>
<hr />
<div>SceSblFwLoader is a PS Vita kernel module in charge of loading specific firmware images such as PSPEmu Initial Program Loader contained in [[SceSblPcbcBin]] (PSP Compatibility Boot Code), PSPEmu Flash memory files contained in [[SceSblPcffBin]] (PSP Compatibility Flash Files) as well as Wireless LAN and Bluetooth ([[Robin]]) driver image contained in [[SceWlanBtRobinImageAx]].<br />
<br />
This module has been removed and its content moved to [[SceSblPostSsMgr]] since System Software version 1.800.071.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.990.000-1.692.000 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.990.000-1.692.000 || [[SceSblFwLoader#SceSblFwLoaderForDriver|SceSblFwLoaderForDriver]] || Non-secure || Kernel || 0x6FE424E4<br />
|-<br />
| 1.800.071-3.740.011 || [[SceSblFwLoader#SceSblFwLoaderForDriver|SceSblFwLoaderForDriver]] || Non-secure || Kernel || not present. Moved to [[SceSblPostSsMgr#SceSblFwLoaderForDriver]].<br />
|}<br />
<br />
== SceSblFwLoaderForDriver ==<br />
<br />
This library was moved to [[SceSblPostSsMgr#SceSblFwLoaderForDriver]] since System Software version 1.800.071.<br />
<br />
=== sceSblFwLoaderLoadForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0x91C73A54<br />
|}<br />
<br />
Loads firmware into the buffer at virtual address "pVA". Actual loaded size is returned in "puiLoadedSize".<br />
<br />
<source lang="c"><br />
/**<br />
* Loads firmware in the provided buffer.<br />
*<br />
* @param[in] unk_on - unknown. Maybe a boolean. Example: 1.<br />
* @param[out] pVA - destination buffer address<br />
* @param[in] maxSize - destnation buffer size<br />
* @param[out] puiLoadedSize - read byte<br />
*<br />
* @return 0 on success, < 0 on error<br />
*/<br />
int sceSblFwLoaderLoadForDriver(int unk_one, void *pVA, SceSize maxSize, SceSize *puiLoadedSize);<br />
</source><br />
<br />
=== sceSblFwLoaderLockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xA6278D27<br />
|}<br />
<br />
Inline calls <code>sceSblFwLoaderSetPath</code>.<br />
<br />
Locks the firmware loader and sets path to firmware file to work with.<br />
<br />
<source lang="c">SceInt32 sceSblFwLoaderLockForDriver(const char *path, int unk_zero);</source><br />
<br />
=== sceSblFwLoaderUnlockForDriver ===<br />
{| class="wikitable"<br />
|-<br />
! Version !! NID<br />
|-<br />
| 0.990-3.740.011 || 0xBB59FC7A<br />
|}<br />
<br />
<source lang="c">int sceSblFwLoaderUnlockForDriver(void);</source><br />
<br />
== Usage ==<br />
<br />
=== Loading WlanBt Robin Image ===<br />
<br />
The following code is used in [[SceWlanBt]] on System Software version 0.996.090.<br />
<br />
<source lang="C"><br />
ret = sceSblFwLoaderLockForDriver("os0:kd/wlanbt_robin_img_ax.skprx");<br />
if (ret < 0) goto fail;<br />
ret = sceSblFwLoaderLoadForDriver(1, 0, 0x80000, &g_fwLoadedSize);<br />
if (ret < 0) {<br />
sceSblFwLoaderUnlockForDriver();<br />
goto fail;<br />
}<br />
ret = sceSblFwLoaderUnlockForDriver();<br />
if (ret < 0) goto fail;<br />
g_isWlanbtRobinImgAxLoaded = 1;<br />
</source><br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSblPcffBin&diff=21067
SceSblPcffBin
2024-01-17T22:12:46Z
<p>CelesteBlue: </p>
<hr />
<div>SceSblPcffBin is a kernel module containing the PSP Compatibility Boot Code i.e. PSPEmu Initial Program Loader.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 3.60 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
This module does not export any library except NONAME library.<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSblPcffBin&diff=21066
SceSblPcffBin
2024-01-17T22:11:44Z
<p>CelesteBlue: Created page with "SceSblPcffBin is a kernel module containing the PSP Compatibility Boot Code i.e. PSPEmu Initial Program Loader."</p>
<hr />
<div>SceSblPcffBin is a kernel module containing the PSP Compatibility Boot Code i.e. PSPEmu Initial Program Loader.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Robin&diff=21065
Robin
2024-01-17T21:56:44Z
<p>CelesteBlue: </p>
<hr />
<div>Robin is the condename of the Wireless LAN and Bluetooth card contained in the PS Vita.<br />
<br />
= Hardware =<br />
<br />
Marvell 88W878S-BKB2 is the chip used in the PS Vita OLED (PCH-1XXX) to support Wi-Fi/Bluetooth. It has a Marvell SD8787 based wifi module. It might share some similarities with Marvell Avastar 88W8787. It is connected to ?[[Kermit]] or [[Ernie]]? through SDIO interface.<br />
<br />
= Firmware =<br />
<br />
See [[SceWlanBt]], [[SceWlanBtRobinImageAx]] and [[SceSdio]].<br />
<br />
An open-source linux driver for Marvell SD8787 is named mwifiex and can be found at<br />
[https://github.com/boundarydevices/linux/tree/boundary-imx_3.0.35_4.0.0/drivers/net/wireless/mwifiex].<br />
<br />
* Robin firmware uses ARMv5TE processor architecture.<br />
* Robin firmware image is stored in wlanbt_robin_img_ax.skprx starting at offset 305 on System Software version 3.600.011.<br />
<br />
= Resources =<br />
<br />
* Marvell 88W8787 Overview & doc: [[File:Marvell_Avastar_88W8787_SoC.pdf]]<br />
* Marvell 88W8787 Engineering specs: [[File:Marvell_88W8787_engineering_specifications_—_Foxconn_for_Sony.pdf]]<br />
* Linux drivers: https://wikidevi.wi-cat.ru/Mwifiex#Drivers<br />
* Chromium OS source: https://chromium.googlesource.com/chromiumos/third_party/marvell/+/854d5b47fe714bbf42dfb495b9af5f3893ca5530<br />
<br />
= Speed =<br />
<br />
Marvell SD8787 supports up to 150 Mbps for IEEE 802.11n, so the speed of PS Vita's 88W878S-BKB2 is probably severely nerfed. It is not sure yet whether the speed limitation comes from the OS through some commands, or the firmware itself.<br />
<br />
[[Category:Devices]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Marvell_88W878S-BKB2&diff=21064
Marvell 88W878S-BKB2
2024-01-17T21:50:10Z
<p>CelesteBlue: CelesteBlue moved page Marvell 88W878S-BKB2 to Robin</p>
<hr />
<div>#REDIRECT [[Robin]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Robin&diff=21063
Robin
2024-01-17T21:50:10Z
<p>CelesteBlue: CelesteBlue moved page Marvell 88W878S-BKB2 to Robin</p>
<hr />
<div>Marvell 88W878S-BKB2 is the chip used in the PS Vita OLED (PCH-1XXX) to support Wi-Fi/Bluetooth.<br />
<br />
== Resources ==<br />
<br />
* Marvell 88W8787 Overview & doc: [[File:Marvell_Avastar_88W8787_SoC.pdf]]<br />
* Marvell 88W8787 Engineering specs: [[File:Marvell_88W8787_engineering_specifications_—_Foxconn_for_Sony.pdf]]<br />
* Linux drivers: https://wikidevi.wi-cat.ru/Mwifiex#Drivers<br />
* Chromium OS source: https://chromium.googlesource.com/chromiumos/third_party/marvell/+/854d5b47fe714bbf42dfb495b9af5f3893ca5530<br />
<br />
== Firmware ==<br />
<br />
* ARMv5TE<br />
* Blob in wlanbt_robin_img_ax.skprx starting at offset 305 (3.60).<br />
<br />
== Speed ==<br />
<br />
SD8787 supports up to 150 Mbps for IEEE 802.11n, so the speed of Vita's 88W878S-BKB2 is probably severely nerfed. Not sure yet whether it comes from the OS through some commands, or the FW itself.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=IdStorage&diff=21062
IdStorage
2024-01-17T21:40:35Z
<p>CelesteBlue: /* 0x111 - WlanMacAddress */</p>
<hr />
<div>See also [https://playstationdev.wiki/pspdevwiki/index.php?title=IDStorage].<br />
<br />
= Description =<br />
<br />
Region of the PSVita eMMC where perconsole info is stored.<br />
<br />
= Location =<br />
<br />
Idstorage data is stored at first raw partition (code 0x1). Use [https://github.com/TeamMolecule/sceutils/blob/master/extract_idstorage.py] to extract.<br />
<br />
= Structure =<br />
<br />
The IdStorage partition is divided in two parts: the mapping table and the leaves.<br />
<br />
== Mapping table ==<br />
<br />
The mapping table is located at the start of the partition. It's an array of 16-bit leaf IDs that serves as a leaf ID->index mapping table. The mapping table must be at least one-sector wide but may be bigger.<br />
<br />
There are two leaf IDs reserved for usage in the mapping table: all entries corresponding to the mapping table (i.e. the first <code>M</code> entries for an </code>M</code> sectors sized table) must hold the value <code>0xFFF5</code>, and all unallocated leaves hold the value <code>0xFFFF</code>.<br />
<br />
To lookup a leaf index based on its ID, use the following algorithm:<br />
<source lang="C"><br />
#define M /* implementation defined */<br />
#define SECTOR_SIZE (512)<br />
<br />
#define NUM_TABLE_ITEMS ((M * SECTOR_SIZE) / sizeof(uint16_t))<br />
uint16_t g_mappingTable[NUM_TABLE_ITEMS];<br />
<br />
int leafIndexFromId(unsigned id) {<br />
if (id >= 0xFFF0)<br />
return /* ERROR: invalid leaf ID */;<br />
<br />
for (int i = 0; i < NUM_TABLE_ITEMS; i++) {<br />
if (g_mappingTable[i] == id)<br />
return i;<br />
}<br />
return /* ERROR: leaf ID is not in mapping table */;<br />
}<br />
</source><br />
<br />
== Leaves ==<br />
<br />
Leaves are sector-sized (512 bytes) areas in the IdStorage partition used to store arbitrary data. While the data stored may be smaller, a leaf always occupies one sector in the partition.<br />
<br />
To read a leaf's data, obtain the leaf index (this can be known directly, or obtained from a leaf ID using the previously mentioned algorithm) then read 512 bytes starting at offset <code>512 * leafIndex</code> in the IdStorage partition.<br />
<br />
== Limits ==<br />
<br />
The number of leaves that can be stored in an IdStorage partition is limited by three factors: the size of the partition, the size of the mapping table and the size of leaf IDs.<br />
<br />
* An <code>M</code> sectors wide mapping table can hold up to <code>255 * M</code> leaves<br />
** This is because a single-sector mapping table can reference <code>SECTOR_SIZE/sizeof(u16) - 1 = 255</code> leaves (the <code>- 1</code> is needed because a table consumes one entry for itself)<br />
* A <code>P</code> sectors wide partition can hold up to <code>P - M</code> leaves<br />
** This is because leaves are sector-sized, and the mapping table consumes <code>M</code> sectors<br />
* There are 65520 leaf IDs available<br />
** While an unsigned 16-bit variable can hold 65536 values, IDs superior or equal to 0xFFF0 are reserved and cannot be used<br />
<br />
From this, we can conclude that an IdStorage partition of <code>P</code> sectors with an <code>M</code> sectors mapping table can hold up to <code>min(255*M, P-M, 65520)</code> leaves. We can also deduce an IdStorage partition is optimally shaped (no space is non-allocatable) when <code>P = 256 * M</code>.<br />
<br />
On Vita, the IdStorage partition is 512KiB and 32 sectors are reserved for the indexing table (<code>P = 1024, M = 32</code>, a non-optimal choice), which means the console's partition can hold '''up to 992 IdStorage leaves'''.<br />
<br />
= Leaf content =<br />
<br />
In this section, the following conventions and terms are used:<br />
* Empty: area has all bits set to 1 (i.e., 0xFF)<br />
* Present / Not present: the leaf exists in IdStorage partition<br />
* The content of a leaf always starts at offset 0.<br />
* If leaf contents are smaller than 512 bytes, the unused parts are left empty.<br />
* Strings are padded with NUL bytes if the content is smaller than maximum size, but may be non-NUL terminated<br />
<br />
Leaves not listed in this section have not been found in any unit, and leaves listed in this section are not all found in every unit.<br />
<br />
The following information may not be valid for all pre-production units (DEM/CEM).<br />
<br />
== Idps certificates ==<br />
<br />
Leaves 0x000~0x07F are written to IdStorage during manufacturing by a function called '''<code>_writeIdpsCert</code>'''.<br />
<br />
Leaf 0x07E contains the signed SHA-256 digest of leaves 0x000~0x07D (signed using RSA-2048). The public key used for signature verification can be found in <code>factTest.self</code>.<br />
<br />
Leaf 0x07F is not covered by the signature but is flashed in <code>_writeIdpsCert</code> nonetheless.<br />
<br />
=== Empty leaves ===<br />
<br />
The following leaves have always been observed to only contain zeroes:<br />
* 0x008~0x01F<br />
* 0x028~0x03F<br />
* 0x050~0x07D<br />
* 0x7F<br />
<br />
=== 0x000~0x007 - SceIdStoragePspCertificates ===<br />
<br />
Identical across all units and duplicated in leaves 0x020 to 0x027.<br />
<br />
=== 0x040~0x047 - SceIdStoragePsp2Certificates ===<br />
<br />
Console-unique.<br />
<br />
=== 0x048~0x04F ===<br />
<br />
Console-unique. Maybe UMD certificates like in PSP IdStorage.<br />
<br />
=== 0x07E ===<br />
<br />
Console-unique.<br />
<br />
The RSA-2048 signature of the Idps certificates (2048 bits/256 bytes) is located at offset 0x60 of this leaf.<br />
<br />
Data contained between 0x0 and 0x5F is unknown, and data between 0x160 and 0x1FF is unused (always 00).<br />
<br />
== 0x80 - SMI ==<br />
<br />
Service / Manufacturing Information (SMI)<br />
<br />
Console-unique. Contains minimal firmware version (checked in [[Second Loader|<code>second_loader</code>]]).<br />
<br />
<source lang="c"><br />
struct SMILeaf {<br />
uint8_t magic[4]; //'SMI\0'<br />
uint32_t version; //1<br />
uint32_t min_fwv; //Minimal firmware version<br />
uint8_t unused[0x80 - 0xC];<br />
//Encrypted with per-console keys.<br />
//This is used to verify the leaf has not been modified.<br />
uint8_t encrypted_data[0x200 - 0x80];<br />
};<br />
</source><br />
<br />
== 0x100 ==<br />
<br />
Name may be <code>Idlog</code>.<br />
<br />
Console-unique. Two strings related to manufacturing.<br />
<br />
Both strings are 0x100 bytes wide; one starts at offset 0 and one at offset 0x100.<br />
<br />
The string at offset 0x100 is written at a different stage (end of manufacturing?) than the string at offset 0, so it is possible to find units with only first string written (e.g., a Dolphin CEM-3000 unit).<br />
<br />
== 0x102 ==<br />
<br />
Console-unique. Per-console factory/service product information.<br />
<br />
<source lang="c"><br />
typedef struct {<br />
u32 server_ip;<br />
u16 server_port;<br />
u8 netmask; //Number of '1' bits in netmask<br />
u8 unused;<br />
u32 client_ip;<br />
u32 defaultGW;<br />
} conn_param;<br />
<br />
struct Leaf0x102 {<br />
u32 unk0;<br />
u32 unk4;<br />
struct {<br />
u8 id;<br />
u8 state;<br />
} ProcessId[0x20];<br />
char gcpId[0x20];<br />
char productId[0x20];<br />
//The following fields indicate the number of X present in unit<br />
struct {<br />
u8 ComNum; //Com (3G module)<br />
u8 WlanNum; //Ethernet is also counted in here, despite field name<br />
u8 BtNum; //Bluetooth<br />
u8 BatteryNum;<br />
u8 HdmiNum;<br />
u8 CpNum; //Communication Processor<br />
struct { //Guessed field names<br />
u8 Front;<br />
u8 Back;<br />
} CameraNum;<br />
struct { //Guessed field names<br />
u8 Front;<br />
u8 Back;<br />
} TouchNum;<br />
u8 SixSenseNum; //Gyro<br />
u8 EMagNum; //Magnetometer / Compass<br />
u8 GpsNum;<br />
u8 AnaDevNum; //a.k.a. Analog Pad (AP) or Joystick<br />
u8 DisplayNum;<br />
u8 SimNum; //SIM slot<br />
} DeviceNum;<br />
u8 SimPackNum; //Prepaid SIM card<br />
u8 ComType;<br />
u8 unused_9A[14];<br />
u32 contentsVer; //spkgInfo.version from sceSblUsGetSpkgInfo(0x18)<br />
u8 unk_AC[4];<br />
u8 unk_B0;<br />
u8 unused_B1[0x7];<br />
u8 unk_B8;<br />
u8 unused_B9[3];<br />
conn_param conn_param_0; //For WLAN test?<br />
conn_param conn_param_1; //For Ethernet test?<br />
char ssid[0x20]; //SSID of AP used for WLAN test<br />
u8 test_bt_addr[6]; //Bluetooth MAC address for BT test<br />
u8 unused_106[2];<br />
char ImeiBarcode[32];<br />
char PartsNoBardcode[16];<br />
char Imsi[16];<br />
char IccId[20];<br />
u8 unused_15C[4];<br />
<br />
//Version of the software executed on the unit<br />
//during manufacturing. Each element of the array<br />
//corresponds to a different program.<br />
u32 softVer[3];<br />
u8 unused_16C[4];<br />
struct {<br />
char essid[12];<br />
u8 channel;<br />
} WlanTestApInfo;<br />
u8 unused_17D[3];<br />
u16 WlanRssi;<br />
u8 unused_182[6];<br />
<br />
//Obtained from sceSblUsGetSpkgInfo(0x1C), which<br />
//corresponds to preinstall data patch Spkg.<br />
//First 4 bytes = spkgInfo.version<br />
//Fifth byte = spkgInfo.status[1]<br />
u8 CustomThemeVersion[5];<br />
u8 unused_18D[3];<br />
<br />
//If set, clears itself at some point during<br />
//factTest and skips something<br />
u8 ConfigProcessJumpFlag;<br />
u8 unused_191[111];<br />
};<br />
</source><br />
<br />
== 0x103 ==<br />
<br />
Console-unique. Unit hardware information.<br />
<br />
{| class="wikitable" style="text-align:center"<br />
|-<br />
! Offset<br />
! Size<br />
! Name<br />
! Description<br />
|-<br />
| 0x000<br />
| 0x4<br />
| ErnieHwInfo<br />
| style="text-align:left;" | [[KBL_Param#Hardware_Info|Ernie (Syscon) Hardware Information]]<br />
|-<br />
| 0x004<br />
| 0x4<br />
| ErnieFwVersion<br />
| style="text-align:left;" | [[SceSyscon#sceSysconGetErnieVersionForDriver|Ernie Firmware Version]] (also called Ernie Verison)<br />
|-<br />
| 0x008<br />
| 0x4<br />
| ErnieDlVersion<br />
| style="text-align:left;" | [[SceSyscon#sceSysconGetErnieDLVersionForDriver|ErnieDlVersion]]<br />
|-<br />
| 0x00C<br />
| 0x2<br />
| ErnieCfgVersion<br />
| style="text-align:left;" | Can be obtained with [[SceSyscon#sceSysconGetConfigStorageInfoForDriver]].<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x00E<br />
| 0x12<br />
| colspan="2" | Empty<br />
|-<br />
| 0x020<br />
| 0x8<br />
| EmmcFwVersion<br />
| style="text-align:left;" | Vendor ID (1 byte), empty space (1 byte) and Device Version (6 bytes)<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x028<br />
| 0x8<br />
| colspan="2" | Empty<br />
|-<br />
| 0x030<br />
| 0x8<br />
| EmmcFwVersion2<br />
| style="text-align:left;" | Vendor ID (1 byte), Device Version (6 bytes) and an additional byte (for Samsung eMMC, 0 otherwise)<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x038<br />
| 0x8<br />
| colspan="2" | Empty<br />
|-<br />
| 0x040<br />
| 0x2<br />
| ElmoFWVer<br />
| style="text-align:left;" | [[SceSyscon#sceSysconGetElmoFwVersionForDriver|Elmo Firmware Version]]<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x042<br />
| 0x1E<br />
| colspan="2" | Empty<br />
|-<br />
| 0x060<br />
| 0x2<br />
| CookieFWVer<br />
| style="text-align:left;" | [[SceSyscon#sceSysconGetCookieFwVersionForDriver|Cookie Firmware Version]]<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x062<br />
| 0x1E<br />
| colspan="2" | Empty<br />
|-<br />
| 0x080<br />
| 0x2<br />
| BarkleyFwVersion<br />
| rowspan="2" style="text-align:left;" | [[SceSyscon#sceSysconMotionGetDeviceInfoForDriver|Motion Device]] Firmware Version/Hardware Information<br />
|-<br />
| 0x082<br />
| 0x2<br />
| BarkleyHwInfo<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x084<br />
| 0x1C<br />
| colspan="2" | Empty<br />
|-<br />
| 0x0A0<br />
| 0x2<br />
| AbbyHWVersion<br />
| rowspan="3" style="text-align:left;" | [[SceSyscon#sceSysconGetBatteryVersionForDriver|Abby HW/FW/DF Version]]<br />
|-<br />
| 0x0A2<br />
| 0x2<br />
| AbbyFWVersion<br />
|-<br />
| 0x0A4<br />
| 0x2<br />
| AbbyDFVersion<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x0A6<br />
| 0x02<br />
| colspan="2" | Empty<br />
|-<br />
| 0x0A8<br />
| 0x02<br />
| BatteryVoltageCalib<br />
| rowspan="2" style="text-align:left;" | Battery calibration data (for Abby)<br />
|-<br />
| 0x0AA<br />
| 0x02<br />
| BatteryCurrentCalib<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x0AC<br />
| 0x14<br />
| colspan="2" | Empty<br />
|-<br />
| 0x0C0<br />
| 0x8<br />
| TouchpanelFWVersion<br />
| style="text-align:left;" | [[SceSyscon#sceSysconGetTouchpanelDeviceInfoForDriver|Touchpanel Version info]] (4 <code>u16</code>s)<br />
|-<br />
| 0x0C8<br />
| 0x4<br />
| TouchpanelConfigVersion<br />
| style="text-align:left;" | 2 <code>u16</code>s<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x0CC<br />
| 0x4<br />
| colspan="2" | Empty<br />
|-<br />
| 0x0D0<br />
| 0x10<br />
| TouchpanelLotInfo<br />
| style="text-align:left;" | 8 bytes for each panel<br />
|-<br />
| 0x0E0<br />
| 0x4<br />
| WlanBtHWRevision<br />
| style="text-align:left;" | WLAN/Bluetooth Hardware Revision<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x0E4<br />
| 0x4<br />
| colspan="2" | Empty<br />
|-<br />
| 0x0E8<br />
| 0x6<br />
| WlanMacAddress<br />
| style="text-align:left;" | WLAN MAC Address<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x0EE<br />
| 0x2<br />
| colspan="2" | Empty<br />
|-<br />
| 0x0F0<br />
| 0x6<br />
| BtMacAddress<br />
| style="text-align:left;" | Bluetooth MAC Address (usually equal to WlanMacAddress + 1)<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x0F6<br />
| 0xA<br />
| colspan="2" | Empty<br />
|-<br />
| 0x100<br />
| 0x20<br />
| BatteryLotInfo<br />
| style="text-align:left;" | ASCII string<br />
|-<br />
| 0x120<br />
| 0x84<br />
| <br />
| style="text-align:left;" | An ASCII string containing a date.<br />
|-<br />
| 0x184<br />
| 0x10<br />
| OLEDLotInfo<br />
| style="text-align:left;" | ASCII string<br />
|-<br />
| 0x194<br />
| 0x10<br />
| <br />
| style="text-align:left;" | An ASCII string (usually starting with TDA).<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x1A4<br />
| 0x4<br />
| colspan="2" | Empty<br />
|-<br />
| 0x1A8<br />
| 0x20<br />
| LcdModLotInfo<br />
| style="text-align:left;" | ASCII string<br />
|- style="font-style:italic; font-family:serif !important;"<br />
| 0x1C8<br />
| 0x38<br />
| colspan="2" | Empty<br />
|}<br />
<br />
== 0x104 ==<br />
<br />
Console-unique. Test/diagnostic results.<br />
<br />
This leaf is only present if diagnostic software has been executed on the unit or some factory tests failed.<br />
<br />
== 0x110 - WlanRegion ==<br />
<br />
PS Vita IdStorage leaf 0x110 contains only 0x10 bytes of data. The first 3 bytes are the WlanRegion. The rest are FFed (unused).<br />
<br />
The following algorithm is used to derive WlanRegion from PsCode:<br />
<source lang="c"><br />
byte WlanRegion[3];<br />
<br />
switch(pscode.product_code) {<br />
case 0x100:<br />
case 0x101:<br />
case 0x102:<br />
case 0x104:<br />
case 0x10B:<br />
case 0x10F:<br />
case 0x110:<br />
case 0x111:<br />
WlanRegion[2] = 0;<br />
WlanRegion[1] = 7;<br />
break;<br />
case 0x103:<br />
case 0x106:<br />
case 0x108:<br />
case 0x10A:<br />
case 0x10D:<br />
case 0x10E:<br />
WlanRegion[2] = 0;<br />
WlanRegion[1] = 0x1F;<br />
break;<br />
case 0x105:<br />
case 0x107:<br />
case 0x109:<br />
case 0x10C:<br />
WlanRegion[2] = 1;<br />
WlanRegion[1] = 0x1F;<br />
break;<br />
default:<br />
goto error;<br />
}<br />
WlanRegion[0] = 0xFF;<br />
</source><br />
<br />
In Manufacturing Mode, WlanRegion is spoofed to <code>FF 1F 00</code>.<br />
<br />
== 0x111 - WlanMacAddress ==<br />
<br />
Console-unique. The MAC address of the Wireless LAN adapter (6 bytes).<br />
<br />
Example:<br />
* some PCH-1100: D4-4B-5E -> OUI belongs to Taiyo Yuden Co., Ltd. - a Japanese firm<br />
* some Blue PCH-1xxx / PCH-2000 : F8-2F-A8 -> OUIs belongs to Hon Hai Precision Ind. Co.,Ltd., also known as Foxconn<br />
* some PCH-2000 : 2C-33-7A / 70-77-81 / D4-6A-6A -> OUI belongs to Hon Hai Precision Ind. Co.,Ltd., also known as Foxconn<br />
<br />
== 0x112 - MtpSerial ==<br />
<br />
Console-unique.<br />
<br />
First 0x40 bytes are the USB Driver Device Id. It is the serial number reported via the MTP protocol (32 UTF-16 characters).<br />
<br />
It is used by [[SceEnumWakeUp]].<br />
<br />
== 0x113 ==<br />
<br />
Console-unique on 3G units and empty on all others. Contains informations related to the 3G modem.<br />
<br />
* 0x136-0x136: ComNum<br />
<br />
== 0x114 - DeviceLocation ==<br />
<br />
Identical for all consoles of a generation (one kind for Fat, one kind for Slim, empty on PSTV).<br />
<br />
Contains four <code>struct DeviceLocation</code>s describing the location of physical devices in the unit.<br />
<br />
<source lang="c><br />
struct DeviceLocation { //size is 0x10 bytes<br />
//0x00 - Front camera<br />
//0x01 - Back camera<br />
//0x10 - Accelerometer<br />
//0x11 - Gyro<br />
uint32_t type;<br />
int32_t x;<br />
int32_t y;<br />
int32_t z;<br />
};<br />
</source><br />
<br />
The structures are usually found in the following order: Cameras followed by Motion (Acc + Gyro).<br />
<br />
There is also an unknown int32 flag at offset 0x100.<br />
<br />
== 0x115 - ProductTypeInfo ==<br />
<br />
A string of 16 characters containing information about the product type. Followed by FFs.<br />
<br />
Leaf 0x115 is not present on PS Vita CEM-3000NE2 (dolphin). It is identical for all consoles "with the same SKU model". See [https://www.psdevwiki.com/vita/index.php/SKU_Models PS Vita SKU models].<br />
<br />
Example values:<br />
* <code>PDEL100000010000</code> (PDEL-1000)<br />
* <code>PCH01004ZAZ20000</code> (PCH-1004 - Call of Duty: Black Ops Declassified limited edition)<br />
* <code>PCH01100AA010002</code> (Crystal Black PCH-1100 - docomo carrier)<br />
* <code>PCH02000ZA120000</code> (PCH-2000 White)<br />
<br />
Decomposition: <code>FFFF NNNN PPPP xxx y</code><br />
* <code>FFFF-NNNN PPPP</code> is usually printed on the product's box and on the console's shell, although there can be small differences<br />
** <code>FFFF</code> = family (e.g., PCH, PDEL) padded with zeroes<br />
** <code>NNNN</code> = number (e.g., 1000, 1004, 1100)<br />
** <code>PPPP</code> = variant code (e.g., 0001, ZAZ2, AA01, ZA12)<br />
* <code>xxx</code> = padding (always "000")<br />
* <code>y</code> = Product target operator (carrier ID for 3G models - usually matches offset 0x88 of IdStorage leaf 0x113 on SIM-locked models).<br />
** 1: US operator<br />
** 2: JP operator<br />
** 3: EU generic<br />
** 4: Asia generic<br />
** 5: Canada operator<br />
** 6: Mexico generic<br />
<br />
== 0x116 - ColorVariation ==<br />
<br />
Used for wave color by SceShell if present. ([https://github.com/Princess-of-Sleeping/psp2wpp/blob/master/src/main.c#L441-L467 Patch example])<br />
<br />
<source lang="c"><br />
struct ColorVariation {<br />
uint8_t unk0;<br />
uint16_t unk1; //maybe just two uint8_t?<br />
uint8_t unk3;<br />
/* rest of the leaf is empty */<br />
};<br />
</source><br />
<br />
Example values:<br />
* Call of Duty: Black Ops Declassified limited edition PCH-1004: <code>{ 0x01, 0x0000, 0x00 }</code><br />
* Glacier White PCH-2000 / White PSTV: <code>{ 0x01, 0x000C, 0x00 }</code><br />
<br />
== 0x117 - TemperatureThreashold ==<br />
<br />
The typo in this leaf's name is present in SCE code.<br />
<br />
Contains 4 elements of 1 byte each, which are always all zeroes when the leaf is present.<br />
<br />
Sent to Syscon?<br />
<br />
== 0x118 - AudioParam ==<br />
<br />
1 byte. If set to 0 (or the leaf is absent?), AVLS is never forcefully enabled.<br />
<br />
Should be 0x0 except on units with PsCode Product Code 0x105 (Europe/East/Africa), 0x107 (Great Britain/United Kingdom) or 0x109 (Australia/New Zealand).<br />
<br />
== 0x119 - EtherMacAddress ==<br />
<br />
Console-unique. The MAC address of the Ethernet adapter (6 bytes).<br />
<br />
Empty or not present for non-PSTV units.<br />
<br />
== 0x11A - WebBrowserParam ==<br />
<br />
1 byte.<br />
<br />
Seen:<br />
0x02 on PCH200X, 0x11 on PSTV<br />
<br />
Should be 0x1 on Fat CEX/DEX, 0x2 on Slim, 0x11 on PSTV and 0x0 on all other units.<br />
<br />
== 0x11B - ShutterParam ==<br />
<br />
1 byte. When leaf is present and contains 0x01, the value returned by <code>sceAVConfigGetShutterVol()</code> changes from 30 to 26.<br />
<br />
Seen: 0x01 on PCH200X, 0x00 on PSTV.<br />
<br />
Should be 0x1 on Slim units and 0x0 on all others.<br />
<br />
== 0x11C - LedInfoParam ==<br />
<br />
1 byte.<br />
<br />
Seen: 0x01 on PCH200X, 0x00 on PSTV<br />
<br />
Should be 0x1 on Slim units and 0x0 on all others.</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=Codenames&diff=21061
Codenames
2024-01-17T21:36:17Z
<p>CelesteBlue: </p>
<hr />
<div>The PS Vita software and hardware is often given by SCE codenames. This page lists them grouped by theme.<br />
<br />
= Models =<br />
<br />
* Iris: PS Vita 1000 series<br />
* Ushiwaka: PS Vita 2000 series<br />
* Dolce: PS TV<br />
<br />
= Sesame Street =<br />
<br />
Whilst PSP codenames were inspired by the Star Trek universe, most PS Vita codenames make reference to Sesame Street characters. Kermit the Frog, arguably Jim Henson's most famous Muppet creation, was the star and host of The Muppet Show, and played a significant role on Sesame Street.<br />
<br />
* [[Kermit]]: SoC. SCE's temporary codename for Kermit was SoC. Toshiba chip.<br />
* [[Ernie]]: Syscon. SCE's temporary codename for Ernie was Syscon. On PSP it was codenamed Baryon as a reference to Star Trek. Renesas chip.<br />
* [[Grover]]: Communication Processor<br />
* [[Elmo]]: Power Management IC<br />
* [[Abby]]: Battery Fuel Gauge (System-Side Impedance Trackâ„¢ Fuel Gauge With Integrated LDO). SCE's temporary codename for Abby was Battery.<br />
* [[Cookie]]: USB Charge Management IC<br />
* [[Barkley]]: Motion sensor accelerometer IC (maybe only gyroscope part)<br />
* [[Robin]]: Wireless LAN and Bluetooth card<br />
* [[Zoe]]: 3G communication modem<br />
<br />
= Toshiba =<br />
<br />
* [[Venezia]]: Toshiba's codename for car camera's smart recognition chip. SCE's temporary codename for Venezia was CodecEngine.<br />
* VIP: Toshiba Venezia Image Processing<br />
* [[Cmep|Cry/Cmep]]: Toshiba MeP crypto processor</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSyscon&diff=21044
SceSyscon
2024-01-16T17:49:07Z
<p>CelesteBlue: </p>
<hr />
<div>SceSyscon is a kernel module in charge of interacting with the System Controller by executing commands.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.931.010-3.740.011 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.931.010-3.740.011 || [[SceSyscon#SceSysconForDriver|SceSysconForDriver]] || Non-secure || Kernel || 0x60A35F64<br />
|}<br />
<br />
== Types ==<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_ERROR_SYSCON_ERROR 0x80250000<br />
#define SCE_SYSCON_ERROR_INVALID_SIZE 0x80250001<br />
#define SCE_SYSCON_ERROR_INVALID_ARGUMENT 0x80250002<br />
#define SCE_SYSCON_ERROR_INVALID_POINTER 0x80250003<br />
#define SCE_SYSCON_ERROR_INVALID_STATUS 0x80250004<br />
#define SCE_SYSCON_ERROR_NOT_INTR_ALLOWED 0x80250005<br />
#define SCE_SYSCON_ERROR_TX_SIZE_TOO_LONG 0x80250006<br />
<br />
#define SCE_SYSCON_ERROR_ILLEGAL_SIZE 0x80250100<br />
#define SCE_SYSCON_ERROR_ILLEGAL_STATUS 0x80250101<br />
#define SCE_SYSCON_ERROR_NOEXEC 0x80250102<br />
#define SCE_SYSCON_ERROR_INVALID_FLAGS 0x80250105<br />
<br />
// Syscon error codes are gotten with 0x80250200 | rx[3], where rx is the data returned by Syscon<br />
<br />
typedef struct SceSysconPacket { // size is 0x80<br />
struct SceSysconPacket *next;<br />
SceUInt32 status; // Lower 16 bits contain flags<br />
SceUID semaId;<br />
SceUInt32 index; // Out: returns to which packet list the packet was inserted into<br />
SceUInt8 tx[32]; // tx[0..1] = cmd, tx[2] = size i.e. sizeof(actual_data)+1, rx[3..31] = actual_data<br />
SceUInt8 rx[32]; // rx[0..1] = cmd, rx[2] = size i.e. sizeof(actual_data)+2, rx[3] = error_code, rx[4..31] = actual_data<br />
void *tx_extra;<br />
void *rx_extra;<br />
SceSize rx_extra_size;<br />
SceUInt32 rx_offset;<br />
int (*callback)(SceSysconPacket *packet, void *argp);<br />
void *argp;<br />
SceUInt32 time;<br />
SceUInt32 unk[5];<br />
} SceSysconPacket;<br />
<br />
typedef enum SceSysconControl {<br />
SCE_SYSCON_CTRL_UP = 0x1,<br />
SCE_SYSCON_CTRL_RIGHT = 0x2,<br />
SCE_SYSCON_CTRL_DOWN = 0x4,<br />
SCE_SYSCON_CTRL_LEFT = 0x8,<br />
SCE_SYSCON_CTRL_TRIANGLE = 0x10,<br />
SCE_SYSCON_CTRL_CIRCLE = 0x20,<br />
SCE_SYSCON_CTRL_CROSS = 0x40,<br />
SCE_SYSCON_CTRL_SQUARE = 0x80,<br />
SCE_SYSCON_CTRL_SELECT = 0x100,<br />
SCE_SYSCON_CTRL_LTRIGGER = 0x200,<br />
SCE_SYSCON_CTRL_RTRIGGER = 0x400,<br />
SCE_SYSCON_CTRL_START = 0x800,<br />
SCE_SYSCON_CTRL_PSBUTTON = 0x1000,<br />
SCE_SYSCON_CTRL_POWER = 0x4000,<br />
SCE_SYSCON_CTRL_VOLUP = 0x10000,<br />
SCE_SYSCON_CTRL_VOLDOWN = 0x20000,<br />
SCE_SYSCON_CTRL_HEADPHONE = 0x8000000<br />
} SceSysconControl;<br />
</source><br />
<br />
Flags (passed to <code>sceSysconCmdExecForDriver</code>, etc), also lower bits of <code>status</code>:<br />
{| class="wikitable"<br />
! Flags !! Meaning<br />
|-<br />
| 0x1 || Some kind of priority that helps to select to which packet list the packet is inserted into.<br />
|-<br />
| 0x100 || Do not insert packet checksum (at <code>tx_buf[2 + len]</code>), where <code>len = tx_buf[2]</code>. And don't memset the rest of the buffer to -1 (<code>memset(tx_buf + len + 3, -1, 29 - len)</code>) if len < 29.<br />
|-<br />
| 0x400 || When set, use rx_extra to receive the data. rx_extra_size must be greater than 32.<br />
|-<br />
| 0x800 || When set, use tx_extra instead of tx for sending data. The size is contained in tx_extra[2] and must be smaller or equal to 253. When cleared: use tx and the size is contained in tx[2], which has to be smaller or equal 29.<br />
|}<br />
<br />
== SceSysconForDriver ==<br />
<br />
=== sceSysconErnieShutdownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x94AB13CC<br />
|}<br />
<br />
Calls Syscon command 0xC1.<br />
<br />
<source lang="C"><br />
#define ERNIE_SHUTDOWN_SHUTDOWN 0<br />
#define ERNIE_SHUTDOWN_REBOOT 1<br />
<br />
int sceSysconErnieShutdownForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconErnieResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x14B99945<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconPowerCtrlKermitResetForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=RESET and mode=0: <code>return sceSysconSetPowerModeForDriver(2, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieResetForDriver(void);</source><br />
<br />
=== sceSysconErnieHibernateForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4278E614<br />
|}<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=HIBERNATE and mode=0: <code>return sceSysconSetPowerModeForDriver(5, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieHibernateForDriver(void);</source><br />
<br />
=== sceSysconBatterySWResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x87DA378D<br />
|}<br />
<br />
If Syscon version <= 0x70503, it does nothing and returns error 0x8025023F.<br />
<br />
<source lang="C">int sceSysconBatterySWResetForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xF93CF833<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryFullCapacityForDriver.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(SceUInt32 *pCap);</source><br />
<br />
=== sceSysconGetBicTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000 || 0xECFA7242<br />
|-<br />
| 1.000.041-3.740.011 || not present. Renamed to sceSysconGetAbbyTempForDriver.<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replaced (just renaming) by [[#sceSysconGetAbbyTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetBicTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetAbbyTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present. Was named sceSysconGetBicTempForDriver.<br />
|-<br />
| 1.000.041-3.740.011 || 0xE1885F68<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replacement (just renaming) for [[#sceSysconGetBicTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetAbbyTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetBatteryCycleCountForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCD73079D<br />
|}<br />
<br />
Calls Syscon command 0x98C.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryCycleCountForDriver(SceUInt32 *pCount);</source><br />
<br />
=== sceSysconBatteryStartBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2CEF078E<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStartBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatteryStopBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4AE7852<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStopBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatterySetBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4F29744<br />
|}<br />
<br />
BL command (1 byte at most) must be contained in either unk_byte or pSrc.<br />
<br />
<source lang="C">int sceSysconBatterySetBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk_byte, void *pSrc, SceUInt8 size);</source><br />
<br />
=== sceSysconBatteryExecBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x74B2AB55<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryExecBLCommandForDriver(SceUInt16 ctx);</source><br />
<br />
=== sceSysconBatteryReadBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x448DAFF1<br />
|}<br />
<br />
<source lang="C"><br />
// size must be between 0 and 0x10<br />
int sceSysconBatteryReadBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk1, SceUInt8 unk2, void *pDst, SceUInt8 size);<br />
</source><br />
<br />
=== sceSysconGetManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4FEC564C<br />
|}<br />
<br />
<source lang="C">int sceSysconGetManualChargeModeForDriver(int *piMode);</source><br />
<br />
=== sceSysconCtrlManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xC6A2C9EF<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlManualChargeModeForDriver(int mode);</source><br />
<br />
=== sceSysconSetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B6A6F64<br />
|}<br />
<br />
Calls Syscon command 0x81.<br />
<br />
Sets current Syscon power on time in ticks of 0.5 second. The set value can be get with [[#sceSysconGetClockForDriver]].<br />
<br />
Used in [[SceRtc]]. Set to 0 just before setting Current Tick, to reset syscon power on time.<br />
<br />
<source lang="C">int sceSysconSetClockForDriver(SceUInt32 time);</source><br />
<br />
=== SceSysconForDriver_51164951 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x51164951<br />
|}<br />
<br />
Calls Syscon command 0x82. On Syscon version < 0x90907, 4 bytes are sent to Syscon, whilst on Syscon version >= 0x90907, 5 bytes are sent to Syscon.<br />
<br />
Sets an alarm tick. The set tick can be get using Syscon command 0x12 via [[#SceSysconForDriver_3168F3AF]].<br />
<br />
Used in [[SceRtc#sceRtcSetAlarmTickForDriver]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_51164951(void *tick);<br />
<br />
// FW 3.600.011-3.740.011<br />
// tick_low: seen value: 0xffffffff during Syscon Init<br />
// tick_hi: some 8-bit flag, seen value: 0 during Syscon Init<br />
int SceSysconForDriver_51164951(SceUint32 tick_low, SceUInt8 tick_hi);<br />
</source><br />
<br />
=== SceSysconForDriver_373ECF8A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x373ECF8A<br />
|}<br />
<br />
Calls Syscon command 0x83. Sends 3 bytes to Syscon. Used only if [[KBL Param#Hardware Info|Hardware Info]] indicates that the motherboard is not IRT-001 or IRT-002 or type 0x10 (maybe named IRS-001) and if console is not in manufacturing mode.<br />
<br />
<source lang="C">int SceSysconForDriver_373ECF8A(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_2659535C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x2659535C<br />
|}<br />
<br />
Calls Syscon command 0x84. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_2659535C(void);</source><br />
<br />
=== SceSysconForDriver_4295D497 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4295D497<br />
|}<br />
<br />
Calls Syscon command 0x85. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_4295D497(void);</source><br />
<br />
=== sceSysconGetLogInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x701535FC<br />
|}<br />
<br />
Calls Syscon command 0x86.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconLogInfo { // size is 8 on FW 3.600.011<br />
uint8_t unk_0[8];<br />
} SceSysconLogInfo;<br />
<br />
int sceSysconGetLogInfoForDriver(SceSysconLogInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLogStartForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E55CF5E<br />
|}<br />
<br />
Calls Syscon command 0x87. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int sceSysconLogStartForDriver(void);</source><br />
<br />
=== sceSysconLogReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x487D97F3<br />
|}<br />
<br />
Calls Syscon command 0x88.<br />
<br />
<source lang="C">int sceSysconLogReadDataForDriver(SceUInt16 offset, void *pData, SceSize size);</source><br />
<br />
=== sceSysconLogStartWaitingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x9C0B1E61<br />
|}<br />
<br />
Calls Syscon command 0x89.<br />
<br />
<source lang="C">int sceSysconLogStartWaitingForDriver(void);</source><br />
<br />
=== sceSysconCtrlUSBSupplyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7BFA95DA<br />
|}<br />
<br />
This function is used instead of [[#sceSysconCtrlChargeVBUSForDriver]] on PS Vita Slim.<br />
<br />
Calls Syscon command 0x8C8. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
Used in factTest module.<br />
<br />
<source lang="C">int sceSysconCtrlUSBSupplyForDriver(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_451C1662 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x451C1662<br />
|}<br />
<br />
Calls Syscon command 0x8C9. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_451C1662(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_79074DE4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x79074DE4<br />
|}<br />
<br />
Calls Syscon command 0x8CA. Sends 0 byte to Syscon. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_79074DE4(SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_7D25F6D2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7D25F6D2<br />
|}<br />
<br />
Calls Syscon command 0x8CB. Sends 1 byte to Syscon: id. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_7D25F6D2(SceUInt8 id, SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_D2ADABCA ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xD2ADABCA<br />
|}<br />
<br />
Calls Syscon command 0x8CC. Sends 2 bytes from Syscon: id, data.<br />
<br />
<source lang="C">int SceSysconForDriver_D2ADABCA(SceUInt8 id, SceUInt8 data);</source><br />
<br />
=== sceSysconGetTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3B354824<br />
|}<br />
<br />
Calls Syscon command 0x8CE. Gets 0x10 bytes from Syscon.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconTemperatureLog { // size is 0x10 bytes<br />
char log[16];<br />
} SceSysconTemperatureLog;<br />
<br />
int sceSysconGetTemperatureLogForDriver(SceSysconTemperatureLog *pLog);<br />
</source><br />
<br />
=== sceSysconClearTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3843D657<br />
|}<br />
<br />
Calls Syscon command 0x8CF. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int sceSysconClearTemperatureLogForDriver(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_F87679EE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 3.600.011-3.740.011 || 0xF87679EE<br />
|}<br />
<br />
Calls Syscon command 0x8D0. Sends 2 bytes to Syscon.<br />
<br />
Probably related to Syscon Temperature Log.<br />
<br />
<source lang="C">int SceSysconForDriver_F87679EE(SceUInt32 unk);</source><br />
<br />
=== sceSysconGetUsbDetStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xEF810687<br />
|}<br />
<br />
Calls Syscon command 0x805.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int sceSysconGetUsbDetStatusForDriver(SceUInt32 *pStatus);</source><br />
<br />
=== SceSysconForDriver_E7F5D3DC ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7F5D3DC<br />
|}<br />
<br />
Calls Syscon command 0x806.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int SceSysconForDriver_E7F5D3DC(SceUInt32 *pResult);</source><br />
<br />
=== SceSysconForDriver_253CC522 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x253CC522<br />
|}<br />
<br />
Calls Syscon command 0x807. Gets 2 bytes from Syscon.<br />
<br />
On DevKit, it returns 0x8025023F. Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int SceSysconForDriver_253CC522(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconCtrlDolceLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x727F985A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
#define STATE_ON 0<br />
#define STATE_BLINK_SLOW 1<br />
#define STATE_BLINK_FAST 2<br />
<br />
int sceSysconCtrlDolceLEDForDriver(SceUInt32 state);<br />
</source><br />
<br />
=== sceSysconGetTimeStampForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4D588A0A<br />
|}<br />
<br />
This is a guessed named, derived from PSP. Temp name was sceSysconGetBaryonTimestampForDriver.<br />
<br />
Returns the timestamp of latest installed Syscon firmware patch, formatted as <code>YYYYMMDDhhmm</code>. This comes from a string stored in Syscon firmware under another format: <code>$Date:: YYYY-MM-DD hh:mm:ss +0900#$</code><br />
<br />
Example: <code>$Date:: 2013-12-13 15:52:05 +0900#$</code> in Syscon firmware becomes <code>201312131552</code> in Syscon command 2.<br />
<br />
<source lang="c"><br />
// pTimestamp will point to a buffer of size 0x10 bytes, containing a string of size 13 (12: length + 1: terminal character)<br />
int sceSysconGetTimeStampForDriver(char *pTimestamp);<br />
</source><br />
<br />
=== sceSysconGetWakeupFactorForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCF5B2F2F<br />
|}<br />
<br />
Result is 2 bytes wakeup factor coming from Syscon command 0x10.<br />
<br />
<source lang="C">int sceSysconGetWakeupFactorForDriver(SceUInt32 *pWakeupFactor);</source><br />
<br />
=== sceSysconCtrlHdmiCecPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x62155962<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
Sets the pin CDC Hot Plug Detect (HPD) state of the HDMI bridge (AD80244 / ADV7533).<br />
<br />
<source lang="c">int sceSysconCtrlHdmiCecPowerForDriver(SceBool enable_HDMI_CDC_HPD_pin);</source><br />
<br />
=== sceSysconCtrlMotionSensorPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x063425AE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
<source lang="C">int sceSysconCtrlMotionSensorPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3FDD29D6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3FDD29D6<br />
|}<br />
<br />
Calls Syscon command 0x884. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_3FDD29D6(int value, SceBool use_flag);</source><br />
<br />
=== SceSysconForDriver_79E6DD8B ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x79E6DD8B<br />
|}<br />
<br />
Calls Syscon command 0x885. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_79E6DD8B(int value, SceBool use_flag);</source><br />
<br />
=== sceSysconCtrlVoltageForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.920.050-3.740.011 || 0x7F198FA2<br />
|}<br />
<br />
Temp name was sceSysconSetVoltageForDriver.<br />
<br />
Calls Syscon command 0x88E.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
/*<br />
type:<br />
0: Reserved<br />
1: DD1 (VDD - IFTU, DMAC, Internal bus, SPM 32KiB/128KiB) SetSysClockFrequency, SetDmac5ClockFrequency, SetBusClockFrequency, SetCameraBusClockFrequency<br />
2: DD2 (VDDA - ARM core, L2 cache) SetArmClockFrequency<br />
3: DD3 (VDDC - Codec Engine, AVC Decoder) SetVipClockFrequency, SetVeneziaClockFrequency<br />
4: DD4 (VDDG - GPU core) SetGpuClockFrequencyInternal, SetGpuXbarClockFrequency, SetCompatClockFrequency<br />
<br />
vid:<br />
0x22 (0.34V)<br />
0x8A (1.38V) - (something got from ScePervasiveForDriver)<br />
*/<br />
<br />
#define SCE_SYSCON_VOLTAGE_DD1 (1)<br />
#define SCE_SYSCON_VOLTAGE_DD2 (2)<br />
#define SCE_SYSCON_VOLTAGE_DD3 (3)<br />
#define SCE_SYSCON_VOLTAGE_DD4 (4)<br />
<br />
int sceSysconCtrlVoltageForDriver(SceUInt32 type, SceUInt32 vid);<br />
</source><br />
<br />
=== sceSysconSetPowerModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8A95D35C<br />
|}<br />
<br />
Temp name was sceSysconResetDeviceForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A.<br />
<br />
The <code>mode</code> argument is usually set to <code>0x2</code> or sometimes <code>0x8002</code> (which seems to correspond to some request by the UDC and BT drivers).<br />
<br />
The <code>type</code> argument determines what to do.<br />
<br />
Real definition names are like: "SCE_SYSCON_POWERMODE_MODE_STANDBY".<br />
<br />
{| class="wikitable"<br />
! Type !! Description !! Syscon command arguments <code>{cmd_no_low, cmd_no_hi, args_size, args}</code><br />
|-<br />
| 0 || Power off || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 1 || Suspend (low-power state) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 2 || Reset (cold reset) || <code>{0x01, 8, 1, 0}</code><br />
|-<br />
| 3 || Reset to external boot mode || <code>{0xC1, 0, 2, 0}</code><br />
|-<br />
| 4 || ?Reset to update mode? || <code>{0xC1, 0, 2, 1}</code><br />
|-<br />
| 5 || Hibernate || <code>{0xC2, 0, 2, 0x5A}</code><br />
|-<br />
| 16 || ?Resume? || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 17 || Resume (soft reset: suspend and immediately resume) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|}<br />
<br />
<source lang="c">int sceSysconSetPowerModeForDriver(int type, int mode);</source><br />
<br />
=== sceSysconEnableHibernateIOForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4946538A<br />
|}<br />
<br />
<source lang="C">int sceSysconEnableHibernateIOForDriver(int maybe_enable);</source><br />
<br />
=== sceSysconWaitReadyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x55DF1C9B<br />
|}<br />
<br />
Temp name was sceSysconWaitInitializedForDriver.<br />
<br />
<source lang="c">int sceSysconWaitReadyForDriver(void);</source><br />
<br />
=== sceSysconCmdSyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x6E517D22<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdSyncForDriver(SceSysconPacket *packet, int noWait);</source><br />
<br />
=== sceSysconCmdExecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9ADDCA4A<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdExecForDriver(SceSysconPacket *packet, unsigned int flags);</source><br />
<br />
=== sceSysconCmdExecAsyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2224E82<br />
|}<br />
<source lang="c">int sceSysconCmdExecAsyncForDriver(SceSysconPacket *packet, u32 flags, int (*callback)(SceSysconPacket *, void *), void *argp);</source><br />
<br />
=== sceSysconCtrlSdPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xBE1ADE4F<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x888.<br />
<br />
Enables/disables GameCard reader.<br />
<br />
Used in [[SceSdstor]].<br />
<br />
<source lang="c"><br />
// param: 1 = enable SD (GameCard reader) power, 0 = disable SD (GameCard reader) power<br />
int sceSysconCtrlSdPowerForDriver(SceUInt16 param);<br />
</source><br />
<br />
=== sceSysconCtrlWirelessPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0x4FBDA504<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x88A.<br />
<br />
Replaced by function [[#sceSysconCtrlWirelessPower2ForDriver]].<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconCtrlWirelessPower2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA2E85DB9<br />
|}<br />
<br />
Replacement function for [[#sceSysconCtrlWirelessPowerForDriver]]. Calls Syscon command 0x88A.<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPower2ForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconCtrlWirelessPowerDownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0xDF8C6D2D<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If motherboard is not "hardware info third byte 0x10" (probably IRS-001), it does nothing and returns 0, probably because missing hardware. Calls Syscon command 0xB1. Wireless power down might be a button to enable/disable Wireless, like on PSP.<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerDownForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconGetConfigStorageInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.995.000-3.740.011 || 0xCE48E8EB<br />
|}<br />
<br />
Get Syscon Config Storage Info using Syscon command 0x1300.<br />
<br />
Config Storage Info is part of the [[Syscon]] "ConfZZ" header.<br />
<br />
<source lang="C"><br />
typedef struct SceKernelConfigStorageInfo { // size is 8 bytes<br />
SceUInt16 version;<br />
SceUInt16 unk_2;<br />
SceUInt32 unk_4;<br />
} SceKernelConfigStorageInfo;<br />
<br />
int sceSysconGetConfigStorageInfoForDriver(SceKernelConfigStorageInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLoadConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x89C5CFD6<br />
|}<br />
<br />
Calls Syscon command 0x1385.<br />
<br />
The OS uses this function to change between modes: IDU mode, Show Mode, no mode. This works by spoofing or rewriting [[KBL Param#Hardware Info|Hardware Info]]. This is reboot persistent.<br />
<br />
<source lang="C">int sceSysconLoadConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== sceSysconVerifyConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xCC6F90A8<br />
|}<br />
<br />
Calls Syscon command 0x1386.<br />
<br />
This function is not used in the OS and anyway it would always return error because it calls a command that is not implemented in Syscon FW.<br />
<br />
<source lang="C">int sceSysconVerifyConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== SceSysconForDriver_FD65FFCB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xFD65FFCB<br />
|}<br />
<br />
Calls Syscon command 0x1392.<br />
<br />
<source lang="C">int SceSysconForDriver_FD65FFCB(SceUInt8 offset, SceUInt16 a2);</source><br />
<br />
=== sceSysconBeginConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xA4968B8C<br />
|}<br />
<br />
<source lang="C">int sceSysconBeginConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconCommitConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x7B9B3617<br />
|}<br />
<br />
<source lang="C">int sceSysconCommitConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconEndConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xFCC3E8EE<br />
|}<br />
<br />
<source lang="C">int sceSysconEndConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconSetDebugHandlersForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF245CD6F<br />
|}<br />
<br />
<source lang="c"><br />
/** A set of debug handlers for syscon, that you can set in sceSysconSetDebugHandlersForDriver(). */<br />
typedef struct SceSysconDebugHandlers {<br />
/** Structure size (probably, unused). */<br />
s32 size;<br />
/** Callback ran right before running a packet, with a pointer to it passed as the first argument. */<br />
void (*start)(SceSysconPacket *packet);<br />
/** Callback ran right after finishing running a packet, with a pointer to it passed as the first argument. */<br />
void (*end)(SceSysconPacket *packet);<br />
} SceSysconDebugHandlers;<br />
<br />
int sceSysconSetDebugHandlersForDriver(SceSysconDebugHandlers *debug_handlers);<br />
</source><br />
<br />
=== sceSysconGetBatteryCalibDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x9ADC9936<br />
|}<br />
<br />
<source lang="C">int sceSysconGetBatteryCalibDataForDriver(int *piData1, int *piData2, int *piData3, int *piData4);</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF492E69E<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelTouchpanelDeviceInfo { // size is 8 bytes<br />
uint16_t FrontVendorID;<br />
uint16_t FrontFirmwareRev;<br />
uint16_t RearVendorID;<br />
uint16_t RearFirmwareRev;<br />
} SceKernelTouchpanelDeviceInfo;<br />
<br />
int sceSysconGetTouchpanelDeviceInfoForDriver(SceKernelTouchpanelDeviceInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.690.011-3.740.011 || 0x030D447F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns extended touchpanel info.<br />
<br />
<source lang="C"><br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelInfo { // size is 0xA bytes<br />
SceUInt16 vendorID;<br />
SceUInt16 firmwareRev;<br />
SceUInt16 configRev;<br />
SceUInt8 hwVersion;<br />
SceUInt8 vendorInfo;<br />
SceUInt16 reserved;<br />
} SceKernelTouchpanelInfo;<br />
<br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelDeviceInfo2 { // size is 0x14 bytes<br />
SceKernelTouchpanelInfo front;<br />
SceKernelTouchpanelInfo rear;<br />
} SceKernelTouchpanelDeviceInfo2;<br />
<br />
int sceSysconGetTouchpanelDeviceInfo2ForDriver(SceKernelTouchpanelDeviceInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconMotionGetMeasureDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x270B7B0B<br />
|}<br />
<br />
Calls Syscon command 0x400.<br />
<br />
=== sceSysconMotionGetDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD01E64FC<br />
|}<br />
<br />
Returns motion sensor device info.<br />
<br />
Calls Syscon command 0x480.<br />
<br />
See [[SceMotionDev#sceMotionDevGetDeviceInfoForDriver]] for the SceKernelMotionDeviceInfo structure.<br />
<br />
<source lang="C">int sceSysconMotionGetDeviceInfoForDriver(SceKernelMotionDeviceInfo *pInfo);</source><br />
<br />
=== SceSysconForDriver_9A7858B6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9A7858B6<br />
|}<br />
<br />
Calls Syscon command 0x481. Sends 3 bytes to Syscon.<br />
<br />
Probably used to send information to the motion sensor device.<br />
<br />
<source lang="C">int SceSysconForDriver_9A7858B6(SceBool a1, SceUint16 a2);</source><br />
<br />
=== sceSysconGetHardwareInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCBD6D8BC<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info|Hardware Info]] obtained from Syscon command 0x5.<br />
<br />
<source lang="C">int sceSysconGetHardwareInfoForDriver(void);</source><br />
<br />
=== sceSysconGetHardwareInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x965C68C3<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info 2|Hardware Info 2]] obtained from Syscon command 0x6.<br />
<br />
This function was certainly added for PS Vita Slim or PS TV support because [[KBL Param#Hardware Info|Hardware Info]] risked being fulfilled if too many hardware revisions were made.<br />
<br />
Used in [[SceAudio#SceAudioIn|SceAudioIn]] (maybe to check Conexant IC), [[SceCodec]] (maybe to check Conexant IC), and [[SceVshBridge#vshSysconGetHardwareInfo2|_vshSysconGetHardwareInfo2]].<br />
<br />
<source lang="C"><br />
typedef struct SceKernelHardwareInfo2 {<br />
SceUInt8 flags[0x10];<br />
} SceKernelHardwareInfo2;<br />
<br />
int sceSysconGetHardwareInfo2ForDriver(SceKernelHardwareInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconGetErnieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xFF86F4C5<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconGetBaryonVersionForDriver.<br />
<br />
<source lang="c">int sceSysconGetErnieVersionForDriver(void);</source><br />
<br />
=== SceSysconForDriver_EBE3262C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBE3262C<br />
|}<br />
<br />
In [[SceSblPostSsMgr]], used just after [[#sceSysconGetErnieVersionForDriver]].<br />
<br />
Returns 8 bits of some Syscon Mode information. Bit 6 (from right) is Syscon DownLoader Mode flag. Bit 3 (from right) is Power Online flag.<br />
<br />
<source lang="C">SceUInt8 SceSysconForDriver_EBE3262C(void);</source><br />
<br />
=== sceSysconIsDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x9ADD60D2<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconIsDealDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB7BCC638<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDealDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconNopForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0D0B6D25<br />
|}<br />
<br />
<source lang="C">int sceSysconNopForDriver(void);</source><br />
<br />
=== sceSysconIsPowerOnlineForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9DA2A5AB<br />
|}<br />
<br />
Returns true iff Syscon information bit 3 (from right) is set. See also [[#SceSysconForDriver_EBE3262C]].<br />
<br />
Used in many [[ScePower]] functions for example before setting display brightness (to save battery).<br />
<br />
<source lang="C">SceBool sceSysconIsPowerOnlineForDriver(void);</source><br />
<br />
=== sceSysconGetErnieDLVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD2F456DC<br />
|}<br />
<br />
Calls Syscon command 0x1100.<br />
<br />
<source lang="C">void sceSysconGetErnieDLVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetBatteryVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x68E0031E<br />
|}<br />
<br />
Battery IC codename: if HWinfo > 7 "Abby" else unknown codename, maybe just "Bic".<br />
<br />
<source lang="C">int sceSysconGetBatteryVersionForDriver(SceUInt16 *HWinfo, SceUInt16 *FWinfo, SceUInt16 *DFinfo);</source><br />
<br />
=== sceSysconReadCookieStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.740.011 || 0xDFB024C4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceSysconAbbySyncForDriver.<br />
<br />
<source lang="C">int sceSysconReadCookieStatusForDriver(SceUInt32 *puiStatus);</source><br />
<br />
=== sceSysconGetManufacturesStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3E09A1F4<br />
|}<br />
<br />
In theory, this function should only be called when Product Mode is already set.<br />
<br />
<source lang="C">int sceSysconGetManufacturesStatusForDriver(int *piStatus);</source><br />
<br />
=== sceSysconReadScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x299B1CE7<br />
|}<br />
<br />
Temp name was sceSysconReadCommandForDriver, sceSysconVsReadDataForDriver.<br />
<br />
Calls Syscon command 0x90.<br />
<br />
Used in [[SceRtc]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconReadScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconWriteScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE26488B9<br />
|}<br />
<br />
Temp name was sceSysconSendCommandForDriver, sceSysconVsWriteDataForDriver.<br />
<br />
Calls Syscon command 0x91.<br />
<br />
Used in [[SceRtc]] and [[ScePower]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconWriteScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconNvsSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x81A6060D<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]].<br />
<br />
<source lang="C"><br />
// mode: 0 before NVS read/write<br />
int sceSysconNvsSetRunModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsSetUnkModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2EC6D55D<br />
|}<br />
<br />
<source lang="C"><br />
// mode: unk<br />
int sceSysconNvsSetUnkModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACAFA2B8<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblSsGetNvsDataForDriver|sceSblSsGetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsReadDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconNvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x10C9657A<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]] and [[SceSblSsMgr#sceSblSsSetNvsDataForDriver|sceSblSsSetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsWriteDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconGetMultiCnInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x1503D6A0<br />
|}<br />
<br />
Returns data obtained by Syscon command 0x103.<br />
<br />
Returns 0x4ff00 when nothing is connected.<br />
<br />
Returns 0x40080 when pin 11 is pulled to GND.<br />
<br />
Returns 0x40680 when pin 12 is pulled to GND.<br />
<br />
Returns 0x40380 when pin 12 is pulled to GND while pin 11 pulled to ground via 100K resistor.<br />
<br />
Returns 0x40000 on PSTV<br />
<br />
Bits 8 and 9 indicate that an audio-out dock is connected.<br />
<br />
Bits 8, 9, 11, 12, 13, 14 and 15 indicate that [[UDC]] pins are connected.<br />
<br />
Used in [[SceHpremote]], [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconGetMultiCnInfoForDriver(SceUInt32 *pInfo);</source><br />
<br />
=== sceSysconSetMultiCnPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8AAB6308<br />
|}<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C"><br />
// port: 0: for JIG mode, 1 for UART0 logging mode, 0x10000: for normal mode<br />
int sceSysconSetMultiCnPortForDriver(int port);<br />
</source><br />
<br />
=== sceSysconCtrlLedPwmBlinkForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x6F586D1A<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
// unk: SceLedConfig.unk_4<br />
<br />
int sceSysconCtrlLedPwmBlinkForDriver(int device, SceUInt32 unk);<br />
</source><br />
<br />
=== sceSysconSetChargeLedCtrlForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x9CA6EB70<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
On motherboards IRT-001 and older, it does nothing and returns 0, probably because missing hardware that could be a LED, else it sends 2 bytes using Syscon command 0x89E.<br />
<br />
Used in [[ScePower#ScePowerForDriver_38415146]]. Related to LED.<br />
<br />
<source lang="C">int sceSysconSetChargeLedCtrlForDriver(SceBool state);</source><br />
<br />
=== sceSysconCtrlAccPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8D1D97E8<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlAccPowerForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlUsbStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x59DC5938<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x89A.<br />
<br />
Related to [[SceUdcd]] and [[ScePower]].<br />
<br />
<source lang="C">int sceSysconCtrlUsbStatusForDriver(SceUInt32 value);</source><br />
<br />
=== sceSysconCtrlRMRPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x710A7CF0<br />
|}<br />
<br />
Temp name was sceSysconCtrlMsPowerForDriver.<br />
<br />
<source lang="c">int sceSysconCtrlRMRPowerForDriver(int enable_power);</source><br />
<br />
=== sceSysconCtrlMultiCnPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xB1F88B11<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlMultiCnPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3274A925 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3274A925<br />
|}<br />
<br />
Temp name was sceSysconCtrlDolceUsbPowerForDriver.<br />
<br />
This function enables/disables a USB bus related to either PS Vita IRS-1001 Wlan/Bt module USB or PS Vita 3G modem USB. This also affects PS TV USB host and maybe also PS TV ethernet.<br />
<br />
Used in [[SceUsbEtherSmsc]], [[SceUsbServ]].<br />
<br />
This function was maybe added to support IRS-1001 motherboard.<br />
<br />
<source lang="C">int SceSysconForDriver_3274A925(SceBool enable);</source><br />
<br />
=== sceSysconJigOpenPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x44A173F5<br />
|}<br />
<br />
<source lang="C">int sceSysconJigOpenPortForDriver(void);</source><br />
<br />
=== sceSysconJigClosePortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x483FAE05<br />
|}<br />
<br />
<source lang="C">int sceSysconJigClosePortForDriver(void);</source><br />
<br />
=== sceSysconJigSetConfigForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD24BF916<br />
|}<br />
<br />
<source lang="C">int sceSysconJigSetConfigForDriver(SceUInt8 a1, SceUInt8 a2);</source><br />
<br />
=== sceSysconOutputClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x058941D7<br />
|}<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB0.<br />
<br />
=== sceSysconCtrlHostOutputViaDongleForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xDECCB2B4<br />
|}<br />
<br />
Enables / disables Kermit UART0 output (logs) via Dongle (Jig).<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB2.<br />
<br />
<source lang="C">int sceSysconCtrlHostOutputViaDongleForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_33B5CDB3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x33B5CDB3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB3.<br />
<br />
This function was probably added to support IRS-002 motherboard.<br />
<br />
=== SceSysconForDriver_F6D4DDC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xF6D4DDC4<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB4. It is probably the "get" equivalent of [[#SceSysconForDriver_00AE3AEB]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_00AE3AEB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x00AE3AEB<br />
|}<br />
<br />
It is probably a "sceSysconCtrl...ForDriver" function.<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB5. It is probably the "set" equivalent of [[#SceSysconForDriver_F6D4DDC4]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_0D300158 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x0D300158<br />
|}<br />
<br />
It is probably a "sceSysconCtrl...ForDriver" function.<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB6. It is probably the "set" equivalent of [[#SceSysconForDriver_91EF4EC3]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== SceSysconForDriver_91EF4EC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x91EF4EC3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB7. It is probably the "get" equivalent of [[#SceSysconForDriver_0D300158]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== receive_pm_sm_jig_msg_from_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3C80B529<br />
|}<br />
<br />
Calls Syscon command 0x2083.<br />
<br />
<source lang="C">int receive_pm_sm_jig_msg_from_syscon(SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_short_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xCE346793<br />
|}<br />
<br />
Calls Syscon command 0x2084.<br />
<br />
Sends a message of maximum 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_short_msg_to_syscon(SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x7BFBA09E<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Sends a message by chunks of 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_msg_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_stop_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x933D813F<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Used just after send_pm_sm_jig_msg_to_syscon or when it fails before.<br />
<br />
<source lang="C">int send_pm_sm_stop_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size);</source><br />
<br />
=== sceSysconIduModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x956D07CB<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeSetForDriver(void);</source><br />
<br />
=== sceSysconIduModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x34574496<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeClearForDriver(void);</source><br />
<br />
=== sceSysconShowModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x6D65B70F<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeSetForDriver(void);</source><br />
<br />
=== sceSysconShowModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x8D7724C0<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeClearForDriver(void);</source><br />
<br />
=== sceSysconSetWlanCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || 0x4DEB8712<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a Wlan-related callback.<br />
<br />
index 5 on FWs 0.931.010-0.940.<br />
<br />
=== SceSysconForDriver_18A6F4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x18A6F4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_C0F215B7]].<br />
<br />
<source lang="C">int SceSysconForDriver_18A6F4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_DE613081 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xDE613081<br />
|}<br />
<br />
A guessed name is sceSysconSetHeadphoneCallbackForDriver.<br />
<br />
Registers an headphone remote related callback.<br />
<br />
index 1 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
Related to [[#SceSysconForDriver_C3504ADE]].<br />
<br />
<source lang="C">int SceSysconForDriver_DE613081(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_229A07C2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x229A07C2<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 2 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_B832B72C]].<br />
<br />
<source lang="C">int SceSysconForDriver_229A07C2(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_8351526D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x8351526D<br />
|}<br />
<br />
A guessed name is sceSysconSetAlarmTimerCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 3 on FW 3.600.011.<br />
<br />
Used in [[SceRtc]].<br />
<br />
Related to [[#SceSysconForDriver_86BAAF7D]].<br />
<br />
<source lang="C">int SceSysconForDriver_8351526D(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_9F8340FF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9F8340FF<br />
|}<br />
<br />
A guessed name is sceSysconSetResumeRequestCallbackForDriver.<br />
<br />
Registers the "is resume requested" callback.<br />
<br />
Used in [[ScePower]] to register a callback that sets the [[ScePower]] global variable g_resume_requested to SCE_TRUE.<br />
<br />
index 4 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_A57B5433]].<br />
<br />
<source lang="C">int SceSysconForDriver_9F8340FF(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_35E1689F ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x35E1689F<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
index 5 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACC7F71E]].<br />
<br />
<source lang="C">int SceSysconForDriver_35E1689F(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_474A9EA7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x474A9EA7<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xC on FWs 0.931.010-0.940. index 6 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_769F9AC4]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_474A9EA7(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_4E88B4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E88B4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 8 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4BC63A40]].<br />
<br />
No use case seen. Maybe used in internal modules for Jig.<br />
<br />
<source lang="C">int SceSysconForDriver_4E88B4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_376CCCB8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x376CCCB8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 9 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_99A254A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_376CCCB8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_3BAAC8A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x3BAAC8A9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xA on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9A4F4B7C]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_3BAAC8A9(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAccCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x4A42712F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for accessory port.<br />
<br />
index 0xF on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetAccCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3F0DB7C0<br />
|}<br />
<br />
Registers the low-battery callback.<br />
<br />
index 6 on FWs 0.931-0.940. index 0x10 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_80D6E061 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x80D6E061<br />
|}<br />
<br />
A guessed name is sceSysconSetBatteryOnlineCallbackForDriver.<br />
<br />
Registers a callback. Maybe related to Battery online status.<br />
<br />
index 0x11 on FW 3.600.011.<br />
<br />
<source lang="C">int SceSysconForDriver_80D6E061(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_7682FE69 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x7682FE69<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x12 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4A184B7C]].<br />
<br />
<source lang="C">int SceSysconForDriver_7682FE69(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_E0D52DF0 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE0D52DF0<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x13 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACEE1C70]].<br />
<br />
<source lang="C">int SceSysconForDriver_E0D52DF0(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2D471528 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x2D471528<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a callback very similar to the low battery callback.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x14 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_03C50DC3]].<br />
<br />
<source lang="C">int SceSysconForDriver_2D471528(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_129EA022 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x129EA022<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x15 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_BFDA5590]].<br />
<br />
<source lang="C">int SceSysconForDriver_129EA022(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_85E5DEBF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x85E5DEBF<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
index 0x16 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_63B14156]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_85E5DEBF(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetThermalAlertCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x773B8126<br />
|}<br />
<br />
Registers the thermal alert callback.<br />
<br />
index 0x17 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_50CAE242]].<br />
<br />
<source lang="C">int sceSysconSetThermalAlertCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2E4BA4B8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2E4BA4B8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x19 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_29CF4335]].<br />
<br />
No use case seen. Maybe used in internal modules for Jig.<br />
<br />
<source lang="C">int SceSysconForDriver_2E4BA4B8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_C442D0BE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xC442D0BE<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1A on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9F4042F8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_C442D0BE(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_61AE3970 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0x61AE3970<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1B on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_C50568E9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_61AE3970(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x94678881<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-reboot callback.<br />
<br />
index 0x1C on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x7AA00C01<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-download callback.<br />
<br />
index 0x1D on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetStandbyButtonCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x423D0C58<br />
|}<br />
<br />
Registers a callback.<br />
<br />
index 0x20 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetStandbyButtonCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_154676F1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x154676F1<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x21 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_154676F1(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_63352A39 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x63352A39<br />
|}<br />
<br />
A guessed name is sceSysconSetMicrophoneCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x22 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_63352A39(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_14730196 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x14730196<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x23 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_14730196(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAlarmCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32418370<br />
|}<br />
<br />
Registers the alarm callback.<br />
<br />
index 0 on FWs 0.931.010-0.940. index 0x24 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetAlarmCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMultiCnOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA26586B2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for multi-connector OTG on PS Vita Fat.<br />
<br />
index 0x25 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMultiCnOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMiniUsbOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x67A4CB9F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for mini-USB OTG on PS Vita Slim.<br />
<br />
index 0x26 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMiniUsbOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconUpdaterSetSegmentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B00BC7F<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// segment_no: a 8bit value<br />
int sceSysconUpdaterSetSegmentForDriver(SceUInt32 segment_no);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x356B9696<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegmentForDriver.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramDataForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramData2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x734544E4<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegment2ForDriver.<br />
<br />
Same functionality as [[#sceSysconUpdaterLoadSegmentForDriver]] except that the segment is copied to an intermediate 0x7A-byte zeroed buffer. This implementation seems bad as the Syscon packet first 6 bytes are written twice.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramData2ForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCalcChecksumForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD27C3D80<br />
|}<br />
<br />
Computes checksum to use with [[#sceSysconUpdaterExecProgrammingForDriver]]. It does not call any Syscon command.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterCalcChecksumForDriver(void *data, SceSize size, int *puiChecksum);</source><br />
<br />
=== sceSysconUpdaterExecProgrammingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x69AD76E4<br />
|}<br />
<br />
Executes programming, i.e writes segments to Syscon Flash memory.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// checksum: value got from sceSysconUpdaterCalcChecksumForDriver<br />
int sceSysconUpdaterExecProgrammingForDriver(int checksum);<br />
</source><br />
<br />
=== sceSysconUpdaterSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB487C2FB<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterSetRunModeForDriver(int mode);</source><br />
<br />
=== sceSysconUpdaterExecFinalizeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC7747A63<br />
|}<br />
<br />
Finalize Syscon update by sending checksum from ARM to Syscon.<br />
<br />
Calls Syscon command 0x1184.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// digest: sha1 of decrypted concatenated segments, comes from Syscon Update package packet type 0x20<br />
// size: usually 0x14 (sha1 size)<br />
int sceSysconUpdaterExecFinalizeForDriver(void *digest, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCheckSignatureForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCBA836FF<br />
|}<br />
<br />
Sends a 0x18-byte buffer to Syscon command 0x1185. This Syscon command 0x1185 seems to be unimplemented in recent Syscon firmwares: it does not do anything. It can be explained by the fact that the signature packet is not embedded in Syscon Update SPKGs.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// size: must be 0x18<br />
int sceSysconUpdaterCheckSignatureForDriver(void *pSig, SceSize size);<br />
</source><br />
<br />
=== SceSysconForDriver_4D03754A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x4D03754A<br />
|}<br />
<br />
Temp name was syscon_update_command_0xD00002.<br />
<br />
Calls Syscon command 0xD0.<br />
<br />
Used in [[SceSblUpdateMgr]] with [[update_service_sm]] function [[Secure_Modules_Functions#0xD0002|0xD0002]].<br />
<br />
<source lang="C"><br />
// in_buf: buffer that embeds input data, usually 0xD0002 command request + 8<br />
// in_size: usually 0x28<br />
// out_buf: buffer to receive result, usually 0xD0002 command request + 0x30<br />
// out_size: usually 0x28<br />
int SceSysconForDriver_4D03754A(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== SceSysconForDriver_C14BD637 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 1.000.041-3.740.011 || 0xC14BD637<br />
|}<br />
<br />
Calls Syscon command 0xD1.<br />
<br />
Seems unused.<br />
<br />
<source lang="C">int SceSysconForDriver_C14BD637(void);</source><br />
<br />
=== sceSysconSnvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBDF88B9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD2.<br />
<br />
Used in [[SceSblPostSsMgr]] to read data from SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] commands 0xB0002 and 0xC0002.<br />
<br />
<source lang="C"><br />
// in_size: 0x10<br />
// out_size: 0x30<br />
int sceSysconSnvsReadDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSnvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x63683B9B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD3.<br />
<br />
Used in [[SceSblPostSsMgr]] to write data to SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] functions [[Secure_Modules_Functions#0xB0002 - sceSblUsSmSnvsEncryptDecryptSector|0xB0002]] and [[Secure_Modules_Functions#0xC0002 - sceSblUsSmSnvsEncryptDecryptMgmtData|0xC0002]].<br />
<br />
<source lang="C"><br />
// in_size: 0x30<br />
// out_size: 0x10<br />
int sceSysconSnvsWriteDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSetAffirmativeRertyModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x901D6CD4<br />
|}<br />
<br />
This is an official name. Typo is the name is intentional.<br />
<br />
Sets AffirmativeRertyMode flag in kernel memory. During SceSyscon initialization, AffirmativeRertyMode is enabled by default.<br />
<br />
AffirmativeRertyMode flag is used by [[SceSyscon]] kernel module when executing Syscon commands.<br />
<br />
Used in [[SceCtrl]], [[ScePower]].<br />
<br />
<source lang="C">int sceSysconSetAffirmativeRertyModeForDriver(int enable);</source><br />
<br />
=== sceSysconGetControlsInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x145F59A4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[KBL Param#Boot Controls Info|Boot Controls Info]].<br />
<br />
Calls Syscon command 0x100.<br />
<br />
<source lang="C">int sceSysconGetControlsInfoForDriver(SceUInt32 *pCtrl);</source><br />
<br />
=== SceSysconForDriver_76272CB9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x76272CB9<br />
|}<br />
<br />
Calls Syscon command 0x120. Gets a 4-byte value.<br />
<br />
<source lang="C">int SceSysconForDriver_76272CB9(SceUInt32 *pRes);</source><br />
<br />
=== sceSysconGetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7BEFF8B<br />
|}<br />
<br />
Gets Syscon power-on time in ticks of 0.5 second. Each second the counter automatically increases by 2.<br />
<br />
Calls Syscon command 0x11.<br />
<br />
Used in [[SceRtc]] to calculate the current time and date.<br />
<br />
<source lang="C">int sceSysconGetClockForDriver(SceUInt32 *puiTime);</source><br />
<br />
=== SceSysconForDriver_3168F3AF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3168F3AF<br />
|}<br />
<br />
Calls Syscon command 0x12.<br />
<br />
Gets the tick of an alarm timer. The alarm tick must be set using Syscon command 0x82 via [[#SceSysconForDriver_51164951]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTick);<br />
<br />
// FW 3.600.011-3.740.011<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTickLow, SceUInt8 *pTickHi);<br />
</source><br />
<br />
=== SceSysconForDriver_BA09F171 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xBA09F171<br />
|}<br />
<br />
Calls Syscon command 0x13.<br />
<br />
It might be related to alarm/timer. Sends 0 byte to Syscon. Gets 2 bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_BA09F171(SceUInt8 *pResult, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_93075DD1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x93075DD1<br />
|}<br />
<br />
Calls Syscon command 0x14. Sends 0 byte to Syscon. Gets ?1-4? bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_93075DD1(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetPowerStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x175CE5A1<br />
|}<br />
<br />
Calls Syscon command 0x883. Gets 8 bytes from Syscon. Reads Elmo registers 0xA0 through 0xA3.<br />
<br />
<source lang="C"><br />
// pStatus: pointer to a buffer of at least 8 bytes<br />
int sceSysconGetPowerStatusForDriver(void *pStatus);<br />
</source><br />
<br />
=== sceSysconCtrlDeviceResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x40FF3898<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x88F.<br />
<br />
Example:<br />
* (0xC,0) : Touchpanel Front or Rear device<br />
* (0xC,1) : Touchpanel Front or Rear device<br />
<br />
<source lang="C">int sceSysconCtrlDeviceResetForDriver(SceUInt8 a1, SceUInt8 a2);</source><br />
<br />
=== SceSysconForDriver_285594F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x285594F8<br />
|}<br />
<br />
Calls Syscon command 0x890.<br />
<br />
<source lang="C">int SceSysconForDriver_285594F8(SceUInt16 value);</source><br />
<br />
=== sceSysconCtrlLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x04EC7579<br />
|}<br />
<br />
<source lang="C"><br />
#define STATE_ON 1<br />
#define STATE_OFF 0<br />
<br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
int sceSysconCtrlLEDForDriver(SceUInt16 device, SceBool state);<br />
</source><br />
<br />
=== sceSysconCtrlChargeACForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x596B17B7<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x892. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconCtrlChargeACForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlChargeVBUSForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2A4B0437<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x893. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C"><br />
// a1: ex: 0, 1<br />
// a2: ex: 0, 1<br />
<br />
// FW 0.931.010<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1);<br />
<br />
// FW 3.600.011-3.740.011<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1, SceUInt32 a2);<br />
</source><br />
<br />
=== SceSysconForDriver_5CDDA14D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5CDDA14D<br />
|}<br />
<br />
A guessed name is sceSysconCtrlHpremoteForDriver.<br />
<br />
If Syscon version < 0x80001, it does nothing and returns 0, else it sends 2 bytes to Syscon command 0x899.<br />
<br />
Maybe enables/disables Jack power.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_5CDDA14D(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_A2FE9BF9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA2FE9BF9<br />
|}<br />
<br />
Calls Syscon command 0x800.<br />
<br />
Gets information related to battery charge status, or USB power connection. See also [[Ernie#CMD_0x0800]].<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int SceSysconForDriver_A2FE9BF9(void *pResult);</source><br />
<br />
=== sceSysconCtrlLedBlinkType2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCB41B531<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0x89F.<br />
<br />
<br />
=== sceSysconGetBatteryTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9070F139<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A0, else Syscon command 0x981.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryTempForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryRemainCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC562AF3A<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryRemainCapacityForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x802, else Syscon command 0x900.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainCapForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryVoltForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x03F11220<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x803, else Syscon command 0x901.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryVoltForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryLifePercentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xAD0A8275<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryLifePercentForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x00A65FC1<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A1, else Syscon command 0x982.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryElecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0826BA07<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A2, else Syscon command 0x983.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryElecForDriver(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconGetBatteryTTEForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB841C141<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryLifeTimeForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A3, else Syscon command 0x984.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryTTEForDriver(SceUInt16 *pTTE);</source><br />
<br />
=== sceSysconGetBatterySOHForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x91D3B7A3<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A4, else Syscon command 0x985.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatterySOHForDriver(void *pSOH);</source><br />
<br />
=== sceSysconReadBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2FB5565<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A8, else Syscon command 0x986.<br />
<br />
<source lang="C">int sceSysconReadBatteryRegForDriver(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== sceSysconWriteBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B779DB0<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A9, else Syscon command 0x987.<br />
<br />
<source lang="C">int sceSysconWriteBatteryRegForDriver(SceUInt16 offset, SceUInt16 value);</source><br />
<br />
=== SceSysconForDriver_A5AB19B1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA5AB19B1<br />
|}<br />
<br />
Read 2 bytes from some Battery device. Is is an alternative register-reading function that seems to be Syscon-side implemented only on internal System Software version 4.00 or DevKit ones.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8AA, else Syscon command 0x988.<br />
<br />
Offset must be between 0 and 0xFFFF else returns error 0x80250001.<br />
<br />
<source lang="C">int SceSysconForDriver_A5AB19B1(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== SceSysconForDriver_CFCEE733 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCFCEE733<br />
|}<br />
<br />
Sends 2 bytes from Syscon command 0x181.<br />
<br />
<source lang="C">int SceSysconForDriver_CFCEE733(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_FDB3AE9D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xFDB3AE9D<br />
|}<br />
<br />
Gets 0x10 bytes from Syscon command 0x183.<br />
<br />
<source lang="C">int SceSysconForDriver_FDB3AE9D(int *pResult);</source><br />
<br />
=== SceSysconForDriver_C3504ADE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC3504ADE<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_DE613081]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C3504ADE(void);</source><br />
<br />
=== SceSysconForDriver_B832B72C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB832B72C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_229A07C2]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B832B72C(void);</source><br />
<br />
=== SceSysconForDriver_86BAAF7D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x86BAAF7D<br />
|}<br />
<br />
A guessed name is sceSysconIsAlarmTimerExistForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_8351526D]].<br />
<br />
Used in [[SceRtc]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_86BAAF7D(void);</source><br />
<br />
=== SceSysconForDriver_A57B5433 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA57B5433<br />
|}<br />
<br />
A guessed name is sceSysconIsResumeRequestedForDriver.<br />
<br />
Related to [[#SceSysconForDriver_9F8340FF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_A57B5433(void);</source><br />
<br />
=== SceSysconForDriver_ACC7F71E ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACC7F71E<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_35E1689F]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACC7F71E(void);</source><br />
<br />
=== SceSysconForDriver_769F9AC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x769F9AC4<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_474A9EA7]].<br />
<br />
Returns always SCE_TRUE on PS TV. This function could be related to USB or ethernet availability.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_769F9AC4(void);</source><br />
<br />
=== SceSysconForDriver_4BC63A40 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4BC63A40<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_4E88B4D9]].<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4BC63A40(void);</source><br />
<br />
=== SceSysconForDriver_99A254A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x99A254A9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_376CCCB8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_99A254A9(void);</source><br />
<br />
=== SceSysconForDriver_9A4F4B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x9A4F4B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_3BAAC8A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9A4F4B7C(void);</source><br />
<br />
=== SceSysconForDriver_92D2C6A4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x92D2C6A4<br />
|}<br />
<br />
<source lang="C">int SceSysconForDriver_92D2C6A4(void);</source><br />
<br />
=== SceSysconForDriver_B9EA2FA8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xB9EA2FA8<br />
|}<br />
<br />
A guessed name is sceSysconIsAccExistForDriver.<br />
<br />
Only used in [[SceUsbServ]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B9EA2FA8(void);</source><br />
<br />
=== SceSysconForDriver_29CF4335 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x29CF4335<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2E4BA4B8]].<br />
<br />
It is related to Ernie DL Mode.<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_29CF4335(void);</source><br />
<br />
=== SceSysconForDriver_32B2DB3D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32B2DB3D<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_32B2DB3D(void);</source><br />
<br />
=== sceSysconIsHeadphoneExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x142D5E82<br />
|}<br />
<br />
Used in [[SceHpremote#sceHprmIsHeadphoneExistForDriver]].<br />
<br />
<source lang="c">SceBool sceSysconIsHeadphoneExistForDriver(void);</source><br />
<br />
=== sceSysconIsMotionDevExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x490C5548<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Used in [[SceMotionDev]].<br />
<br />
<source lang="c">SceBool sceSysconIsMotionDevExistForDriver(void);</source><br />
<br />
=== SceSysconForDriver_012B57B3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.940-3.740.011 || 0x012B57B3<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_012B57B3(void);</source><br />
<br />
=== SceSysconForDriver_27758A64 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x27758A64<br />
|}<br />
<br />
A guessed name is sceSysconIsBatteryOnlineForDriver, deriving from [[#sceSysconIsPowerOnlineForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]], [[ScePower#scePowerIsLowBatteryForDriver]], [[ScePower]]'s module_start.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_80D6E061]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_27758A64(void);</source><br />
<br />
=== SceSysconForDriver_4A184B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x4A184B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns some information about battery.<br />
<br />
Used in [[ScePower#ScePowerForDriver_627A89C6]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_7682FE69]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4A184B7C(void);</source><br />
<br />
=== SceSysconForDriver_ACEE1C70 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xACEE1C70<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns information about battery. Only used when battery is working.<br />
<br />
Used in [[ScePower#ScePowerForDriver_0D56C601]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_E0D52DF0]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACEE1C70(void);</source><br />
<br />
=== SceSysconForDriver_03C50DC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x03C50DC3<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2D471528]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_03C50DC3(void);</source><br />
<br />
=== SceSysconForDriver_BFDA5590 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xBFDA5590<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_129EA022]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_BFDA5590(void);</source><br />
<br />
=== SceSysconForDriver_63B14156 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x63B14156<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_85E5DEBF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_63B14156(void);</source><br />
<br />
=== SceSysconForDriver_50CAE242 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x50CAE242<br />
|}<br />
<br />
A guessed name is sceSysconIsThermalAlertForDriver.<br />
<br />
Returns the global variable related to [[#sceSysconSetThermalAlertCallbackForDriver]].<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_50CAE242(void);</source><br />
<br />
=== SceSysconForDriver_9F4042F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x9F4042F8<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_C442D0BE]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9F4042F8(void);</source><br />
<br />
=== SceSysconForDriver_C50568E9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xC50568E9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_61AE3970]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C50568E9(void);</source><br />
<br />
=== sceSysconIsLowBatteryForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7F5A797<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">SceBool sceSysconIsLowBatteryForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateRebootForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1A0C140F<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateRebootForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateDownloadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1E3130EE<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateDownloadForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryRemainLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x26F9D729<br />
|}<br />
<br />
Only used if Syscon version >= 0x1040105.<br />
<br />
This function was added along with [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainLevelForDriver(SceUInt8 *pResult1, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_C0F215B7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xC0F215B7<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_18A6F4D9]].<br />
<br />
The global variable is updated by [[#sceSysconCmdSyncForDriver]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C0F215B7(void);</source><br />
<br />
=== SceSysconForDriver_D6F6D472 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xD6F6D472<br />
|}<br />
<br />
Gets electric information (maybe intensity) of the device connected to USB OTG on PS Vita Slim. It should be studied if PS TV supports this function and if this function was initially targetting PS TV.<br />
<br />
Returns a global variable updated by [[#sceSysconCmdSyncForDriver]], obtained using Syscon command 0x130.<br />
<br />
<source lang="C">int SceSysconForDriver_D6F6D472(int *pInfo);</source><br />
<br />
=== SceSysconForDriver_F99BC858 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xF99BC858<br />
|}<br />
<br />
Detects microSD swap.<br />
<br />
Calls syscon command 0x131.<br />
<br />
This function was maybe added to support a prototype motherboard that has a microSD port.<br />
<br />
<source lang="C">int SceSysconForDriver_F99BC858(SceBool *isSwapped);</source><br />
<br />
=== SceSysconForDriver_E7893732 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7893732<br />
|}<br />
<br />
Calls Syscon command 0x1B0. Related to UART or JIG on PS Vita Slim or PS TV.<br />
<br />
<source lang="C"><br />
// value holds 3 useful bytes and 1 byte not sent to syscon<br />
int SceSysconForDriver_E7893732(int value);<br />
</source><br />
<br />
=== sceSysconGetElmoVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA039B563<br />
|}<br />
<br />
Temp name was sceSysconGetElmoFwVersionForDriver.<br />
<br />
Calls Syscon command 0x880. Read Elmo registers 0xD0 through 0xEF.<br />
<br />
On PS Vita 1000 series with IRS-001 motherboard, Elmo Fw Version is 0x192.<br />
<br />
<source lang="C">int sceSysconGetElmoVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetCookieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9BF78047<br />
|}<br />
<br />
Temp name was sceSysconGetCookieFwVersionForDriver.<br />
<br />
Calls Syscon command 0x881.<br />
<br />
<source lang="C">int sceSysconGetCookieVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconReadElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5BF765BB<br />
|}<br />
<br />
Calls Syscon command 0x895.<br />
<br />
=== sceSysconWriteElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCCC71C28<br />
|}<br />
<br />
Calls Syscon command 0x896.<br />
<br />
=== sceSysconReadCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x95975DD1<br />
|}<br />
<br />
Calls Syscon command 0x897.<br />
<br />
=== sceSysconWriteCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF39300D3<br />
|}<br />
<br />
Calls Syscon command 0x898.<br />
<br />
Returns error 0x80250001 if offset is greater than 0xFF.<br />
<br />
<source lang="C"><br />
// offset: 0-0xFF<br />
int sceSysconWriteCookieRegForDriver(SceUInt32 offset, SceUInt16 data);<br />
</source><br />
<br />
== Commands ==<br />
<br />
It seems like the command format is as follows: <code>(direction << 8) | cmd_id</code>, where <code>direction = 1</code> means write to syscon, and <code>direction = 0</code> means read from syscon.<br />
<br />
{| class="wikitable"<br />
! Command<br />
! Return size (without considering the 2 bytes rx.size and rx.error_code)<br />
! Functions NIDs<br />
! Description<br />
|-<br />
| 0x0<br />
| 0x0<br />
| 0x0D0B6D25<br />
| sceSysconNopForDriver<br />
|-<br />
| 0x1<br />
| 0x4<br />
| module_start<br />
| sceSysconGetErnieVersionForDriver. Used during SysconInit.<br />
|-<br />
| 0x2<br />
| 0xC<br />
| module_start<br />
| sceSysconGetTimeStampForDriver. Returns 12-byte string followed by at least 2-byte memory leak. Used during SysconInit.<br />
|-<br />
| 0x3<br />
| 0x4<br />
| module_start<br />
| sceSysconGetSleepFactor. Used during SysconInit.<br />
|-<br />
| 0x4<br />
| 0x4<br />
| <br />
| Unknown. Run during boot. See [[Ernie#CMD_0x0004]].<br />
|-<br />
| 0x5<br />
| 0x4<br />
| 0xCBD6D8BC, module_start<br />
| sceSysconGetHardwareInfoForDriver<br />
|-<br />
| 0x6<br />
| 0x10<br />
| 0x965C68C3, module_start<br />
| sceSysconGetHardwareInfo2ForDriver. Get Hardware Info 2. See [[KBL_Param#Hardware_Info_2]].<br />
|-<br />
| 0x10<br />
| 0x2<br />
| 0xCF5B2F2F<br />
| sceSysconGetWakeupFactorForDriver<br />
|-<br />
| 0x11<br />
| 0x4<br />
| 0xD7BEFF8B<br />
| sceSysconGetClockForDriver<br />
|-<br />
| 0x12<br />
| 0x5 or 0x6<br />
| 0x3168F3AF<br />
| SceSysconForDriver_3168F3AF. Gets information about alarm timer. Return value is 1 byte indicating data size then 4 or 5 bytes of data.<br />
|-<br />
| 0x13<br />
| 0x2<br />
| 0xBA09F171<br />
| SceSysconForDriver_BA09F171<br />
|-<br />
| 0x14<br />
| ?between 0x1 and 0x4?<br />
| 0x93075DD1<br />
| SceSysconForDriver_93075DD1<br />
|-<br />
| 0x15<br />
| 0x4<br />
| 0x3E09A1F4<br />
| sceSysconGetManufacturesStatusForDriver<br />
|-<br />
| 0x80<br />
| 0x0<br />
| module_start<br />
| ?? Used during SysconInit. Sends 2 bytes (ex: 0x0012) to Syscon.<br />
|-<br />
| 0x81<br />
| ?<br />
| 0x9B6A6F64<br />
| sceSysconSetClockForDriver. Sends 5 bytes to Syscon: 1 byte for size=5 and 4 bytes of data.<br />
|-<br />
| 0x82<br />
| ?<br />
| 0x51164951<br />
| SceSysconForDriver_51164951<br />
|-<br />
| 0x83<br />
| ?<br />
| 0x373ECF8A<br />
| SceSysconForDriver_373ECF8A. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x84<br />
| ?<br />
| 0x2659535C<br />
| SceSysconForDriver_2659535C. Sends 1 byte to Syscon.<br />
|-<br />
| 0x85<br />
| ?<br />
| 0x4295D497<br />
| SceSysconForDriver_4295D497<br />
|-<br />
| 0x86<br />
| 8<br />
| 0x701535FC<br />
| sceSysconGetLogInfoForDriver<br />
|-<br />
| 0x87<br />
| 0<br />
| 0x4E55CF5E<br />
| sceSysconLogStartForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x88<br />
| 0x18<br />
| 0x487D97F3<br />
| sceSysconLogReadDataForDriver. Sends 2 bytes to Syscon: offset.<br />
|-<br />
| 0x89<br />
| 0<br />
| 0x9C0B1E61<br />
| sceSysconLogStartWaitingForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x90<br />
| ?0x3B?<br />
| 0x299B1CE7<br />
| sceSysconReadScratchPadForDriver<br />
|-<br />
| 0x91<br />
| ?0x3B?<br />
| 0xE26488B9<br />
| sceSysconWriteScratchPadForDriver<br />
|-<br />
| 0xA0<br />
| ?0x10 or 0x28?<br />
| second_loader<br />
| Handshake during boot. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xB0<br />
| 0<br />
| 0x058941D7<br />
| sceSysconOutputClockForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB1<br />
| 0<br />
| 0xDF8C6D2D<br />
| sceSysconCtrlWirelessPowerDownForDriver<br />
|-<br />
| 0xB2<br />
| 0<br />
| 0xDECCB2B4<br />
| sceSysconCtrlHostOutputViaDongleForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB3<br />
| at least 1<br />
| 0x33B5CDB3<br />
| SceSysconForDriver_33B5CDB3<br />
|-<br />
| 0xB4<br />
| at least 1<br />
| 0xF6D4DDC4<br />
| SceSysconForDriver_F6D4DDC4<br />
|-<br />
| 0xB5<br />
| 0<br />
| 0x00AE3AEB<br />
| SceSysconForDriver_00AE3AEB. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB6<br />
| 0<br />
| 0x0D300158<br />
| SceSysconForDriver_0D300158. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB7<br />
| at least 1<br />
| 0x91EF4EC3<br />
| SceSysconForDriver_91EF4EC3<br />
|-<br />
| 0xC0<br />
| ?0x3E?<br />
| <br />
| <br />
|-<br />
| 0xC1<br />
| 0<br />
| 0x94AB13CC<br />
| sceSysconErnieShutdownForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xD0<br />
| ?0x2A or 0x28?<br />
| 0x4D03754A<br />
| SceSysconForDriver_4D03754A. Handshake before SNVS RW. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD1<br />
| ?0x0 or 0x2?<br />
| 0xC14BD637<br />
| SceSysconForDriver_C14BD637<br />
|-<br />
| 0xD2<br />
| ?0x30?<br />
| 0xEBDF88B9, second_loader<br />
| sceSysconSnvsReadDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD3<br />
| ?0x12?<br />
| 0x63683B9B<br />
| sceSysconSnvsWriteDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0x100<br />
| 0x4<br />
| 0x145F59A4<br />
| sceSysconGetControlsInfoForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x101<br />
| 0x8<br />
| <br />
| sceSysconGetControlsInfo2ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]]. Uses Ernie version and Ernie DL version.<br />
|-<br />
| 0x102<br />
| 0xC<br />
| <br />
| <br />
|-<br />
| 0x103<br />
| 0x4<br />
| 0x1503D6A0<br />
| sceSysconGetMultiCnInfoForDriver<br />
|-<br />
| 0x104<br />
| 0xC<br />
| <br />
| sceSysconGetControlsInfo3ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x105<br />
| ?<br />
| <br />
| Uses string "PS" then "TUV".<br />
|-<br />
| 0x106<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x107<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x108<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x109<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x110<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x120<br />
| ?<br />
| 0x76272CB9<br />
| SceSysconForDriver_76272CB9<br />
|-<br />
| 0x121<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x130<br />
| 0x4<br />
| module_start, 0xD6F6D472<br />
| Get USB OTG device electric info (maybe intensity). Used during SysconInit.<br />
|-<br />
| 0x131<br />
| ?0x1? (read)<br />
| 0xF99BC858<br />
| SceSysconForDriver_F99BC858. Added on a FW > 3.01 and <= 3.100.081.<br />
|-<br />
| 0x140<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x141<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x142<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x143<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x144<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x145<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x146<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x147<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x148<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x150<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x151<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x152<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x153<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x154<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x155<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x156<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x157<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x160<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x161<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x162<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x163<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x168<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x170<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x171<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x172<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x180<br />
| ?<br />
| <br />
| Set analog sampling. Sends 2 bytes to Syscon: 0 to disable, 1 to enable on Syscon version is < 0x90202, 3 to enable on Syscon version is >= 0x90202. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x181<br />
| 0<br />
| 0xCFCEE733<br />
| SceSysconForDriver_CFCEE733. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x182<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x183<br />
| 0x10<br />
| 0xFDB3AE9D<br />
| SceSysconForDriver_FDB3AE9D. Gets some information.<br />
|-<br />
| 0x184<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x185<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x186<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x187<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x188<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x189<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18A<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18B<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18C<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18D<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18E<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18F<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x190<br />
| 0<br />
| 0x8AAB6308<br />
| sceSysconSetMultiCnPortForDriver. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x191<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x192<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1B0<br />
| 0<br />
| 0xE7893732<br />
| SceSysconForDriver_E7893732. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x1B2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D5<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x300<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x301<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x303<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x380<br />
| at least 1<br />
| 0xF492E69E<br />
| sceSysconGetTouchpanelDeviceInfoForDriver<br />
|-<br />
| 0x38A<br />
| at least 1<br />
| 0xA1F1B973<br />
| ??<br />
|-<br />
| 0x390<br />
| at least 1<br />
| 0x030D447F<br />
| sceSysconGetTouchpanelDeviceInfo2ForDriver<br />
|-<br />
| 0x392<br />
| ?<br />
| 0x48ED8981, 0x060E55C1<br />
| SceSysconForDriver_48ED8981 / SceSysconForDriver_060E55C1. Sends 2 bytes to Syscon: 0 or 1.<br />
|-<br />
| 0x393<br />
| ?<br />
| 0x9A28BEEF, 0x8874EF45<br />
| SceSysconForDriver_9A28BEEF / SceSysconForDriver_8874EF45. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]].<br />
|-<br />
| 0x3A0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3A1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3A2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3A3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3A4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3A9<br />
| 0<br />
| 0x010F95D9<br />
| SceSysconForDriver_010F95D9. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3AB<br />
| ?<br />
| 0x357CC9D9<br />
| SceSysconForDriver_010F95D9. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3AC<br />
| ?between 0x1 and 0x4?<br />
| 0x3664E2C0<br />
| SceSysconForDriver_3664E2C0. Gets information.<br />
|-<br />
| 0x3AF<br />
| ?<br />
| 0xB8F4F4E3<br />
| SceSysconForDriver_B8F4F4E3. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3B0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3B1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3B2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3B3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3B4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3B9<br />
| ?<br />
| 0x42E599AC<br />
| SceSysconForDriver_42E599AC. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3BB<br />
| ?<br />
| 0xCCA56A16<br />
| SceSysconForDriver_CCA56A16. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3BC<br />
| ?between 0x1 and 0x4?<br />
| 0x2E6D97CD<br />
| SceSysconForDriver_2E6D97CD. Gets information.<br />
|-<br />
| 0x3BF<br />
| ?<br />
| 0x240A604E<br />
| SceSysconForDriver_240A604E. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3C2<br />
| ?<br />
| 0x5946B29B, 0x10327C64<br />
| SceSysconForDriver_5946B29B / SceSysconForDriver_10327C64. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]]<br />
|-<br />
| 0x400<br />
| ?<br />
| 0x270B7B0B<br />
| sceSysconMotionGetMeasureDataForDriver<br />
|-<br />
| 0x480<br />
| 4<br />
| 0xD01E64FC<br />
| sceSysconMotionGetDeviceInfoForDriver<br />
|-<br />
| 0x481<br />
| ?<br />
| 0x9A7858B6<br />
| SceSysconForDriver_9A7858B6. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x800<br />
| ?0x2 or 0x4?<br />
| 0xA2FE9BF9<br />
| SceSysconForDriver_A2FE9BF9. [[ScePower]] related.<br />
|-<br />
| 0x801<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0x802<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaced by Syscon command 0x900 on Syscon version > 0x70503.<br />
|-<br />
| 0x803<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaced by Syscon command 0x901 on Syscon version > 0x70503.<br />
|-<br />
| 0x804<br />
| ?<br />
| <br />
| ??<br />
|-<br />
| 0x805<br />
| 4<br />
| 0xEF810687<br />
| sceSysconGetUsbDetStatusForDriver<br />
|-<br />
| 0x806<br />
| ?0x1?<br />
| 0xE7F5D3DC<br />
| SceSysconForDriver_E7F5D3DC. Reboots PS Vita?<br />
|-<br />
| 0x807<br />
| 0x2<br />
| 0x253CC522<br />
| SceSysconForDriver_253CC522.<br />
|-<br />
| 0x820<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED on.<br />
|-<br />
| 0x821<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink slowly.<br />
|-<br />
| 0x822<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink fast.<br />
|-<br />
| 0x840<br />
| ?0x1?<br />
| 0x4FEC564C<br />
| sceSysconGetManualChargeModeForDriver<br />
|-<br />
| 0x841<br />
| ?0x1?<br />
| 0x3C3B949C<br />
| SceSysconForDriver_3C3B949C<br />
|-<br />
| 0x842<br />
| ?0x1?<br />
| 0x1C29C00E<br />
| SceSysconForDriver_1C29C00E<br />
|-<br />
| 0x843<br />
| ?0x1?<br />
| 0x730E4725<br />
| SceSysconForDriver_730E4725<br />
|-<br />
| 0x880<br />
| 0x4<br />
| 0xA039B563<br />
| sceSysconGetElmoVersionForDriver<br />
|-<br />
| 0x881<br />
| ?<br />
| 0x9BF78047<br />
| sceSysconGetCookieVersionForDriver<br />
|-<br />
| 0x882<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaced by Syscon command 0x980 on Syscon version > 0x70503.<br />
|-<br />
| 0x883<br />
| 0x8<br />
| 0x175CE5A1<br />
| sceSysconGetPowerStatusForDriver<br />
|-<br />
| 0x884<br />
| ?<br />
| 0x3FDD29D6<br />
| SceSysconForDriver_3FDD29D6. Same usage as command 0x885. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x885<br />
| ?<br />
| 0x79E6DD8B<br />
| SceSysconForDriver_79E6DD8B. Same usage as command 0x884. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x886<br />
| ?0x2?<br />
| 0x62155962<br />
| sceSysconCtrlHdmiCecPowerForDriver<br />
|-<br />
| 0x887<br />
| ?<br />
| 0x063425AE<br />
| sceSysconCtrlMotionSensorPowerForDriver<br />
|-<br />
| 0x888<br />
| ?0x2?<br />
| 0xBE1ADE4F<br />
| sceSysconCtrlSdPowerForDriver<br />
|-<br />
| 0x889<br />
| ?0x2?<br />
| 0x8D1D97E8<br />
| sceSysconCtrlAccPowerForDriver<br />
|-<br />
| 0x88A<br />
| ?<br />
| 0x4FBDA504, 0xA2E85DB9<br />
| sceSysconCtrlWirelessPowerForDriver, sceSysconCtrlWirelessPower2ForDriver<br />
|-<br />
| 0x88B<br />
| ?<br />
| 0x5A614349<br />
| SceSysconForDriver_5A614349. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88C<br />
| ?<br />
| 0xB872E904<br />
| SceSysconForDriver_B872E904. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88D<br />
| ?<br />
| 0xDD16ABD9<br />
| SceSysconForDriver_DD16ABD9. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88E<br />
| 0x0<br />
| 0x7F198FA2<br />
| sceSysconCtrlVoltageForDriver. See [[Ernie#CMD_0x088E_-_CtrlVoltage]].<br />
|-<br />
| 0x88F<br />
| ?0x2?<br />
| 0x40FF3898<br />
| sceSysconCtrlDeviceResetForDriver. ?UsbEtherSmsc and WlanBt related?<br />
|-<br />
| 0x890<br />
| ?<br />
| 0x285594F8<br />
| SceSysconForDriver_285594F8. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x891<br />
| ?0x2?<br />
| 0x04EC7579<br />
| sceSysconCtrlLEDForDriver<br />
|-<br />
| 0x892<br />
| ?0?<br />
| 0x596B17B7<br />
| sceSysconCtrlChargeACForDriver. [[ScePower]] related.<br />
|-<br />
| 0x893<br />
| ?0?<br />
| 0x2A4B0437<br />
| sceSysconCtrlChargeVBUSForDriver. [[ScePower]] related.<br />
|-<br />
| 0x895<br />
| ?<br />
| 0x5BF765BB<br />
| sceSysconReadElmoRegForDriver<br />
|-<br />
| 0x896<br />
| ?<br />
| 0xCCC71C28<br />
| sceSysconWriteElmoRegForDriver<br />
|-<br />
| 0x897<br />
| ?<br />
| 0x95975DD1<br />
| sceSysconReadCookieRegForDriver<br />
|-<br />
| 0x898<br />
| ?<br />
| 0xF39300D3<br />
| sceSysconWriteCookieRegForDriver<br />
|-<br />
| 0x899<br />
| ?0?<br />
| 0x5CDDA14D<br />
| ?Guessed name: sceSysconCtrlHpremoteForDriver? [[SceHpremote]] related.<br />
|-<br />
| 0x89A<br />
| ?0?<br />
| 0x59DC5938<br />
| sceSysconCtrlUsbStatusForDriver<br />
|-<br />
| 0x89B<br />
| ?0x2?<br />
| 0x710A7CF0<br />
| sceSysconCtrlRMRPowerForDriver<br />
|-<br />
| 0x89C<br />
| ?0x2?<br />
| 0xB1F88B11<br />
| sceSysconCtrlMultiCnPowerForDriver. [[SceUsbServ]] related.<br />
|-<br />
| 0x89D<br />
| ?<br />
| 0x6F586D1A<br />
| sceSysconCtrlLedPwmBlinkForDriver<br />
|-<br />
| 0x89E<br />
| ?<br />
| 0x9CA6EB70<br />
| sceSysconSetChargeLedCtrlForDriver. Sends 2 bytes to Syscon. [[ScePower]] related.<br />
|-<br />
| 0x89F<br />
| ?<br />
| 0xCB41B531<br />
| sceSysconCtrlLedBlinkType2ForDriver. Sends 6 bytes to Syscon.<br />
|-<br />
| 0x8A0<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaced by Syscon command 0x981 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A1<br />
| ?0x3B or 0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaced by Syscon command 0x982 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x8A2<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaced by Syscon command 0x983 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A3<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaced by Syscon command 0x984 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A4<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaced by Syscon command 0x985 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A8<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaced by Syscon command 0x986 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A9<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaced by Syscon command 0x987 on Syscon version > 0x70503.<br />
|-<br />
| 0x8AA<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaced by Syscon command 0x988 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B0<br />
| ?<br />
| 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaced by Syscon command 0x9B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x8B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaced by Syscon command 0x9B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaced by Syscon command 0x9B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaced by Syscon command 0x9B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaced by Syscon command 0x9B4 on Syscon version > 0x70503.<br />
|-<br />
| 0x8C0<br />
| ?<br />
| 0xC6A2C9EF<br />
| sceSysconCtrlManualChargeModeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C1<br />
| ?<br />
| ??<br />
| sceSysconCtrlBatteryChargeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C2<br />
| ?<br />
| ??<br />
| sceSysconCtrlChargingCurrentForDriver (accepts 0x00 - 0x1F as value)<br />
|-<br />
| 0x8C3<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentAcForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C4<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentUsbForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C5<br />
| ?0x0 or 0x2?<br />
| 0x3274A925<br />
| SceSysconForDriver_3274A925. [[SceUsbServ]] and [[SceUsbEtherSmsc]] related.<br />
|-<br />
| 0x8C6<br />
| ?<br />
| 0xDFB024C4<br />
| sceSysconReadCookieStatusForDriver. [[SceSblUpdateMgr]] related.<br />
|-<br />
| 0x8C7<br />
| ?<br />
| 0x87FF8041<br />
| SceSysconForDriver_87FF8041. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C8<br />
| ?<br />
| 0x7BFA95DA<br />
| sceSysconCtrlUSBSupplyForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C9<br />
| ?0?<br />
| 0x451C1662<br />
| SceSysconForDriver_451C1662. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CA<br />
| 1<br />
| 0x79074DE4<br />
| SceSysconForDriver_79074DE4. Sends 0 byte to Syscon.<br />
|-<br />
| 0x8CB<br />
| 1<br />
| 0x7D25F6D2<br />
| SceSysconForDriver_7D25F6D2. Sends 1 byte to Syscon.<br />
|-<br />
| 0x8CC<br />
| ?0?<br />
| 0xD2ADABCA<br />
| SceSysconForDriver_D2ADABCA. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CE<br />
| 0x10<br />
| 0x3B354824<br />
| sceSysconGetTemperatureLogForDriver<br />
|-<br />
| 0x8CF<br />
| 0<br />
| 0x3843D657<br />
| sceSysconClearTemperatureLogForDriver. Sends 2 bytes to syscon.<br />
|-<br />
| 0x8D0<br />
| ?<br />
| 0xF87679EE<br />
| SceSysconForDriver_F87679EE. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x900<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaces Syscon command 0x802 on Syscon version > 0x70503.<br />
|-<br />
| 0x901<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaces Syscon command 0x803 on Syscon version > 0x70503.<br />
|-<br />
| 0x902<br />
| ?0x4?<br />
| 0xAD0A8275<br />
| sceSysconGetBatteryLifePercentForDriver<br />
|-<br />
| 0x903<br />
| 0x2<br />
| 0x26F9D729<br />
| sceSysconGetBatteryRemainLevelForDriver. Added on a FW higher than 2.50 and Syscon version >= 0x1040105.<br />
|-<br />
| 0x904<br />
| ?<br />
| 0x9ADC9936<br />
| sceSysconGetBatteryCalibDataForDriver<br />
|-<br />
| 0x910<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x911<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x912<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x913<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x914<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x915<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x916<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x917<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x932<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x944<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x945<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x952<br />
| ?<br />
| <br />
| Uses string "PC" then "TUV".<br />
|-<br />
| 0x953<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x954<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x961<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x962<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x963<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x964<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x965<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x966<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x967<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x968<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x969<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x980<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaces Syscon command 0x882 on Syscon version > 0x70503.<br />
|-<br />
| 0x981<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaces Syscon command 0x8A0 on Syscon version > 0x70503.<br />
|-<br />
| 0x982<br />
| ?0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaces Syscon command 0x8A1 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x983<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaces Syscon command 0x8A2 on Syscon version > 0x70503.<br />
|-<br />
| 0x984<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaces Syscon command 0x8A3 on Syscon version > 0x70503.<br />
|-<br />
| 0x985<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaces Syscon command 0x8A4 on Syscon version > 0x70503.<br />
|-<br />
| 0x986<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaces Syscon command 0x8A8 on Syscon version > 0x70503.<br />
|-<br />
| 0x987<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaces Syscon command 0x8A9 on Syscon version > 0x70503.<br />
|-<br />
| 0x988<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaces Syscon command 0x8AA on Syscon version > 0x70503.<br />
|-<br />
| 0x989<br />
| ?<br />
| 0x87DA378D<br />
| sceSysconBatterySWResetForDriver<br />
|-<br />
| 0x98A<br />
| ?between 0x2 and 0x4?<br />
| 0xF93CF833<br />
| sceSysconGetBatteryFullCapForDriver<br />
|-<br />
| 0x98B<br />
| ?between 0x2 and 0x4?<br />
| 0xECFA7242 / 0xE1885F68<br />
| sceSysconGetBicTempForDriver / sceSysconGetAbbyTempForDriver<br />
|-<br />
| 0x98C<br />
| ?0x4?<br />
| 0xCD73079D<br />
| sceSysconGetBatteryCycleCountForDriver<br />
|-<br />
| 0x9B0<br />
| ?<br />
| 0x2CEF078E / 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaces Syscon command 0x8B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x9B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaces Syscon command 0x8B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaces Syscon command 0x8B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaces Syscon command 0x8B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaces Syscon command 0x8B4 on Syscon version > 0x70503.<br />
|-<br />
| 0xA00<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0xA82<br />
| ?<br />
| 0x7BAFE083<br />
| SceSysconForDriver_7BAFE083. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x1080<br />
| ?0x0 or 0x2?<br />
| 0x81A6060D<br />
| sceSysconNvsSetRunModeForDriver<br />
|-<br />
| 0x1081<br />
| ?0x0 or 0x2?<br />
| 0x2EC6D55D<br />
| sceSysconNvsSetUnkModeForDriver<br />
|-<br />
| 0x1082<br />
| ?around 0x20?<br />
| 0xACAFA2B8<br />
| sceSysconNvsReadDataForDriver<br />
|-<br />
| 0x1083<br />
| ?0x2?<br />
| 0x10C9657A<br />
| sceSysconNvsWriteDataForDriver<br />
|-<br />
| 0x1100<br />
| 0x4<br />
| 0xD2F456DC<br />
| sceSysconGetErnieDLVersionForDriver<br />
|-<br />
| 0x1101<br />
| 0x4<br />
| <br />
| <br />
|-<br />
| 0x1180<br />
| ?<br />
| 0x9B00BC7F<br />
| sceSysconUpdaterSetSegmentForDriver<br />
|-<br />
| 0x1181<br />
| ?<br />
| 0x356B9696, 0x734544E4<br />
| sceSysconUpdaterSendProgramDataForDriver, sceSysconUpdaterSendProgramData2ForDriver<br />
|-<br />
| 0x1182<br />
| ?<br />
| 0x69AD76E4<br />
| sceSysconUpdaterExecProgrammingForDriver<br />
|-<br />
| 0x1183<br />
| ?<br />
| 0xB487C2FB<br />
| sceSysconUpdaterSetRunModeForDriver<br />
|-<br />
| 0x1184<br />
| ?<br />
| 0xC7747A63<br />
| sceSysconUpdaterExecFinalizeForDriver<br />
|-<br />
| 0x1185<br />
| ?<br />
| 0xCBA836FF<br />
| sceSysconUpdaterCheckSignatureForDriver. Sends 0x18 bytes to Syscon.<br />
|-<br />
| 0x1300<br />
| 0x8<br />
| 0xCE48E8EB<br />
| sceSysconGetConfigStorageInfoForDriver<br />
|-<br />
| 0x1310<br />
| 0x1<br />
| 0x351946B0<br />
| SceSysconForDriver_351946B0<br />
|-<br />
| 0x1382<br />
| ?<br />
| 0xA4968B8C<br />
| sceSysconBeginConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1383<br />
| ?<br />
| 0xFCC3E8EE<br />
| sceSysconEndConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1384<br />
| ?<br />
| 0x7B9B3617<br />
| sceSysconCommitConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1385<br />
| ?<br />
| 0x89C5CFD6<br />
| sceSysconLoadConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1386 (called from ARM Kernel but not implemented in Syscon FW)<br />
| ?<br />
| 0xCC6F90A8<br />
| sceSysconVerifyConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1392<br />
| ?0?<br />
| 0xFD65FFCB<br />
| SceSysconForDriver_FD65FFCB. Sends 3 bytes to Syscon: 1 byte offset (between 0 and 0xFF), 2 bytes a2 (between 0 and 2).<br />
|-<br />
| 0x1393<br />
| ?<br />
| 0x02350352<br />
| SceSysconForDriver_02350352. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x1394<br />
| ?<br />
| 0x7DE84CE3<br />
| SceSysconForDriver_7DE84CE3. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x2080<br />
| ?<br />
| 0x44A173F5<br />
| sceSysconJigOpenPortForDriver<br />
|-<br />
| 0x2081<br />
| ?<br />
| 0x483FAE05<br />
| sceSysconJigClosePortForDriver<br />
|-<br />
| 0x2082<br />
| ?<br />
| 0xD24BF916<br />
| sceSysconJigSetConfigForDriver<br />
|-<br />
| 0x2083<br />
| ?<br />
| 0x3C80B529<br />
| receive_pm_sm_jig_msg_from_syscon<br />
|-<br />
| 0x2084<br />
| ?<br />
| 0xCE346793<br />
| send_pm_sm_jig_short_msg_to_syscon<br />
|-<br />
| 0x2085<br />
| ?<br />
| 0x7BFBA09E / 0x933D813F<br />
| send_pm_sm_jig_msg_to_syscon / send_pm_sm_stop_to_syscon<br />
|}<br />
<br />
== Callbacks ==<br />
<br />
All the following exported functions have this function prototype: <code>int sceSysconSet...Callback(void (*func)(int enable, void *argp), void *argp);</code>.<br />
<br />
{| class="wikitable"<br />
! Callback name !! Callback setter function !! State getter function !! Callback setter caller !! Comments<br />
|-<br />
| SYSCON_CB_ACC || [[#sceSysconSetAccCallbackForDriver]] || [[#SceSysconForDriver_B9EA2FA8]] || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MULTI_CN_OTG || [[#sceSysconSetMultiCnOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MINI_USB_OTG || [[#sceSysconSetMiniUsbOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_ALARM || [[#sceSysconSetAlarmCallbackForDriver]] || NA || [[ScePower]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_18A6F4D9]] || [[#SceSysconForDriver_C0F215B7]] || No use case seen. ||<br />
|-<br />
| ?SYSCON_CB_HEADPHONE? || [[#SceSysconForDriver_DE613081]] || [[#SceSysconForDriver_C3504ADE]] || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_MICROPHONE? || [[#SceSysconForDriver_63352A39]] || NA || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_REMOTE? || [[#SceSysconForDriver_35E1689F]] || [[#SceSysconForDriver_ACC7F71E]] || [[SceHpremote]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY || [[#sceSysconSetLowBatteryCallbackForDriver]] || [[#sceSysconIsLowBatteryForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_THERMAL_ALERT || [[#sceSysconSetThermalAlertCallbackForDriver]] || [[#SceSysconForDriver_50CAE242]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_REBOOT || [[#sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateRebootForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_DOWNLOAD || [[#sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateDownloadForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_BATTERY_ONLINE || [[#SceSysconForDriver_80D6E061]] || [[#SceSysconForDriver_27758A64]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_RESUME_REQUEST || [[#SceSysconForDriver_9F8340FF]] || [[#SceSysconForDriver_A57B5433]] || [[ScePower]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2D471528]] || [[#SceSysconForDriver_03C50DC3]] || [[ScePower]] || Very similar to SYSCON_CB_LOW_BATTERY.<br />
|-<br />
| ? || [[#SceSysconForDriver_7682FE69]] || [[#SceSysconForDriver_4A184B7C]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_E0D52DF0]] || [[#SceSysconForDriver_ACEE1C70]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_229A07C2]] || [[#SceSysconForDriver_B832B72C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_474A9EA7]] || [[#SceSysconForDriver_769F9AC4]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_129EA022]] || [[#SceSysconForDriver_BFDA5590]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_ALARM_TIMER || [[#SceSysconForDriver_8351526D]] || [[#SceSysconForDriver_86BAAF7D]] || [[SceRtc]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2E4BA4B8]] || [[#SceSysconForDriver_29CF4335]] || No use case seen. || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_4E88B4D9]] || [[#SceSysconForDriver_4BC63A40]] || No use case seen. || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_376CCCB8]] || [[#SceSysconForDriver_99A254A9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_3BAAC8A9]] || [[#SceSysconForDriver_9A4F4B7C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_85E5DEBF]] || [[#SceSysconForDriver_63B14156]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_14730196]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_C442D0BE]] || [[#SceSysconForDriver_9F4042F8]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_61AE3970]] || [[#SceSysconForDriver_C50568E9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_423D0C58]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_154676F1]] || NA || No use case seen. ||<br />
|}<br />
<br />
See also [http://uofw.github.io/upspd/docs/SilverSpring_Blog/my.malloc.us/silverspring/2007/12/03g-model-psp/index.html SilverSpring's PSP Syscon callbacks enum] and [https://github.com/pspdev/pspsdk/blob/master/src/power/psppower.h PSPSDK power callbacks enum].<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue
https://wiki.henkaku.xyz/vita/index.php?title=SceSyscon&diff=21043
SceSyscon
2024-01-16T17:47:59Z
<p>CelesteBlue: /* SceSysconForDriver_7BFA95DA */</p>
<hr />
<div>SceSyscon is a kernel module in charge of interacting with the System Controller by executing commands.<br />
<br />
== Module ==<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! World !! Privilege<br />
|-<br />
| 0.931.010-3.740.011 || Non-secure || Kernel<br />
|}<br />
<br />
== Libraries ==<br />
<br />
=== Known NIDs ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Version !! Name !! World !! Visibility !! NID<br />
|-<br />
| 0.931.010-3.740.011 || [[SceSyscon#SceSysconForDriver|SceSysconForDriver]] || Non-secure || Kernel || 0x60A35F64<br />
|}<br />
<br />
== Types ==<br />
<br />
<source lang="c"><br />
#define SCE_KERNEL_ERROR_SYSCON_ERROR 0x80250000<br />
#define SCE_SYSCON_ERROR_INVALID_SIZE 0x80250001<br />
#define SCE_SYSCON_ERROR_INVALID_ARGUMENT 0x80250002<br />
#define SCE_SYSCON_ERROR_INVALID_POINTER 0x80250003<br />
#define SCE_SYSCON_ERROR_INVALID_STATUS 0x80250004<br />
#define SCE_SYSCON_ERROR_NOT_INTR_ALLOWED 0x80250005<br />
#define SCE_SYSCON_ERROR_TX_SIZE_TOO_LONG 0x80250006<br />
<br />
#define SCE_SYSCON_ERROR_ILLEGAL_SIZE 0x80250100<br />
#define SCE_SYSCON_ERROR_ILLEGAL_STATUS 0x80250101<br />
#define SCE_SYSCON_ERROR_NOEXEC 0x80250102<br />
#define SCE_SYSCON_ERROR_INVALID_FLAGS 0x80250105<br />
<br />
// Syscon error codes are gotten with 0x80250200 | rx[3], where rx is the data returned by Syscon<br />
<br />
typedef struct SceSysconPacket { // size is 0x80<br />
struct SceSysconPacket *next;<br />
SceUInt32 status; // Lower 16 bits contain flags<br />
SceUID semaId;<br />
SceUInt32 index; // Out: returns to which packet list the packet was inserted into<br />
SceUInt8 tx[32]; // tx[0..1] = cmd, tx[2] = size i.e. sizeof(actual_data)+1, rx[3..31] = actual_data<br />
SceUInt8 rx[32]; // rx[0..1] = cmd, rx[2] = size i.e. sizeof(actual_data)+2, rx[3] = error_code, rx[4..31] = actual_data<br />
void *tx_extra;<br />
void *rx_extra;<br />
SceSize rx_extra_size;<br />
SceUInt32 rx_offset;<br />
int (*callback)(SceSysconPacket *packet, void *argp);<br />
void *argp;<br />
SceUInt32 time;<br />
SceUInt32 unk[5];<br />
} SceSysconPacket;<br />
<br />
typedef enum SceSysconControl {<br />
SCE_SYSCON_CTRL_UP = 0x1,<br />
SCE_SYSCON_CTRL_RIGHT = 0x2,<br />
SCE_SYSCON_CTRL_DOWN = 0x4,<br />
SCE_SYSCON_CTRL_LEFT = 0x8,<br />
SCE_SYSCON_CTRL_TRIANGLE = 0x10,<br />
SCE_SYSCON_CTRL_CIRCLE = 0x20,<br />
SCE_SYSCON_CTRL_CROSS = 0x40,<br />
SCE_SYSCON_CTRL_SQUARE = 0x80,<br />
SCE_SYSCON_CTRL_SELECT = 0x100,<br />
SCE_SYSCON_CTRL_LTRIGGER = 0x200,<br />
SCE_SYSCON_CTRL_RTRIGGER = 0x400,<br />
SCE_SYSCON_CTRL_START = 0x800,<br />
SCE_SYSCON_CTRL_PSBUTTON = 0x1000,<br />
SCE_SYSCON_CTRL_POWER = 0x4000,<br />
SCE_SYSCON_CTRL_VOLUP = 0x10000,<br />
SCE_SYSCON_CTRL_VOLDOWN = 0x20000,<br />
SCE_SYSCON_CTRL_HEADPHONE = 0x8000000<br />
} SceSysconControl;<br />
</source><br />
<br />
Flags (passed to <code>sceSysconCmdExecForDriver</code>, etc), also lower bits of <code>status</code>:<br />
{| class="wikitable"<br />
! Flags !! Meaning<br />
|-<br />
| 0x1 || Some kind of priority that helps to select to which packet list the packet is inserted into.<br />
|-<br />
| 0x100 || Do not insert packet checksum (at <code>tx_buf[2 + len]</code>), where <code>len = tx_buf[2]</code>. And don't memset the rest of the buffer to -1 (<code>memset(tx_buf + len + 3, -1, 29 - len)</code>) if len < 29.<br />
|-<br />
| 0x400 || When set, use rx_extra to receive the data. rx_extra_size must be greater than 32.<br />
|-<br />
| 0x800 || When set, use tx_extra instead of tx for sending data. The size is contained in tx_extra[2] and must be smaller or equal to 253. When cleared: use tx and the size is contained in tx[2], which has to be smaller or equal 29.<br />
|}<br />
<br />
== SceSysconForDriver ==<br />
<br />
=== sceSysconErnieShutdownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x94AB13CC<br />
|}<br />
<br />
Calls Syscon command 0xC1.<br />
<br />
<source lang="C"><br />
#define ERNIE_SHUTDOWN_SHUTDOWN 0<br />
#define ERNIE_SHUTDOWN_REBOOT 1<br />
<br />
int sceSysconErnieShutdownForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconErnieResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x14B99945<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconPowerCtrlKermitResetForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=RESET and mode=0: <code>return sceSysconSetPowerModeForDriver(2, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieResetForDriver(void);</source><br />
<br />
=== sceSysconErnieHibernateForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4278E614<br />
|}<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A with type=HIBERNATE and mode=0: <code>return sceSysconSetPowerModeForDriver(5, 0);</code>.<br />
<br />
<source lang="C">int sceSysconErnieHibernateForDriver(void);</source><br />
<br />
=== sceSysconBatterySWResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x87DA378D<br />
|}<br />
<br />
If Syscon version <= 0x70503, it does nothing and returns error 0x8025023F.<br />
<br />
<source lang="C">int sceSysconBatterySWResetForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xF93CF833<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryFullCapacityForDriver.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(SceUInt32 *pCap);</source><br />
<br />
=== sceSysconGetBicTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000 || 0xECFA7242<br />
|-<br />
| 1.000.041-3.740.011 || not present. Renamed to sceSysconGetAbbyTempForDriver.<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replaced (just renaming) by [[#sceSysconGetAbbyTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetBicTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetAbbyTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present. Was named sceSysconGetBicTempForDriver.<br />
|-<br />
| 1.000.041-3.740.011 || 0xE1885F68<br />
|}<br />
<br />
This is a guessed name. Another possible name is sceSysconGetBatteryInternalTempForDriver.<br />
<br />
Replacement (just renaming) for [[#sceSysconGetBicTempForDriver]].<br />
<br />
Calls Syscon command 0x98B.<br />
<br />
<source lang="C">int sceSysconGetAbbyTempForDriver(SceUInt32 *pTemp);</source><br />
<br />
=== sceSysconGetBatteryCycleCountForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCD73079D<br />
|}<br />
<br />
Calls Syscon command 0x98C.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryCycleCountForDriver(SceUInt32 *pCount);</source><br />
<br />
=== sceSysconBatteryStartBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2CEF078E<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStartBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatteryStopBLModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4AE7852<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryStopBLModeForDriver(void);</source><br />
<br />
=== sceSysconBatterySetBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE4F29744<br />
|}<br />
<br />
BL command (1 byte at most) must be contained in either unk_byte or pSrc.<br />
<br />
<source lang="C">int sceSysconBatterySetBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk_byte, void *pSrc, SceUInt8 size);</source><br />
<br />
=== sceSysconBatteryExecBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x74B2AB55<br />
|}<br />
<br />
<source lang="C">int sceSysconBatteryExecBLCommandForDriver(SceUInt16 ctx);</source><br />
<br />
=== sceSysconBatteryReadBLCommandForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x448DAFF1<br />
|}<br />
<br />
<source lang="C"><br />
// size must be between 0 and 0x10<br />
int sceSysconBatteryReadBLCommandForDriver(SceUInt16 ctx, SceUInt8 unk1, SceUInt8 unk2, void *pDst, SceUInt8 size);<br />
</source><br />
<br />
=== sceSysconGetManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x4FEC564C<br />
|}<br />
<br />
<source lang="C">int sceSysconGetManualChargeModeForDriver(int *piMode);</source><br />
<br />
=== sceSysconCtrlManualChargeModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xC6A2C9EF<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlManualChargeModeForDriver(int mode);</source><br />
<br />
=== sceSysconSetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B6A6F64<br />
|}<br />
<br />
Calls Syscon command 0x81.<br />
<br />
Sets current Syscon power on time in ticks of 0.5 second. The set value can be get with [[#sceSysconGetClockForDriver]].<br />
<br />
Used in [[SceRtc]]. Set to 0 just before setting Current Tick, to reset syscon power on time.<br />
<br />
<source lang="C">int sceSysconSetClockForDriver(SceUInt32 time);</source><br />
<br />
=== SceSysconForDriver_51164951 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x51164951<br />
|}<br />
<br />
Calls Syscon command 0x82. On Syscon version < 0x90907, 4 bytes are sent to Syscon, whilst on Syscon version >= 0x90907, 5 bytes are sent to Syscon.<br />
<br />
Sets an alarm tick. The set tick can be get using Syscon command 0x12 via [[#SceSysconForDriver_3168F3AF]].<br />
<br />
Used in [[SceRtc#sceRtcSetAlarmTickForDriver]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_51164951(void *tick);<br />
<br />
// FW 3.600.011-3.740.011<br />
// tick_low: seen value: 0xffffffff during Syscon Init<br />
// tick_hi: some 8-bit flag, seen value: 0 during Syscon Init<br />
int SceSysconForDriver_51164951(SceUint32 tick_low, SceUInt8 tick_hi);<br />
</source><br />
<br />
=== SceSysconForDriver_373ECF8A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x373ECF8A<br />
|}<br />
<br />
Calls Syscon command 0x83. Sends 3 bytes to Syscon. Used only if [[KBL Param#Hardware Info|Hardware Info]] indicates that the motherboard is not IRT-001 or IRT-002 or type 0x10 (maybe named IRS-001) and if console is not in manufacturing mode.<br />
<br />
<source lang="C">int SceSysconForDriver_373ECF8A(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_2659535C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x2659535C<br />
|}<br />
<br />
Calls Syscon command 0x84. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_2659535C(void);</source><br />
<br />
=== SceSysconForDriver_4295D497 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4295D497<br />
|}<br />
<br />
Calls Syscon command 0x85. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int SceSysconForDriver_4295D497(void);</source><br />
<br />
=== sceSysconGetLogInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x701535FC<br />
|}<br />
<br />
Calls Syscon command 0x86.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconLogInfo { // size is 8 on FW 3.600.011<br />
uint8_t unk_0[8];<br />
} SceSysconLogInfo;<br />
<br />
int sceSysconGetLogInfoForDriver(SceSysconLogInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLogStartForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E55CF5E<br />
|}<br />
<br />
Calls Syscon command 0x87. Sends 1 byte to Syscon: 0.<br />
<br />
<source lang="C">int sceSysconLogStartForDriver(void);</source><br />
<br />
=== sceSysconLogReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x487D97F3<br />
|}<br />
<br />
Calls Syscon command 0x88.<br />
<br />
<source lang="C">int sceSysconLogReadDataForDriver(SceUInt16 offset, void *pData, SceSize size);</source><br />
<br />
=== sceSysconLogStartWaitingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x9C0B1E61<br />
|}<br />
<br />
Calls Syscon command 0x89.<br />
<br />
<source lang="C">int sceSysconLogStartWaitingForDriver(void);</source><br />
<br />
=== sceSysconCtrlUSBSupplyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7BFA95DA<br />
|}<br />
<br />
This function is used instead of [[sceSysconCtrlChargeVBUSForDriver]] on PS Vita Slim.<br />
<br />
Calls Syscon command 0x8C8. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
Used in factTest module.<br />
<br />
<source lang="C">int sceSysconCtrlUSBSupplyForDriver(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_451C1662 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x451C1662<br />
|}<br />
<br />
Calls Syscon command 0x8C9. Sends 1 byte to Syscon. Gets 0 byte from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_451C1662(SceUInt8 data);</source><br />
<br />
=== SceSysconForDriver_79074DE4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x79074DE4<br />
|}<br />
<br />
Calls Syscon command 0x8CA. Sends 0 byte to Syscon. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_79074DE4(SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_7D25F6D2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0x7D25F6D2<br />
|}<br />
<br />
Calls Syscon command 0x8CB. Sends 1 byte to Syscon: id. Gets 1 bytes from Syscon: data.<br />
<br />
<source lang="C">int SceSysconForDriver_7D25F6D2(SceUInt8 id, SceUInt8* pData);</source><br />
<br />
=== SceSysconForDriver_D2ADABCA ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xD2ADABCA<br />
|}<br />
<br />
Calls Syscon command 0x8CC. Sends 2 bytes from Syscon: id, data.<br />
<br />
<source lang="C">int SceSysconForDriver_D2ADABCA(SceUInt8 id, SceUInt8 data);</source><br />
<br />
=== sceSysconGetTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3B354824<br />
|}<br />
<br />
Calls Syscon command 0x8CE. Gets 0x10 bytes from Syscon.<br />
<br />
<source lang="C"><br />
typedef struct SceSysconTemperatureLog { // size is 0x10 bytes<br />
char log[16];<br />
} SceSysconTemperatureLog;<br />
<br />
int sceSysconGetTemperatureLogForDriver(SceSysconTemperatureLog *pLog);<br />
</source><br />
<br />
=== sceSysconClearTemperatureLogForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 2.500.071-3.740.011 || 0x3843D657<br />
|}<br />
<br />
Calls Syscon command 0x8CF. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int sceSysconClearTemperatureLogForDriver(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_F87679EE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.12 || not present<br />
|-<br />
| 3.600.011-3.740.011 || 0xF87679EE<br />
|}<br />
<br />
Calls Syscon command 0x8D0. Sends 2 bytes to Syscon.<br />
<br />
Probably related to Syscon Temperature Log.<br />
<br />
<source lang="C">int SceSysconForDriver_F87679EE(SceUInt32 unk);</source><br />
<br />
=== sceSysconGetUsbDetStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xEF810687<br />
|}<br />
<br />
Calls Syscon command 0x805.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int sceSysconGetUsbDetStatusForDriver(SceUInt32 *pStatus);</source><br />
<br />
=== SceSysconForDriver_E7F5D3DC ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7F5D3DC<br />
|}<br />
<br />
Calls Syscon command 0x806.<br />
<br />
Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int SceSysconForDriver_E7F5D3DC(SceUInt32 *pResult);</source><br />
<br />
=== SceSysconForDriver_253CC522 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x253CC522<br />
|}<br />
<br />
Calls Syscon command 0x807. Gets 2 bytes from Syscon.<br />
<br />
On DevKit, it returns 0x8025023F. Maybe supported by PS TV or PS Vita Slim only.<br />
<br />
<source lang="C">int SceSysconForDriver_253CC522(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconCtrlDolceLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x727F985A<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
<source lang="C"><br />
#define STATE_ON 0<br />
#define STATE_BLINK_SLOW 1<br />
#define STATE_BLINK_FAST 2<br />
<br />
int sceSysconCtrlDolceLEDForDriver(SceUInt32 state);<br />
</source><br />
<br />
=== sceSysconGetTimeStampForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4D588A0A<br />
|}<br />
<br />
This is a guessed named, derived from PSP. Temp name was sceSysconGetBaryonTimestampForDriver.<br />
<br />
Returns the timestamp of latest installed Syscon firmware patch, formatted as <code>YYYYMMDDhhmm</code>. This comes from a string stored in Syscon firmware under another format: <code>$Date:: YYYY-MM-DD hh:mm:ss +0900#$</code><br />
<br />
Example: <code>$Date:: 2013-12-13 15:52:05 +0900#$</code> in Syscon firmware becomes <code>201312131552</code> in Syscon command 2.<br />
<br />
<source lang="c"><br />
// pTimestamp will point to a buffer of size 0x10 bytes, containing a string of size 13 (12: length + 1: terminal character)<br />
int sceSysconGetTimeStampForDriver(char *pTimestamp);<br />
</source><br />
<br />
=== sceSysconGetWakeupFactorForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCF5B2F2F<br />
|}<br />
<br />
Result is 2 bytes wakeup factor coming from Syscon command 0x10.<br />
<br />
<source lang="C">int sceSysconGetWakeupFactorForDriver(SceUInt32 *pWakeupFactor);</source><br />
<br />
=== sceSysconCtrlHdmiCecPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x62155962<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
Sets the pin CDC Hot Plug Detect (HPD) state of the HDMI bridge (AD80244 / ADV7533).<br />
<br />
<source lang="c">int sceSysconCtrlHdmiCecPowerForDriver(SceBool enable_HDMI_CDC_HPD_pin);</source><br />
<br />
=== sceSysconCtrlMotionSensorPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x063425AE<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0.<br />
<br />
<source lang="C">int sceSysconCtrlMotionSensorPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3FDD29D6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3FDD29D6<br />
|}<br />
<br />
Calls Syscon command 0x884. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_3FDD29D6(int value, SceBool use_flag);</source><br />
<br />
=== SceSysconForDriver_79E6DD8B ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x79E6DD8B<br />
|}<br />
<br />
Calls Syscon command 0x885. Sends 2 bytes to Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_79E6DD8B(int value, SceBool use_flag);</source><br />
<br />
=== sceSysconCtrlVoltageForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.920.050-3.740.011 || 0x7F198FA2<br />
|}<br />
<br />
Temp name was sceSysconSetVoltageForDriver.<br />
<br />
Calls Syscon command 0x88E.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
/*<br />
type:<br />
0: Reserved<br />
1: DD1 (VDD - IFTU, DMAC, Internal bus, SPM 32KiB/128KiB) SetSysClockFrequency, SetDmac5ClockFrequency, SetBusClockFrequency, SetCameraBusClockFrequency<br />
2: DD2 (VDDA - ARM core, L2 cache) SetArmClockFrequency<br />
3: DD3 (VDDC - Codec Engine, AVC Decoder) SetVipClockFrequency, SetVeneziaClockFrequency<br />
4: DD4 (VDDG - GPU core) SetGpuClockFrequencyInternal, SetGpuXbarClockFrequency, SetCompatClockFrequency<br />
<br />
vid:<br />
0x22 (0.34V)<br />
0x8A (1.38V) - (something got from ScePervasiveForDriver)<br />
*/<br />
<br />
#define SCE_SYSCON_VOLTAGE_DD1 (1)<br />
#define SCE_SYSCON_VOLTAGE_DD2 (2)<br />
#define SCE_SYSCON_VOLTAGE_DD3 (3)<br />
#define SCE_SYSCON_VOLTAGE_DD4 (4)<br />
<br />
int sceSysconCtrlVoltageForDriver(SceUInt32 type, SceUInt32 vid);<br />
</source><br />
<br />
=== sceSysconSetPowerModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8A95D35C<br />
|}<br />
<br />
Temp name was sceSysconResetDeviceForDriver.<br />
<br />
It issues [[SceExcpmgr#SMC_calls|SMC]] 0x11A.<br />
<br />
The <code>mode</code> argument is usually set to <code>0x2</code> or sometimes <code>0x8002</code> (which seems to correspond to some request by the UDC and BT drivers).<br />
<br />
The <code>type</code> argument determines what to do.<br />
<br />
Real definition names are like: "SCE_SYSCON_POWERMODE_MODE_STANDBY".<br />
<br />
{| class="wikitable"<br />
! Type !! Description !! Syscon command arguments <code>{cmd_no_low, cmd_no_hi, args_size, args}</code><br />
|-<br />
| 0 || Power off || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 1 || Suspend (low-power state) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 2 || Reset (cold reset) || <code>{0x01, 8, 1, 0}</code><br />
|-<br />
| 3 || Reset to external boot mode || <code>{0xC1, 0, 2, 0}</code><br />
|-<br />
| 4 || ?Reset to update mode? || <code>{0xC1, 0, 2, 1}</code><br />
|-<br />
| 5 || Hibernate || <code>{0xC2, 0, 2, 0x5A}</code><br />
|-<br />
| 16 || ?Resume? || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|-<br />
| 17 || Resume (soft reset: suspend and immediately resume) || <code>{0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}</code><br />
|}<br />
<br />
<source lang="c">int sceSysconSetPowerModeForDriver(int type, int mode);</source><br />
<br />
=== sceSysconEnableHibernateIOForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x4946538A<br />
|}<br />
<br />
<source lang="C">int sceSysconEnableHibernateIOForDriver(int maybe_enable);</source><br />
<br />
=== sceSysconWaitReadyForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x55DF1C9B<br />
|}<br />
<br />
Temp name was sceSysconWaitInitializedForDriver.<br />
<br />
<source lang="c">int sceSysconWaitReadyForDriver(void);</source><br />
<br />
=== sceSysconCmdSyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x6E517D22<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdSyncForDriver(SceSysconPacket *packet, int noWait);</source><br />
<br />
=== sceSysconCmdExecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9ADDCA4A<br />
|}<br />
<br />
<source lang="c">int sceSysconCmdExecForDriver(SceSysconPacket *packet, unsigned int flags);</source><br />
<br />
=== sceSysconCmdExecAsyncForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2224E82<br />
|}<br />
<source lang="c">int sceSysconCmdExecAsyncForDriver(SceSysconPacket *packet, u32 flags, int (*callback)(SceSysconPacket *, void *), void *argp);</source><br />
<br />
=== sceSysconCtrlSdPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xBE1ADE4F<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x888.<br />
<br />
Enables/disables GameCard reader.<br />
<br />
Used in [[SceSdstor]].<br />
<br />
<source lang="c"><br />
// param: 1 = enable SD (GameCard reader) power, 0 = disable SD (GameCard reader) power<br />
int sceSysconCtrlSdPowerForDriver(SceUInt16 param);<br />
</source><br />
<br />
=== sceSysconCtrlWirelessPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0x4FBDA504<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If Syscon version is strictly lower than 0x40000, it does nothing and returns 0. Calls Syscon command 0x88A.<br />
<br />
Replaced by function [[#sceSysconCtrlWirelessPower2ForDriver]].<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconCtrlWirelessPower2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA2E85DB9<br />
|}<br />
<br />
Replacement function for [[#sceSysconCtrlWirelessPowerForDriver]]. Calls Syscon command 0x88A.<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPower2ForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconCtrlWirelessPowerDownForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || 0xDF8C6D2D<br />
|-<br />
| 0.996.090-3.740.011 || not present<br />
|}<br />
<br />
If motherboard is not "hardware info third byte 0x10" (probably IRS-001), it does nothing and returns 0, probably because missing hardware. Calls Syscon command 0xB1. Wireless power down might be a button to enable/disable Wireless, like on PSP.<br />
<br />
<source lang="C">int sceSysconCtrlWirelessPowerDownForDriver(SceUInt16 param);</source><br />
<br />
=== sceSysconGetConfigStorageInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.995.000-3.740.011 || 0xCE48E8EB<br />
|}<br />
<br />
Get Syscon Config Storage Info using Syscon command 0x1300.<br />
<br />
Config Storage Info is part of the [[Syscon]] "ConfZZ" header.<br />
<br />
<source lang="C"><br />
typedef struct SceKernelConfigStorageInfo { // size is 8 bytes<br />
SceUInt16 version;<br />
SceUInt16 unk_2;<br />
SceUInt32 unk_4;<br />
} SceKernelConfigStorageInfo;<br />
<br />
int sceSysconGetConfigStorageInfoForDriver(SceKernelConfigStorageInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconLoadConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x89C5CFD6<br />
|}<br />
<br />
Calls Syscon command 0x1385.<br />
<br />
The OS uses this function to change between modes: IDU mode, Show Mode, no mode. This works by spoofing or rewriting [[KBL Param#Hardware Info|Hardware Info]]. This is reboot persistent.<br />
<br />
<source lang="C">int sceSysconLoadConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== sceSysconVerifyConfigstorageScriptForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xCC6F90A8<br />
|}<br />
<br />
Calls Syscon command 0x1386.<br />
<br />
This function is not used in the OS and anyway it would always return error because it calls a command that is not implemented in Syscon FW.<br />
<br />
<source lang="C">int sceSysconVerifyConfigstorageScriptForDriver(int a1, void *pScript, SceSize size);</source><br />
<br />
=== SceSysconForDriver_FD65FFCB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xFD65FFCB<br />
|}<br />
<br />
Calls Syscon command 0x1392.<br />
<br />
<source lang="C">int SceSysconForDriver_FD65FFCB(SceUInt8 offset, SceUInt16 a2);</source><br />
<br />
=== sceSysconBeginConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xA4968B8C<br />
|}<br />
<br />
<source lang="C">int sceSysconBeginConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconCommitConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x7B9B3617<br />
|}<br />
<br />
<source lang="C">int sceSysconCommitConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconEndConfigstorageTransactionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xFCC3E8EE<br />
|}<br />
<br />
<source lang="C">int sceSysconEndConfigstorageTransactionForDriver(void);</source><br />
<br />
=== sceSysconSetDebugHandlersForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF245CD6F<br />
|}<br />
<br />
<source lang="c"><br />
/** A set of debug handlers for syscon, that you can set in sceSysconSetDebugHandlersForDriver(). */<br />
typedef struct SceSysconDebugHandlers {<br />
/** Structure size (probably, unused). */<br />
s32 size;<br />
/** Callback ran right before running a packet, with a pointer to it passed as the first argument. */<br />
void (*start)(SceSysconPacket *packet);<br />
/** Callback ran right after finishing running a packet, with a pointer to it passed as the first argument. */<br />
void (*end)(SceSysconPacket *packet);<br />
} SceSysconDebugHandlers;<br />
<br />
int sceSysconSetDebugHandlersForDriver(SceSysconDebugHandlers *debug_handlers);<br />
</source><br />
<br />
=== sceSysconGetBatteryCalibDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.36 || not present<br />
|-<br />
| 3.500.011-3.740.011 || 0x9ADC9936<br />
|}<br />
<br />
<source lang="C">int sceSysconGetBatteryCalibDataForDriver(int *piData1, int *piData2, int *piData3, int *piData4);</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF492E69E<br />
|}<br />
<br />
<source lang="C"><br />
typedef struct SceKernelTouchpanelDeviceInfo { // size is 8 bytes<br />
uint16_t FrontVendorID;<br />
uint16_t FrontFirmwareRev;<br />
uint16_t RearVendorID;<br />
uint16_t RearFirmwareRev;<br />
} SceKernelTouchpanelDeviceInfo;<br />
<br />
int sceSysconGetTouchpanelDeviceInfoForDriver(SceKernelTouchpanelDeviceInfo *pInfo);<br />
</source><br />
<br />
=== sceSysconGetTouchpanelDeviceInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.690.011-3.740.011 || 0x030D447F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Returns extended touchpanel info.<br />
<br />
<source lang="C"><br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelInfo { // size is 0xA bytes<br />
SceUInt16 vendorID;<br />
SceUInt16 firmwareRev;<br />
SceUInt16 configRev;<br />
SceUInt8 hwVersion;<br />
SceUInt8 vendorInfo;<br />
SceUInt16 reserved;<br />
} SceKernelTouchpanelInfo;<br />
<br />
// this is a guessed name<br />
typedef struct SceKernelTouchpanelDeviceInfo2 { // size is 0x14 bytes<br />
SceKernelTouchpanelInfo front;<br />
SceKernelTouchpanelInfo rear;<br />
} SceKernelTouchpanelDeviceInfo2;<br />
<br />
int sceSysconGetTouchpanelDeviceInfo2ForDriver(SceKernelTouchpanelDeviceInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconMotionGetMeasureDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x270B7B0B<br />
|}<br />
<br />
Calls Syscon command 0x400.<br />
<br />
=== sceSysconMotionGetDeviceInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD01E64FC<br />
|}<br />
<br />
Returns motion sensor device info.<br />
<br />
Calls Syscon command 0x480.<br />
<br />
See [[SceMotionDev#sceMotionDevGetDeviceInfoForDriver]] for the SceKernelMotionDeviceInfo structure.<br />
<br />
<source lang="C">int sceSysconMotionGetDeviceInfoForDriver(SceKernelMotionDeviceInfo *pInfo);</source><br />
<br />
=== SceSysconForDriver_9A7858B6 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9A7858B6<br />
|}<br />
<br />
Calls Syscon command 0x481. Sends 3 bytes to Syscon.<br />
<br />
Probably used to send information to the motion sensor device.<br />
<br />
<source lang="C">int SceSysconForDriver_9A7858B6(SceBool a1, SceUint16 a2);</source><br />
<br />
=== sceSysconGetHardwareInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCBD6D8BC<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info|Hardware Info]] obtained from Syscon command 0x5.<br />
<br />
<source lang="C">int sceSysconGetHardwareInfoForDriver(void);</source><br />
<br />
=== sceSysconGetHardwareInfo2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x965C68C3<br />
|}<br />
<br />
Returns [[KBL Param#Hardware Info 2|Hardware Info 2]] obtained from Syscon command 0x6.<br />
<br />
This function was certainly added for PS Vita Slim or PS TV support because [[KBL Param#Hardware Info|Hardware Info]] risked being fulfilled if too many hardware revisions were made.<br />
<br />
Used in [[SceAudio#SceAudioIn|SceAudioIn]] (maybe to check Conexant IC), [[SceCodec]] (maybe to check Conexant IC), and [[SceVshBridge#vshSysconGetHardwareInfo2|_vshSysconGetHardwareInfo2]].<br />
<br />
<source lang="C"><br />
typedef struct SceKernelHardwareInfo2 {<br />
SceUInt8 flags[0x10];<br />
} SceKernelHardwareInfo2;<br />
<br />
int sceSysconGetHardwareInfo2ForDriver(SceKernelHardwareInfo2 *pInfo);<br />
</source><br />
<br />
=== sceSysconGetErnieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.740.011 || 0xFF86F4C5<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconGetBaryonVersionForDriver.<br />
<br />
<source lang="c">int sceSysconGetErnieVersionForDriver(void);</source><br />
<br />
=== SceSysconForDriver_EBE3262C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBE3262C<br />
|}<br />
<br />
In [[SceSblPostSsMgr]], used just after [[#sceSysconGetErnieVersionForDriver]].<br />
<br />
Returns 8 bits of some Syscon Mode information. Bit 6 (from right) is Syscon DownLoader Mode flag. Bit 3 (from right) is Power Online flag.<br />
<br />
<source lang="C">SceUInt8 SceSysconForDriver_EBE3262C(void);</source><br />
<br />
=== sceSysconIsDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x9ADD60D2<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconIsDealDownLoaderModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB7BCC638<br />
|}<br />
<br />
<source lang="C">int sceSysconIsDealDownLoaderModeForDriver(void);</source><br />
<br />
=== sceSysconNopForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0D0B6D25<br />
|}<br />
<br />
<source lang="C">int sceSysconNopForDriver(void);</source><br />
<br />
=== sceSysconIsPowerOnlineForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9DA2A5AB<br />
|}<br />
<br />
Returns true iff Syscon information bit 3 (from right) is set. See also [[#SceSysconForDriver_EBE3262C]].<br />
<br />
Used in many [[ScePower]] functions for example before setting display brightness (to save battery).<br />
<br />
<source lang="C">SceBool sceSysconIsPowerOnlineForDriver(void);</source><br />
<br />
=== sceSysconGetErnieDLVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD2F456DC<br />
|}<br />
<br />
Calls Syscon command 0x1100.<br />
<br />
<source lang="C">void sceSysconGetErnieDLVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetBatteryVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x68E0031E<br />
|}<br />
<br />
Battery IC codename: if HWinfo > 7 "Abby" else unknown codename, maybe just "Bic".<br />
<br />
<source lang="C">int sceSysconGetBatteryVersionForDriver(SceUInt16 *HWinfo, SceUInt16 *FWinfo, SceUInt16 *DFinfo);</source><br />
<br />
=== sceSysconReadCookieStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.81 || not present<br />
|-<br />
| 2.000.081-3.740.011 || 0xDFB024C4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Temp name was sceSysconAbbySyncForDriver.<br />
<br />
<source lang="C">int sceSysconReadCookieStatusForDriver(SceUInt32 *puiStatus);</source><br />
<br />
=== sceSysconGetManufacturesStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3E09A1F4<br />
|}<br />
<br />
In theory, this function should only be called when Product Mode is already set.<br />
<br />
<source lang="C">int sceSysconGetManufacturesStatusForDriver(int *piStatus);</source><br />
<br />
=== sceSysconReadScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x299B1CE7<br />
|}<br />
<br />
Temp name was sceSysconReadCommandForDriver, sceSysconVsReadDataForDriver.<br />
<br />
Calls Syscon command 0x90.<br />
<br />
Used in [[SceRtc]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconReadScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconWriteScratchPadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xE26488B9<br />
|}<br />
<br />
Temp name was sceSysconSendCommandForDriver, sceSysconVsWriteDataForDriver.<br />
<br />
Calls Syscon command 0x91.<br />
<br />
Used in [[SceRtc]] and [[ScePower]].<br />
<br />
See also [[Ernie#Syscon_Scratch_Pad|Syscon Scratchpad structure]].<br />
<br />
<source lang="C"><br />
// size: On FW 3.60, must be between 0 and 0x18. On FW 0.931, must be 2, 4 or 8.<br />
// offset: Must be between 0 and 0xFF.<br />
// offset + size must not exceed 0x100<br />
int sceSysconWriteScratchPadForDriver(SceUInt32 offset, void *buffer, SceSize size);<br />
</source><br />
<br />
=== sceSysconNvsSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x81A6060D<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]].<br />
<br />
<source lang="C"><br />
// mode: 0 before NVS read/write<br />
int sceSysconNvsSetRunModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsSetUnkModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2EC6D55D<br />
|}<br />
<br />
<source lang="C"><br />
// mode: unk<br />
int sceSysconNvsSetUnkModeForDriver(int mode);<br />
</source><br />
<br />
=== sceSysconNvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACAFA2B8<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsReadDataForKernel|sceSblNvsReadDataForKernel]] and [[SceSblSsMgr#sceSblSsGetNvsDataForDriver|sceSblSsGetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsReadDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconNvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x10C9657A<br />
|}<br />
<br />
Used in [[SceSblSsMgr#sceSblNvsWriteDataForKernel|sceSblNvsWriteDataForKernel]] and [[SceSblSsMgr#sceSblSsSetNvsDataForDriver|sceSblSsSetNvsDataForDriver]].<br />
<br />
<source lang="C">int sceSysconNvsWriteDataForDriver(SceUInt32 offset, void *buffer, SceSize size);</source><br />
<br />
=== sceSysconGetMultiCnInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x1503D6A0<br />
|}<br />
<br />
Returns data obtained by Syscon command 0x103.<br />
<br />
Returns 0x4ff00 when nothing is connected.<br />
<br />
Returns 0x40080 when pin 11 is pulled to GND.<br />
<br />
Returns 0x40680 when pin 12 is pulled to GND.<br />
<br />
Returns 0x40380 when pin 12 is pulled to GND while pin 11 pulled to ground via 100K resistor.<br />
<br />
Returns 0x40000 on PSTV<br />
<br />
Bits 8 and 9 indicate that an audio-out dock is connected.<br />
<br />
Bits 8, 9, 11, 12, 13, 14 and 15 indicate that [[UDC]] pins are connected.<br />
<br />
Used in [[SceHpremote]], [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconGetMultiCnInfoForDriver(SceUInt32 *pInfo);</source><br />
<br />
=== sceSysconSetMultiCnPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x8AAB6308<br />
|}<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C"><br />
// port: 0: for JIG mode, 1 for UART0 logging mode, 0x10000: for normal mode<br />
int sceSysconSetMultiCnPortForDriver(int port);<br />
</source><br />
<br />
=== sceSysconCtrlLedPwmBlinkForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x6F586D1A<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C"><br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
// unk: SceLedConfig.unk_4<br />
<br />
int sceSysconCtrlLedPwmBlinkForDriver(int device, SceUInt32 unk);<br />
</source><br />
<br />
=== sceSysconSetChargeLedCtrlForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x9CA6EB70<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
On motherboards IRT-001 and older, it does nothing and returns 0, probably because missing hardware that could be a LED, else it sends 2 bytes using Syscon command 0x89E.<br />
<br />
Used in [[ScePower#ScePowerForDriver_38415146]]. Related to LED.<br />
<br />
<source lang="C">int sceSysconSetChargeLedCtrlForDriver(SceBool state);</source><br />
<br />
=== sceSysconCtrlAccPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x8D1D97E8<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlAccPowerForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlUsbStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931-3.60 || 0x59DC5938<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x89A.<br />
<br />
Related to [[SceUdcd]] and [[ScePower]].<br />
<br />
<source lang="C">int sceSysconCtrlUsbStatusForDriver(SceUInt32 value);</source><br />
<br />
=== sceSysconCtrlRMRPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0x710A7CF0<br />
|}<br />
<br />
Temp name was sceSysconCtrlMsPowerForDriver.<br />
<br />
<source lang="c">int sceSysconCtrlRMRPowerForDriver(int enable_power);</source><br />
<br />
=== sceSysconCtrlMultiCnPowerForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xB1F88B11<br />
|}<br />
<br />
<source lang="C">int sceSysconCtrlMultiCnPowerForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_3274A925 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x3274A925<br />
|}<br />
<br />
Temp name was sceSysconCtrlDolceUsbPowerForDriver.<br />
<br />
This function enables/disables a USB bus related to either PS Vita IRS-1001 Wlan/Bt module USB or PS Vita 3G modem USB. This also affects PS TV USB host and maybe also PS TV ethernet.<br />
<br />
Used in [[SceUsbEtherSmsc]], [[SceUsbServ]].<br />
<br />
This function was maybe added to support IRS-1001 motherboard.<br />
<br />
<source lang="C">int SceSysconForDriver_3274A925(SceBool enable);</source><br />
<br />
=== sceSysconJigOpenPortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x44A173F5<br />
|}<br />
<br />
<source lang="C">int sceSysconJigOpenPortForDriver(void);</source><br />
<br />
=== sceSysconJigClosePortForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x483FAE05<br />
|}<br />
<br />
<source lang="C">int sceSysconJigClosePortForDriver(void);</source><br />
<br />
=== sceSysconJigSetConfigForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD24BF916<br />
|}<br />
<br />
<source lang="C">int sceSysconJigSetConfigForDriver(SceUInt8 a1, SceUInt8 a2);</source><br />
<br />
=== sceSysconOutputClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x058941D7<br />
|}<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB0.<br />
<br />
=== sceSysconCtrlHostOutputViaDongleForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xDECCB2B4<br />
|}<br />
<br />
Enables / disables Kermit UART0 output (logs) via Dongle (Jig).<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB2.<br />
<br />
<source lang="C">int sceSysconCtrlHostOutputViaDongleForDriver(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_33B5CDB3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.996.090-3.740.011 || 0x33B5CDB3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB3.<br />
<br />
This function was probably added to support IRS-002 motherboard.<br />
<br />
=== SceSysconForDriver_F6D4DDC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xF6D4DDC4<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB4. It is probably the "get" equivalent of [[#SceSysconForDriver_00AE3AEB]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_00AE3AEB ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x00AE3AEB<br />
|}<br />
<br />
It is probably a "sceSysconCtrl...ForDriver" function.<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB5. It is probably the "set" equivalent of [[#SceSysconForDriver_F6D4DDC4]].<br />
<br />
This function was added to support IRS-1001 motherboard.<br />
<br />
=== SceSysconForDriver_0D300158 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x0D300158<br />
|}<br />
<br />
It is probably a "sceSysconCtrl...ForDriver" function.<br />
<br />
Sends 2 bytes to Syscon using Syscon command 0xB6. It is probably the "set" equivalent of [[#SceSysconForDriver_91EF4EC3]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== SceSysconForDriver_91EF4EC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.100.081-3.740.011 || 0x91EF4EC3<br />
|}<br />
<br />
Reads from Syscon using Syscon command 0xB7. It is probably the "get" equivalent of [[#SceSysconForDriver_0D300158]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
=== receive_pm_sm_jig_msg_from_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3C80B529<br />
|}<br />
<br />
Calls Syscon command 0x2083.<br />
<br />
<source lang="C">int receive_pm_sm_jig_msg_from_syscon(SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_short_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 3.600.011-3.740.011 || 0xCE346793<br />
|}<br />
<br />
Calls Syscon command 0x2084.<br />
<br />
Sends a message of maximum 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_short_msg_to_syscon(SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_jig_msg_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x7BFBA09E<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Sends a message by chunks of 0x18 bytes.<br />
<br />
<source lang="C">int send_pm_sm_jig_msg_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size, void *pMsg);</source><br />
<br />
=== send_pm_sm_stop_to_syscon ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x933D813F<br />
|}<br />
<br />
Calls Syscon command 0x2085.<br />
<br />
Used just after send_pm_sm_jig_msg_to_syscon or when it fails before.<br />
<br />
<source lang="C">int send_pm_sm_stop_to_syscon(SceUInt8 a1, SceUInt8 offset, SceUInt8 size);</source><br />
<br />
=== sceSysconIduModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x956D07CB<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeSetForDriver(void);</source><br />
<br />
=== sceSysconIduModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.030.071-3.740.011 || 0x34574496<br />
|}<br />
<br />
<source lang="C">int sceSysconIduModeClearForDriver(void);</source><br />
<br />
=== sceSysconShowModeSetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x6D65B70F<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeSetForDriver(void);</source><br />
<br />
=== sceSysconShowModeClearForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.50 || not present<br />
|-<br />
| 1.600.061-3.740.011 || 0x8D7724C0<br />
|}<br />
<br />
<source lang="C">int sceSysconShowModeClearForDriver(void);</source><br />
<br />
=== sceSysconSetWlanCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || 0x4DEB8712<br />
|-<br />
| 1.03-3.740.011 || not present<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers a Wlan-related callback.<br />
<br />
index 5 on FWs 0.931.010-0.940.<br />
<br />
=== SceSysconForDriver_18A6F4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x18A6F4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_C0F215B7]].<br />
<br />
<source lang="C">int SceSysconForDriver_18A6F4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_DE613081 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xDE613081<br />
|}<br />
<br />
A guessed name is sceSysconSetHeadphoneCallbackForDriver.<br />
<br />
Registers an headphone remote related callback.<br />
<br />
index 1 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
Related to [[#SceSysconForDriver_C3504ADE]].<br />
<br />
<source lang="C">int SceSysconForDriver_DE613081(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_229A07C2 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x229A07C2<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 2 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
Related to [[#SceSysconForDriver_B832B72C]].<br />
<br />
<source lang="C">int SceSysconForDriver_229A07C2(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_8351526D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x8351526D<br />
|}<br />
<br />
A guessed name is sceSysconSetAlarmTimerCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 3 on FW 3.600.011.<br />
<br />
Used in [[SceRtc]].<br />
<br />
Related to [[#SceSysconForDriver_86BAAF7D]].<br />
<br />
<source lang="C">int SceSysconForDriver_8351526D(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_9F8340FF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x9F8340FF<br />
|}<br />
<br />
A guessed name is sceSysconSetResumeRequestCallbackForDriver.<br />
<br />
Registers the "is resume requested" callback.<br />
<br />
Used in [[ScePower]] to register a callback that sets the [[ScePower]] global variable g_resume_requested to SCE_TRUE.<br />
<br />
index 4 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_A57B5433]].<br />
<br />
<source lang="C">int SceSysconForDriver_9F8340FF(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_35E1689F ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x35E1689F<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
index 5 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACC7F71E]].<br />
<br />
<source lang="C">int SceSysconForDriver_35E1689F(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_474A9EA7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x474A9EA7<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xC on FWs 0.931.010-0.940. index 6 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_769F9AC4]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_474A9EA7(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_4E88B4D9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x4E88B4D9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 8 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4BC63A40]].<br />
<br />
No use case seen. Maybe used in internal modules for Jig.<br />
<br />
<source lang="C">int SceSysconForDriver_4E88B4D9(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_376CCCB8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x376CCCB8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 9 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_99A254A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_376CCCB8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_3BAAC8A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.995.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x3BAAC8A9<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0xA on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9A4F4B7C]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_3BAAC8A9(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAccCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0x4A42712F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for accessory port.<br />
<br />
index 0xF on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetAccCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3F0DB7C0<br />
|}<br />
<br />
Registers the low-battery callback.<br />
<br />
index 6 on FWs 0.931-0.940. index 0x10 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_80D6E061 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x80D6E061<br />
|}<br />
<br />
A guessed name is sceSysconSetBatteryOnlineCallbackForDriver.<br />
<br />
Registers a callback. Maybe related to Battery online status.<br />
<br />
index 0x11 on FW 3.600.011.<br />
<br />
<source lang="C">int SceSysconForDriver_80D6E061(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_7682FE69 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 1.000.071-3.740.011 || 0x7682FE69<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x12 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_4A184B7C]].<br />
<br />
<source lang="C">int SceSysconForDriver_7682FE69(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_E0D52DF0 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0xE0D52DF0<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a battery-related callback.<br />
<br />
No use case seen.<br />
<br />
index 0x13 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_ACEE1C70]].<br />
<br />
<source lang="C">int SceSysconForDriver_E0D52DF0(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2D471528 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x2D471528<br />
|}<br />
<br />
A guessed name is sceSysconSet...Battery...CallbackForDriver.<br />
<br />
Registers a callback very similar to the low battery callback.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x14 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_03C50DC3]].<br />
<br />
<source lang="C">int SceSysconForDriver_2D471528(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_129EA022 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x129EA022<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Used in [[ScePower]].<br />
<br />
index 0x15 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_BFDA5590]].<br />
<br />
<source lang="C">int SceSysconForDriver_129EA022(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_85E5DEBF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x85E5DEBF<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
index 0x16 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_63B14156]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_85E5DEBF(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetThermalAlertCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x773B8126<br />
|}<br />
<br />
Registers the thermal alert callback.<br />
<br />
index 0x17 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_50CAE242]].<br />
<br />
<source lang="C">int sceSysconSetThermalAlertCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_2E4BA4B8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x2E4BA4B8<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x19 on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_29CF4335]].<br />
<br />
No use case seen. Maybe used in internal modules for Jig.<br />
<br />
<source lang="C">int SceSysconForDriver_2E4BA4B8(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_C442D0BE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0xC442D0BE<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1A on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_9F4042F8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_C442D0BE(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_61AE3970 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0x61AE3970<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x1B on FW 3.600.011.<br />
<br />
Related to [[#SceSysconForDriver_C50568E9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_61AE3970(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x94678881<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-reboot callback.<br />
<br />
index 0x1C on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x7AA00C01<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers the low-battery-inhibit-update-download callback.<br />
<br />
index 0x1D on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetStandbyButtonCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x423D0C58<br />
|}<br />
<br />
Registers a callback.<br />
<br />
index 0x20 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int sceSysconSetStandbyButtonCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_154676F1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x154676F1<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x21 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_154676F1(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_63352A39 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x63352A39<br />
|}<br />
<br />
A guessed name is sceSysconSetMicrophoneCallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x22 on FW 3.600.011.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_63352A39(void *cb_0, void *cb_1);</source><br />
<br />
=== SceSysconForDriver_14730196 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.990.000-3.740.011 || 0x14730196<br />
|}<br />
<br />
A guessed name is sceSysconSet...CallbackForDriver.<br />
<br />
Registers a callback.<br />
<br />
index 0x23 on FW 3.600.011.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">int SceSysconForDriver_14730196(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetAlarmCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32418370<br />
|}<br />
<br />
Registers the alarm callback.<br />
<br />
index 0 on FWs 0.931.010-0.940. index 0x24 on FW 3.600.011.<br />
<br />
<source lang="C">int sceSysconSetAlarmCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMultiCnOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xA26586B2<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for multi-connector OTG on PS Vita Fat.<br />
<br />
index 0x25 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMultiCnOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconSetMiniUsbOtgCallbackForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x67A4CB9F<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Registers 2 callbacks (maybe constructor and destructor or callback and args) for mini-USB OTG on PS Vita Slim.<br />
<br />
index 0x26 on FW 3.600.011.<br />
<br />
Used in [[SceUsbServ]].<br />
<br />
<source lang="C">int sceSysconSetMiniUsbOtgCallbackForDriver(void *cb_0, void *cb_1);</source><br />
<br />
=== sceSysconUpdaterSetSegmentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B00BC7F<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// segment_no: a 8bit value<br />
int sceSysconUpdaterSetSegmentForDriver(SceUInt32 segment_no);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x356B9696<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegmentForDriver.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramDataForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterSendProgramData2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x734544E4<br />
|}<br />
<br />
This is a guessed name. Temp name was sceSysconUpdaterLoadSegment2ForDriver.<br />
<br />
Same functionality as [[#sceSysconUpdaterLoadSegmentForDriver]] except that the segment is copied to an intermediate 0x7A-byte zeroed buffer. This implementation seems bad as the Syscon packet first 6 bytes are written twice.<br />
<br />
Buffer overflow if (size > 0x80 - 6).<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// pSegment: the encrypted Syscon firmware segment to send<br />
// offset<br />
// size: should be between 0 and 0x80 but usual chunks are 0x10 or 0x40, last chunk being less (no padding)<br />
int sceSysconUpdaterSendProgramData2ForDriver(void *pSegment, SceUInt32 offset, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCalcChecksumForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD27C3D80<br />
|}<br />
<br />
Computes checksum to use with [[#sceSysconUpdaterExecProgrammingForDriver]]. It does not call any Syscon command.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterCalcChecksumForDriver(void *data, SceSize size, int *puiChecksum);</source><br />
<br />
=== sceSysconUpdaterExecProgrammingForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x69AD76E4<br />
|}<br />
<br />
Executes programming, i.e writes segments to Syscon Flash memory.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// checksum: value got from sceSysconUpdaterCalcChecksumForDriver<br />
int sceSysconUpdaterExecProgrammingForDriver(int checksum);<br />
</source><br />
<br />
=== sceSysconUpdaterSetRunModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB487C2FB<br />
|}<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C">int sceSysconUpdaterSetRunModeForDriver(int mode);</source><br />
<br />
=== sceSysconUpdaterExecFinalizeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC7747A63<br />
|}<br />
<br />
Finalize Syscon update by sending checksum from ARM to Syscon.<br />
<br />
Calls Syscon command 0x1184.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// digest: sha1 of decrypted concatenated segments, comes from Syscon Update package packet type 0x20<br />
// size: usually 0x14 (sha1 size)<br />
int sceSysconUpdaterExecFinalizeForDriver(void *digest, SceSize size);<br />
</source><br />
<br />
=== sceSysconUpdaterCheckSignatureForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xCBA836FF<br />
|}<br />
<br />
Sends a 0x18-byte buffer to Syscon command 0x1185. This Syscon command 0x1185 seems to be unimplemented in recent Syscon firmwares: it does not do anything. It can be explained by the fact that the signature packet is not embedded in Syscon Update SPKGs.<br />
<br />
Used in [[SceSblUpdateMgr]].<br />
<br />
<source lang="C"><br />
// size: must be 0x18<br />
int sceSysconUpdaterCheckSignatureForDriver(void *pSig, SceSize size);<br />
</source><br />
<br />
=== SceSysconForDriver_4D03754A ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x4D03754A<br />
|}<br />
<br />
Temp name was syscon_update_command_0xD00002.<br />
<br />
Calls Syscon command 0xD0.<br />
<br />
Used in [[SceSblUpdateMgr]] with [[update_service_sm]] function [[Secure_Modules_Functions#0xD0002|0xD0002]].<br />
<br />
<source lang="C"><br />
// in_buf: buffer that embeds input data, usually 0xD0002 command request + 8<br />
// in_size: usually 0x28<br />
// out_buf: buffer to receive result, usually 0xD0002 command request + 0x30<br />
// out_size: usually 0x28<br />
int SceSysconForDriver_4D03754A(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== SceSysconForDriver_C14BD637 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 1.000.041-3.740.011 || 0xC14BD637<br />
|}<br />
<br />
Calls Syscon command 0xD1.<br />
<br />
Seems unused.<br />
<br />
<source lang="C">int SceSysconForDriver_C14BD637(void);</source><br />
<br />
=== sceSysconSnvsReadDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xEBDF88B9<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD2.<br />
<br />
Used in [[SceSblPostSsMgr]] to read data from SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] commands 0xB0002 and 0xC0002.<br />
<br />
<source lang="C"><br />
// in_size: 0x10<br />
// out_size: 0x30<br />
int sceSysconSnvsReadDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSnvsWriteDataForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x63683B9B<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0xD3.<br />
<br />
Used in [[SceSblPostSsMgr]] to write data to SNVS with [[pm_sm]] command 8. Also used in [[SceSblUpdateMgr]] with [[update_service_sm]] functions [[Secure_Modules_Functions#0xB0002 - sceSblUsSmSnvsEncryptDecryptSector|0xB0002]] and [[Secure_Modules_Functions#0xC0002 - sceSblUsSmSnvsEncryptDecryptMgmtData|0xC0002]].<br />
<br />
<source lang="C"><br />
// in_size: 0x30<br />
// out_size: 0x10<br />
int sceSysconSnvsWriteDataForDriver(void *in_buf, SceSize in_size, void *out_buf, SceSize out_size);<br />
</source><br />
<br />
=== sceSysconSetAffirmativeRertyModeForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x901D6CD4<br />
|}<br />
<br />
This is an official name. Typo is the name is intentional.<br />
<br />
Sets AffirmativeRertyMode flag in kernel memory. During SceSyscon initialization, AffirmativeRertyMode is enabled by default.<br />
<br />
AffirmativeRertyMode flag is used by [[SceSyscon]] kernel module when executing Syscon commands.<br />
<br />
Used in [[SceCtrl]], [[ScePower]].<br />
<br />
<source lang="C">int sceSysconSetAffirmativeRertyModeForDriver(int enable);</source><br />
<br />
=== sceSysconGetControlsInfoForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x145F59A4<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
See [[KBL Param#Boot Controls Info|Boot Controls Info]].<br />
<br />
Calls Syscon command 0x100.<br />
<br />
<source lang="C">int sceSysconGetControlsInfoForDriver(SceUInt32 *pCtrl);</source><br />
<br />
=== SceSysconForDriver_76272CB9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x76272CB9<br />
|}<br />
<br />
Calls Syscon command 0x120. Gets a 4-byte value.<br />
<br />
<source lang="C">int SceSysconForDriver_76272CB9(SceUInt32 *pRes);</source><br />
<br />
=== sceSysconGetClockForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7BEFF8B<br />
|}<br />
<br />
Gets Syscon power-on time in ticks of 0.5 second. Each second the counter automatically increases by 2.<br />
<br />
Calls Syscon command 0x11.<br />
<br />
Used in [[SceRtc]] to calculate the current time and date.<br />
<br />
<source lang="C">int sceSysconGetClockForDriver(SceUInt32 *puiTime);</source><br />
<br />
=== SceSysconForDriver_3168F3AF ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x3168F3AF<br />
|}<br />
<br />
Calls Syscon command 0x12.<br />
<br />
Gets the tick of an alarm timer. The alarm tick must be set using Syscon command 0x82 via [[#SceSysconForDriver_51164951]].<br />
<br />
<source lang="C"><br />
// FW 0.931.010<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTick);<br />
<br />
// FW 3.600.011-3.740.011<br />
int SceSysconForDriver_3168F3AF(SceUInt32 *pTickLow, SceUInt8 *pTickHi);<br />
</source><br />
<br />
=== SceSysconForDriver_BA09F171 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.990.000-3.740.011 || 0xBA09F171<br />
|}<br />
<br />
Calls Syscon command 0x13.<br />
<br />
It might be related to alarm/timer. Sends 0 byte to Syscon. Gets 2 bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_BA09F171(SceUInt8 *pResult, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_93075DD1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x93075DD1<br />
|}<br />
<br />
Calls Syscon command 0x14. Sends 0 byte to Syscon. Gets ?1-4? bytes from Syscon.<br />
<br />
<source lang="C">int SceSysconForDriver_93075DD1(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetPowerStatusForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x175CE5A1<br />
|}<br />
<br />
Calls Syscon command 0x883. Gets 8 bytes from Syscon. Reads Elmo registers 0xA0 through 0xA3.<br />
<br />
<source lang="C"><br />
// pStatus: pointer to a buffer of at least 8 bytes<br />
int sceSysconGetPowerStatusForDriver(void *pStatus);<br />
</source><br />
<br />
=== sceSysconCtrlDeviceResetForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x40FF3898<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x88F.<br />
<br />
Example:<br />
* (0xC,0) : Touchpanel Front or Rear device<br />
* (0xC,1) : Touchpanel Front or Rear device<br />
<br />
<source lang="C">int sceSysconCtrlDeviceResetForDriver(SceUInt8 a1, SceUInt8 a2);</source><br />
<br />
=== SceSysconForDriver_285594F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x285594F8<br />
|}<br />
<br />
Calls Syscon command 0x890.<br />
<br />
<source lang="C">int SceSysconForDriver_285594F8(SceUInt16 value);</source><br />
<br />
=== sceSysconCtrlLEDForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x04EC7579<br />
|}<br />
<br />
<source lang="C"><br />
#define STATE_ON 1<br />
#define STATE_OFF 0<br />
<br />
#define DEVICE_UNK 0x40 // maybe PS button or CP power LED or maybe color (blue)<br />
<br />
int sceSysconCtrlLEDForDriver(SceUInt16 device, SceBool state);<br />
</source><br />
<br />
=== sceSysconCtrlChargeACForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x596B17B7<br />
|}<br />
<br />
Sends 2 bytes to Syscon command 0x892. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconCtrlChargeACForDriver(SceBool enable);</source><br />
<br />
=== sceSysconCtrlChargeVBUSForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x2A4B0437<br />
|}<br />
<br />
Sends 3 bytes to Syscon command 0x893. Related to Battery. Maybe enables/disables battery charging.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C"><br />
// a1: ex: 0, 1<br />
// a2: ex: 0, 1<br />
<br />
// FW 0.931.010<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1);<br />
<br />
// FW 3.600.011-3.740.011<br />
int sceSysconCtrlChargeVBUSForDriver(SceUInt32 a1, SceUInt32 a2);<br />
</source><br />
<br />
=== SceSysconForDriver_5CDDA14D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5CDDA14D<br />
|}<br />
<br />
A guessed name is sceSysconCtrlHpremoteForDriver.<br />
<br />
If Syscon version < 0x80001, it does nothing and returns 0, else it sends 2 bytes to Syscon command 0x899.<br />
<br />
Maybe enables/disables Jack power.<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">int SceSysconForDriver_5CDDA14D(SceBool enable);</source><br />
<br />
=== SceSysconForDriver_A2FE9BF9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA2FE9BF9<br />
|}<br />
<br />
Calls Syscon command 0x800.<br />
<br />
Gets information related to battery charge status, or USB power connection. See also [[Ernie#CMD_0x0800]].<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int SceSysconForDriver_A2FE9BF9(void *pResult);</source><br />
<br />
=== sceSysconCtrlLedBlinkType2ForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCB41B531<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Calls Syscon command 0x89F.<br />
<br />
<br />
=== sceSysconGetBatteryTempForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9070F139<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A0, else Syscon command 0x981.<br />
<br />
Used in [[ScePower]]'s module_start.<br />
<br />
<source lang="C">int sceSysconGetBatteryTempForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryRemainCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC562AF3A<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryRemainCapacityForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x802, else Syscon command 0x900.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainCapForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryVoltForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x03F11220<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x803, else Syscon command 0x901.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryVoltForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryLifePercentForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.06 || not present<br />
|-<br />
| 1.500.151-3.740.011 || 0xAD0A8275<br />
|}<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryLifePercentForDriver(SceUInt32 *pResult);</source><br />
<br />
=== sceSysconGetBatteryFullCapForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x00A65FC1<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A1, else Syscon command 0x982.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryFullCapForDriver(int *pResult);</source><br />
<br />
=== sceSysconGetBatteryElecForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x0826BA07<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A2, else Syscon command 0x983.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryElecForDriver(SceUInt16 *pResult);</source><br />
<br />
=== sceSysconGetBatteryTTEForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB841C141<br />
|}<br />
<br />
Temp name was sceSysconGetBatteryLifeTimeForDriver.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A3, else Syscon command 0x984.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatteryTTEForDriver(SceUInt16 *pTTE);</source><br />
<br />
=== sceSysconGetBatterySOHForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x91D3B7A3<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A4, else Syscon command 0x985.<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">int sceSysconGetBatterySOHForDriver(void *pSOH);</source><br />
<br />
=== sceSysconReadBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC2FB5565<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A8, else Syscon command 0x986.<br />
<br />
<source lang="C">int sceSysconReadBatteryRegForDriver(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== sceSysconWriteBatteryRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9B779DB0<br />
|}<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8A9, else Syscon command 0x987.<br />
<br />
<source lang="C">int sceSysconWriteBatteryRegForDriver(SceUInt16 offset, SceUInt16 value);</source><br />
<br />
=== SceSysconForDriver_A5AB19B1 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA5AB19B1<br />
|}<br />
<br />
Read 2 bytes from some Battery device. Is is an alternative register-reading function that seems to be Syscon-side implemented only on internal System Software version 4.00 or DevKit ones.<br />
<br />
If Syscon version <= 0x70503, it calls Syscon command 0x8AA, else Syscon command 0x988.<br />
<br />
Offset must be between 0 and 0xFFFF else returns error 0x80250001.<br />
<br />
<source lang="C">int SceSysconForDriver_A5AB19B1(SceUInt16 offset, SceUInt16 *pRes);</source><br />
<br />
=== SceSysconForDriver_CFCEE733 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCFCEE733<br />
|}<br />
<br />
Sends 2 bytes from Syscon command 0x181.<br />
<br />
<source lang="C">int SceSysconForDriver_CFCEE733(SceUInt32 unk);</source><br />
<br />
=== SceSysconForDriver_FDB3AE9D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xFDB3AE9D<br />
|}<br />
<br />
Gets 0x10 bytes from Syscon command 0x183.<br />
<br />
<source lang="C">int SceSysconForDriver_FDB3AE9D(int *pResult);</source><br />
<br />
=== SceSysconForDriver_C3504ADE ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xC3504ADE<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_DE613081]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C3504ADE(void);</source><br />
<br />
=== SceSysconForDriver_B832B72C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xB832B72C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_229A07C2]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B832B72C(void);</source><br />
<br />
=== SceSysconForDriver_86BAAF7D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x86BAAF7D<br />
|}<br />
<br />
A guessed name is sceSysconIsAlarmTimerExistForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_8351526D]].<br />
<br />
Used in [[SceRtc]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_86BAAF7D(void);</source><br />
<br />
=== SceSysconForDriver_A57B5433 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA57B5433<br />
|}<br />
<br />
A guessed name is sceSysconIsResumeRequestedForDriver.<br />
<br />
Related to [[#SceSysconForDriver_9F8340FF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_A57B5433(void);</source><br />
<br />
=== SceSysconForDriver_ACC7F71E ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xACC7F71E<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_35E1689F]].<br />
<br />
Used in [[SceHpremote]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACC7F71E(void);</source><br />
<br />
=== SceSysconForDriver_769F9AC4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x769F9AC4<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_474A9EA7]].<br />
<br />
Returns always SCE_TRUE on PS TV. This function could be related to USB or ethernet availability.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_769F9AC4(void);</source><br />
<br />
=== SceSysconForDriver_4BC63A40 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x4BC63A40<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_4E88B4D9]].<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4BC63A40(void);</source><br />
<br />
=== SceSysconForDriver_99A254A9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x99A254A9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_376CCCB8]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_99A254A9(void);</source><br />
<br />
=== SceSysconForDriver_9A4F4B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0x9A4F4B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_3BAAC8A9]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9A4F4B7C(void);</source><br />
<br />
=== SceSysconForDriver_92D2C6A4 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0x92D2C6A4<br />
|}<br />
<br />
<source lang="C">int SceSysconForDriver_92D2C6A4(void);</source><br />
<br />
=== SceSysconForDriver_B9EA2FA8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.995.000-3.740.011 || 0xB9EA2FA8<br />
|}<br />
<br />
A guessed name is sceSysconIsAccExistForDriver.<br />
<br />
Only used in [[SceUsbServ]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_B9EA2FA8(void);</source><br />
<br />
=== SceSysconForDriver_29CF4335 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x29CF4335<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2E4BA4B8]].<br />
<br />
It is related to Ernie DL Mode.<br />
<br />
Used in [[SceSblPostSsMgr]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_29CF4335(void);</source><br />
<br />
=== SceSysconForDriver_32B2DB3D ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x32B2DB3D<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_32B2DB3D(void);</source><br />
<br />
=== sceSysconIsHeadphoneExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x142D5E82<br />
|}<br />
<br />
Used in [[SceHpremote#sceHprmIsHeadphoneExistForDriver]].<br />
<br />
<source lang="c">SceBool sceSysconIsHeadphoneExistForDriver(void);</source><br />
<br />
=== sceSysconIsMotionDevExistForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x490C5548<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Used in [[SceMotionDev]].<br />
<br />
<source lang="c">SceBool sceSysconIsMotionDevExistForDriver(void);</source><br />
<br />
=== SceSysconForDriver_012B57B3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010 || not present<br />
|-<br />
| 0.940-3.740.011 || 0x012B57B3<br />
|}<br />
<br />
<source lang="c">int SceSysconForDriver_012B57B3(void);</source><br />
<br />
=== SceSysconForDriver_27758A64 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x27758A64<br />
|}<br />
<br />
A guessed name is sceSysconIsBatteryOnlineForDriver, deriving from [[#sceSysconIsPowerOnlineForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]], [[ScePower#scePowerIsLowBatteryForDriver]], [[ScePower]]'s module_start.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_80D6E061]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_27758A64(void);</source><br />
<br />
=== SceSysconForDriver_4A184B7C ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x4A184B7C<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns some information about battery.<br />
<br />
Used in [[ScePower#ScePowerForDriver_627A89C6]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_7682FE69]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_4A184B7C(void);</source><br />
<br />
=== SceSysconForDriver_ACEE1C70 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xACEE1C70<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns information about battery. Only used when battery is working.<br />
<br />
Used in [[ScePower#ScePowerForDriver_0D56C601]].<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_E0D52DF0]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_ACEE1C70(void);</source><br />
<br />
=== SceSysconForDriver_03C50DC3 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x03C50DC3<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_2D471528]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_03C50DC3(void);</source><br />
<br />
=== SceSysconForDriver_BFDA5590 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xBFDA5590<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_129EA022]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_BFDA5590(void);</source><br />
<br />
=== SceSysconForDriver_63B14156 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.996.090 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x63B14156<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_85E5DEBF]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_63B14156(void);</source><br />
<br />
=== SceSysconForDriver_50CAE242 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.940 || not present<br />
|-<br />
| 1.000.071-3.740.011 || 0x50CAE242<br />
|}<br />
<br />
A guessed name is sceSysconIsThermalAlertForDriver.<br />
<br />
Returns the global variable related to [[#sceSysconSetThermalAlertCallbackForDriver]].<br />
<br />
Used in [[ScePower]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_50CAE242(void);</source><br />
<br />
=== SceSysconForDriver_9F4042F8 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-1.692.000 || not present<br />
|-<br />
| 1.800.071-3.740.011 || 0x9F4042F8<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_C442D0BE]].<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_9F4042F8(void);</source><br />
<br />
=== SceSysconForDriver_C50568E9 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xC50568E9<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_61AE3970]].<br />
<br />
This function was added to support DOL-1002 motherboard.<br />
<br />
No use case seen.<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C50568E9(void);</source><br />
<br />
=== sceSysconIsLowBatteryForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xD7F5A797<br />
|}<br />
<br />
This is a guessed name.<br />
<br />
Only used in [[ScePower]].<br />
<br />
<source lang="C">SceBool sceSysconIsLowBatteryForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateRebootForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1A0C140F<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateReboot]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateRebootForDriver(void);</source><br />
<br />
=== sceSysconIsLowBatteryInhibitUpdateDownloadForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x1E3130EE<br />
|}<br />
<br />
This function was added along with [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
Used in [[ScePower#scePowerIsLowBatteryInhibitUpdateDownload]].<br />
<br />
<source lang="c">SceBool sceSysconIsLowBatteryInhibitUpdateDownloadForDriver(void);</source><br />
<br />
=== sceSysconGetBatteryRemainLevelForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.18 || not present<br />
|-<br />
| 3.300.041-3.740.011 || 0x26F9D729<br />
|}<br />
<br />
Only used if Syscon version >= 0x1040105.<br />
<br />
This function was added along with [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
Used in [[ScePower#scePowerGetBatteryRemainLevelForDriver]].<br />
<br />
<source lang="C">int sceSysconGetBatteryRemainLevelForDriver(SceUInt8 *pResult1, SceUInt8 *pResult2);</source><br />
<br />
=== SceSysconForDriver_C0F215B7 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-0.990.000 || not present<br />
|-<br />
| 0.996.090-3.740.011 || 0xC0F215B7<br />
|}<br />
<br />
A guessed name is sceSysconIs...ForDriver.<br />
<br />
Returns the global variable related to [[#SceSysconForDriver_18A6F4D9]].<br />
<br />
The global variable is updated by [[#sceSysconCmdSyncForDriver]].<br />
<br />
<source lang="C">SceBool SceSysconForDriver_C0F215B7(void);</source><br />
<br />
=== SceSysconForDriver_D6F6D472 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xD6F6D472<br />
|}<br />
<br />
Gets electric information (maybe intensity) of the device connected to USB OTG on PS Vita Slim. It should be studied if PS TV supports this function and if this function was initially targetting PS TV.<br />
<br />
Returns a global variable updated by [[#sceSysconCmdSyncForDriver]], obtained using Syscon command 0x130.<br />
<br />
<source lang="C">int SceSysconForDriver_D6F6D472(int *pInfo);</source><br />
<br />
=== SceSysconForDriver_F99BC858 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.01 || not present<br />
|-<br />
| 3.100.081-3.740.011 || 0xF99BC858<br />
|}<br />
<br />
Detects microSD swap.<br />
<br />
Calls syscon command 0x131.<br />
<br />
This function was maybe added to support a prototype motherboard that has a microSD port.<br />
<br />
<source lang="C">int SceSysconForDriver_F99BC858(SceBool *isSwapped);</source><br />
<br />
=== SceSysconForDriver_E7893732 ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-2.060.011 || not present<br />
|-<br />
| 2.100.081-3.740.011 || 0xE7893732<br />
|}<br />
<br />
Calls Syscon command 0x1B0. Related to UART or JIG on PS Vita Slim or PS TV.<br />
<br />
<source lang="C"><br />
// value holds 3 useful bytes and 1 byte not sent to syscon<br />
int SceSysconForDriver_E7893732(int value);<br />
</source><br />
<br />
=== sceSysconGetElmoVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xA039B563<br />
|}<br />
<br />
Temp name was sceSysconGetElmoFwVersionForDriver.<br />
<br />
Calls Syscon command 0x880. Read Elmo registers 0xD0 through 0xEF.<br />
<br />
On PS Vita 1000 series with IRS-001 motherboard, Elmo Fw Version is 0x192.<br />
<br />
<source lang="C">int sceSysconGetElmoVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconGetCookieVersionForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x9BF78047<br />
|}<br />
<br />
Temp name was sceSysconGetCookieFwVersionForDriver.<br />
<br />
Calls Syscon command 0x881.<br />
<br />
<source lang="C">int sceSysconGetCookieVersionForDriver(SceUInt32 *pVersion);</source><br />
<br />
=== sceSysconReadElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x5BF765BB<br />
|}<br />
<br />
Calls Syscon command 0x895.<br />
<br />
=== sceSysconWriteElmoRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xCCC71C28<br />
|}<br />
<br />
Calls Syscon command 0x896.<br />
<br />
=== sceSysconReadCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0x95975DD1<br />
|}<br />
<br />
Calls Syscon command 0x897.<br />
<br />
=== sceSysconWriteCookieRegForDriver ===<br />
{| class="wikitable"<br />
! Version !! NID<br />
|-<br />
| 0.931.010-3.740.011 || 0xF39300D3<br />
|}<br />
<br />
Calls Syscon command 0x898.<br />
<br />
Returns error 0x80250001 if offset is greater than 0xFF.<br />
<br />
<source lang="C"><br />
// offset: 0-0xFF<br />
int sceSysconWriteCookieRegForDriver(SceUInt32 offset, SceUInt16 data);<br />
</source><br />
<br />
== Commands ==<br />
<br />
It seems like the command format is as follows: <code>(direction << 8) | cmd_id</code>, where <code>direction = 1</code> means write to syscon, and <code>direction = 0</code> means read from syscon.<br />
<br />
{| class="wikitable"<br />
! Command<br />
! Return size (without considering the 2 bytes rx.size and rx.error_code)<br />
! Functions NIDs<br />
! Description<br />
|-<br />
| 0x0<br />
| 0x0<br />
| 0x0D0B6D25<br />
| sceSysconNopForDriver<br />
|-<br />
| 0x1<br />
| 0x4<br />
| module_start<br />
| sceSysconGetErnieVersionForDriver. Used during SysconInit.<br />
|-<br />
| 0x2<br />
| 0xC<br />
| module_start<br />
| sceSysconGetTimeStampForDriver. Returns 12-byte string followed by at least 2-byte memory leak. Used during SysconInit.<br />
|-<br />
| 0x3<br />
| 0x4<br />
| module_start<br />
| sceSysconGetSleepFactor. Used during SysconInit.<br />
|-<br />
| 0x4<br />
| 0x4<br />
| <br />
| Unknown. Run during boot. See [[Ernie#CMD_0x0004]].<br />
|-<br />
| 0x5<br />
| 0x4<br />
| 0xCBD6D8BC, module_start<br />
| sceSysconGetHardwareInfoForDriver<br />
|-<br />
| 0x6<br />
| 0x10<br />
| 0x965C68C3, module_start<br />
| sceSysconGetHardwareInfo2ForDriver. Get Hardware Info 2. See [[KBL_Param#Hardware_Info_2]].<br />
|-<br />
| 0x10<br />
| 0x2<br />
| 0xCF5B2F2F<br />
| sceSysconGetWakeupFactorForDriver<br />
|-<br />
| 0x11<br />
| 0x4<br />
| 0xD7BEFF8B<br />
| sceSysconGetClockForDriver<br />
|-<br />
| 0x12<br />
| 0x5 or 0x6<br />
| 0x3168F3AF<br />
| SceSysconForDriver_3168F3AF. Gets information about alarm timer. Return value is 1 byte indicating data size then 4 or 5 bytes of data.<br />
|-<br />
| 0x13<br />
| 0x2<br />
| 0xBA09F171<br />
| SceSysconForDriver_BA09F171<br />
|-<br />
| 0x14<br />
| ?between 0x1 and 0x4?<br />
| 0x93075DD1<br />
| SceSysconForDriver_93075DD1<br />
|-<br />
| 0x15<br />
| 0x4<br />
| 0x3E09A1F4<br />
| sceSysconGetManufacturesStatusForDriver<br />
|-<br />
| 0x80<br />
| 0x0<br />
| module_start<br />
| ?? Used during SysconInit. Sends 2 bytes (ex: 0x0012) to Syscon.<br />
|-<br />
| 0x81<br />
| ?<br />
| 0x9B6A6F64<br />
| sceSysconSetClockForDriver. Sends 5 bytes to Syscon: 1 byte for size=5 and 4 bytes of data.<br />
|-<br />
| 0x82<br />
| ?<br />
| 0x51164951<br />
| SceSysconForDriver_51164951<br />
|-<br />
| 0x83<br />
| ?<br />
| 0x373ECF8A<br />
| SceSysconForDriver_373ECF8A. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x84<br />
| ?<br />
| 0x2659535C<br />
| SceSysconForDriver_2659535C. Sends 1 byte to Syscon.<br />
|-<br />
| 0x85<br />
| ?<br />
| 0x4295D497<br />
| SceSysconForDriver_4295D497<br />
|-<br />
| 0x86<br />
| 8<br />
| 0x701535FC<br />
| sceSysconGetLogInfoForDriver<br />
|-<br />
| 0x87<br />
| 0<br />
| 0x4E55CF5E<br />
| sceSysconLogStartForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x88<br />
| 0x18<br />
| 0x487D97F3<br />
| sceSysconLogReadDataForDriver. Sends 2 bytes to Syscon: offset.<br />
|-<br />
| 0x89<br />
| 0<br />
| 0x9C0B1E61<br />
| sceSysconLogStartWaitingForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x90<br />
| ?0x3B?<br />
| 0x299B1CE7<br />
| sceSysconReadScratchPadForDriver<br />
|-<br />
| 0x91<br />
| ?0x3B?<br />
| 0xE26488B9<br />
| sceSysconWriteScratchPadForDriver<br />
|-<br />
| 0xA0<br />
| ?0x10 or 0x28?<br />
| second_loader<br />
| Handshake during boot. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xB0<br />
| 0<br />
| 0x058941D7<br />
| sceSysconOutputClockForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB1<br />
| 0<br />
| 0xDF8C6D2D<br />
| sceSysconCtrlWirelessPowerDownForDriver<br />
|-<br />
| 0xB2<br />
| 0<br />
| 0xDECCB2B4<br />
| sceSysconCtrlHostOutputViaDongleForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB3<br />
| at least 1<br />
| 0x33B5CDB3<br />
| SceSysconForDriver_33B5CDB3<br />
|-<br />
| 0xB4<br />
| at least 1<br />
| 0xF6D4DDC4<br />
| SceSysconForDriver_F6D4DDC4<br />
|-<br />
| 0xB5<br />
| 0<br />
| 0x00AE3AEB<br />
| SceSysconForDriver_00AE3AEB. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB6<br />
| 0<br />
| 0x0D300158<br />
| SceSysconForDriver_0D300158. Probably a control command. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xB7<br />
| at least 1<br />
| 0x91EF4EC3<br />
| SceSysconForDriver_91EF4EC3<br />
|-<br />
| 0xC0<br />
| ?0x3E?<br />
| <br />
| <br />
|-<br />
| 0xC1<br />
| 0<br />
| 0x94AB13CC<br />
| sceSysconErnieShutdownForDriver. Sends 2 bytes to Syscon.<br />
|-<br />
| 0xD0<br />
| ?0x2A or 0x28?<br />
| 0x4D03754A<br />
| SceSysconForDriver_4D03754A. Handshake before SNVS RW. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD1<br />
| ?0x0 or 0x2?<br />
| 0xC14BD637<br />
| SceSysconForDriver_C14BD637<br />
|-<br />
| 0xD2<br />
| ?0x30?<br />
| 0xEBDF88B9, second_loader<br />
| sceSysconSnvsReadDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0xD3<br />
| ?0x12?<br />
| 0x63683B9B<br />
| sceSysconSnvsWriteDataForDriver. See [[Ernie_Secure#Ernie_Secure_Commands]].<br />
|-<br />
| 0x100<br />
| 0x4<br />
| 0x145F59A4<br />
| sceSysconGetControlsInfoForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x101<br />
| 0x8<br />
| <br />
| sceSysconGetControlsInfo2ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]]. Uses Ernie version and Ernie DL version.<br />
|-<br />
| 0x102<br />
| 0xC<br />
| <br />
| <br />
|-<br />
| 0x103<br />
| 0x4<br />
| 0x1503D6A0<br />
| sceSysconGetMultiCnInfoForDriver<br />
|-<br />
| 0x104<br />
| 0xC<br />
| <br />
| sceSysconGetControlsInfo3ForDriver. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x105<br />
| ?<br />
| <br />
| Uses string "PS" then "TUV".<br />
|-<br />
| 0x106<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x107<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x108<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x109<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x110<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x120<br />
| ?<br />
| 0x76272CB9<br />
| SceSysconForDriver_76272CB9<br />
|-<br />
| 0x121<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x130<br />
| 0x4<br />
| module_start, 0xD6F6D472<br />
| Get USB OTG device electric info (maybe intensity). Used during SysconInit.<br />
|-<br />
| 0x131<br />
| ?0x1? (read)<br />
| 0xF99BC858<br />
| SceSysconForDriver_F99BC858. Added on a FW > 3.01 and <= 3.100.081.<br />
|-<br />
| 0x140<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x141<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x142<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x143<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x144<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x145<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x146<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x147<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x148<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x150<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x151<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x152<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x153<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x154<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x155<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x156<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x157<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x160<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x161<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x162<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x163<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x168<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x170<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x171<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x172<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x180<br />
| ?<br />
| <br />
| Set analog sampling. Sends 2 bytes to Syscon: 0 to disable, 1 to enable on Syscon version is < 0x90202, 3 to enable on Syscon version is >= 0x90202. Used in SceCtrlVblankHandler in [[SceCtrl]].<br />
|-<br />
| 0x181<br />
| 0<br />
| 0xCFCEE733<br />
| SceSysconForDriver_CFCEE733. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x182<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x183<br />
| 0x10<br />
| 0xFDB3AE9D<br />
| SceSysconForDriver_FDB3AE9D. Gets some information.<br />
|-<br />
| 0x184<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x185<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x186<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x187<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x188<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x189<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18A<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18B<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18C<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18D<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18E<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x18F<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x190<br />
| 0<br />
| 0x8AAB6308<br />
| sceSysconSetMultiCnPortForDriver. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x191<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x192<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1A1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1B0<br />
| 0<br />
| 0xE7893732<br />
| SceSysconForDriver_E7893732. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x1B2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1C4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D4<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1D5<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E0<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E1<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E2<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x1E3<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x300<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x301<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x303<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x380<br />
| at least 1<br />
| 0xF492E69E<br />
| sceSysconGetTouchpanelDeviceInfoForDriver<br />
|-<br />
| 0x38A<br />
| at least 1<br />
| 0xA1F1B973<br />
| ??<br />
|-<br />
| 0x390<br />
| at least 1<br />
| 0x030D447F<br />
| sceSysconGetTouchpanelDeviceInfo2ForDriver<br />
|-<br />
| 0x392<br />
| ?<br />
| 0x48ED8981, 0x060E55C1<br />
| SceSysconForDriver_48ED8981 / SceSysconForDriver_060E55C1. Sends 2 bytes to Syscon: 0 or 1.<br />
|-<br />
| 0x393<br />
| ?<br />
| 0x9A28BEEF, 0x8874EF45<br />
| SceSysconForDriver_9A28BEEF / SceSysconForDriver_8874EF45. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]].<br />
|-<br />
| 0x3A0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3A1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3A2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3A3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3A4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3A9<br />
| 0<br />
| 0x010F95D9<br />
| SceSysconForDriver_010F95D9. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3AB<br />
| ?<br />
| 0x357CC9D9<br />
| SceSysconForDriver_010F95D9. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3AC<br />
| ?between 0x1 and 0x4?<br />
| 0x3664E2C0<br />
| SceSysconForDriver_3664E2C0. Gets information.<br />
|-<br />
| 0x3AF<br />
| ?<br />
| 0xB8F4F4E3<br />
| SceSysconForDriver_B8F4F4E3. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3B0<br />
| ?<br />
| ??<br />
| sceSysconTouchStartBlModeForDriver<br />
|-<br />
| 0x3B1<br />
| ?<br />
| ??<br />
| sceSysconTouchUnlockDeviceForDriver<br />
|-<br />
| 0x3B2<br />
| ?<br />
| ??<br />
| sceSysconTouchSetProgramDataForDriver<br />
|-<br />
| 0x3B3<br />
| ?<br />
| ??<br />
| sceSysconTouchExecProgramDataForDriver<br />
|-<br />
| 0x3B4<br />
| ?<br />
| ??<br />
| sceSysconTouchGetBLStatusForDriver<br />
|-<br />
| 0x3B9<br />
| ?<br />
| 0x42E599AC<br />
| SceSysconForDriver_42E599AC. Sends 1 byte to Syscon.<br />
|-<br />
| 0x3BB<br />
| ?<br />
| 0xCCA56A16<br />
| SceSysconForDriver_CCA56A16. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x3BC<br />
| ?between 0x1 and 0x4?<br />
| 0x2E6D97CD<br />
| SceSysconForDriver_2E6D97CD. Gets information.<br />
|-<br />
| 0x3BF<br />
| ?<br />
| 0x240A604E<br />
| SceSysconForDriver_240A604E. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x3C2<br />
| ?<br />
| 0x5946B29B, 0x10327C64<br />
| SceSysconForDriver_5946B29B / SceSysconForDriver_10327C64. Sends 2 bytes to Syscon: 0 or 1. Used in [[SceSblUpdateMgr]]<br />
|-<br />
| 0x400<br />
| ?<br />
| 0x270B7B0B<br />
| sceSysconMotionGetMeasureDataForDriver<br />
|-<br />
| 0x480<br />
| 4<br />
| 0xD01E64FC<br />
| sceSysconMotionGetDeviceInfoForDriver<br />
|-<br />
| 0x481<br />
| ?<br />
| 0x9A7858B6<br />
| SceSysconForDriver_9A7858B6. Sends 3 bytes to Syscon.<br />
|-<br />
| 0x800<br />
| ?0x2 or 0x4?<br />
| 0xA2FE9BF9<br />
| SceSysconForDriver_A2FE9BF9. [[ScePower]] related.<br />
|-<br />
| 0x801<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0x802<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaced by Syscon command 0x900 on Syscon version > 0x70503.<br />
|-<br />
| 0x803<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaced by Syscon command 0x901 on Syscon version > 0x70503.<br />
|-<br />
| 0x804<br />
| ?<br />
| <br />
| ??<br />
|-<br />
| 0x805<br />
| 4<br />
| 0xEF810687<br />
| sceSysconGetUsbDetStatusForDriver<br />
|-<br />
| 0x806<br />
| ?0x1?<br />
| 0xE7F5D3DC<br />
| SceSysconForDriver_E7F5D3DC. Reboots PS Vita?<br />
|-<br />
| 0x807<br />
| 0x2<br />
| 0x253CC522<br />
| SceSysconForDriver_253CC522.<br />
|-<br />
| 0x820<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED on.<br />
|-<br />
| 0x821<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink slowly.<br />
|-<br />
| 0x822<br />
| 0x0<br />
| 0x727F985A<br />
| sceSysconCtrlDolceLEDForDriver. Set PS TV LED blink fast.<br />
|-<br />
| 0x840<br />
| ?0x1?<br />
| 0x4FEC564C<br />
| sceSysconGetManualChargeModeForDriver<br />
|-<br />
| 0x841<br />
| ?0x1?<br />
| 0x3C3B949C<br />
| SceSysconForDriver_3C3B949C<br />
|-<br />
| 0x842<br />
| ?0x1?<br />
| 0x1C29C00E<br />
| SceSysconForDriver_1C29C00E<br />
|-<br />
| 0x843<br />
| ?0x1?<br />
| 0x730E4725<br />
| SceSysconForDriver_730E4725<br />
|-<br />
| 0x880<br />
| 0x4<br />
| 0xA039B563<br />
| sceSysconGetElmoVersionForDriver<br />
|-<br />
| 0x881<br />
| ?<br />
| 0x9BF78047<br />
| sceSysconGetCookieVersionForDriver<br />
|-<br />
| 0x882<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaced by Syscon command 0x980 on Syscon version > 0x70503.<br />
|-<br />
| 0x883<br />
| 0x8<br />
| 0x175CE5A1<br />
| sceSysconGetPowerStatusForDriver<br />
|-<br />
| 0x884<br />
| ?<br />
| 0x3FDD29D6<br />
| SceSysconForDriver_3FDD29D6. Same usage as command 0x885. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x885<br />
| ?<br />
| 0x79E6DD8B<br />
| SceSysconForDriver_79E6DD8B. Same usage as command 0x884. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x886<br />
| ?0x2?<br />
| 0x62155962<br />
| sceSysconCtrlHdmiCecPowerForDriver<br />
|-<br />
| 0x887<br />
| ?<br />
| 0x063425AE<br />
| sceSysconCtrlMotionSensorPowerForDriver<br />
|-<br />
| 0x888<br />
| ?0x2?<br />
| 0xBE1ADE4F<br />
| sceSysconCtrlSdPowerForDriver<br />
|-<br />
| 0x889<br />
| ?0x2?<br />
| 0x8D1D97E8<br />
| sceSysconCtrlAccPowerForDriver<br />
|-<br />
| 0x88A<br />
| ?<br />
| 0x4FBDA504, 0xA2E85DB9<br />
| sceSysconCtrlWirelessPowerForDriver, sceSysconCtrlWirelessPower2ForDriver<br />
|-<br />
| 0x88B<br />
| ?<br />
| 0x5A614349<br />
| SceSysconForDriver_5A614349. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88C<br />
| ?<br />
| 0xB872E904<br />
| SceSysconForDriver_B872E904. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88D<br />
| ?<br />
| 0xDD16ABD9<br />
| SceSysconForDriver_DD16ABD9. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x88E<br />
| 0x0<br />
| 0x7F198FA2<br />
| sceSysconCtrlVoltageForDriver. See [[Ernie#CMD_0x088E_-_CtrlVoltage]].<br />
|-<br />
| 0x88F<br />
| ?0x2?<br />
| 0x40FF3898<br />
| sceSysconCtrlDeviceResetForDriver. ?UsbEtherSmsc and WlanBt related?<br />
|-<br />
| 0x890<br />
| ?<br />
| 0x285594F8<br />
| SceSysconForDriver_285594F8. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x891<br />
| ?0x2?<br />
| 0x04EC7579<br />
| sceSysconCtrlLEDForDriver<br />
|-<br />
| 0x892<br />
| ?0?<br />
| 0x596B17B7<br />
| sceSysconCtrlChargeACForDriver. [[ScePower]] related.<br />
|-<br />
| 0x893<br />
| ?0?<br />
| 0x2A4B0437<br />
| sceSysconCtrlChargeVBUSForDriver. [[ScePower]] related.<br />
|-<br />
| 0x895<br />
| ?<br />
| 0x5BF765BB<br />
| sceSysconReadElmoRegForDriver<br />
|-<br />
| 0x896<br />
| ?<br />
| 0xCCC71C28<br />
| sceSysconWriteElmoRegForDriver<br />
|-<br />
| 0x897<br />
| ?<br />
| 0x95975DD1<br />
| sceSysconReadCookieRegForDriver<br />
|-<br />
| 0x898<br />
| ?<br />
| 0xF39300D3<br />
| sceSysconWriteCookieRegForDriver<br />
|-<br />
| 0x899<br />
| ?0?<br />
| 0x5CDDA14D<br />
| ?Guessed name: sceSysconCtrlHpremoteForDriver? [[SceHpremote]] related.<br />
|-<br />
| 0x89A<br />
| ?0?<br />
| 0x59DC5938<br />
| sceSysconCtrlUsbStatusForDriver<br />
|-<br />
| 0x89B<br />
| ?0x2?<br />
| 0x710A7CF0<br />
| sceSysconCtrlRMRPowerForDriver<br />
|-<br />
| 0x89C<br />
| ?0x2?<br />
| 0xB1F88B11<br />
| sceSysconCtrlMultiCnPowerForDriver. [[SceUsbServ]] related.<br />
|-<br />
| 0x89D<br />
| ?<br />
| 0x6F586D1A<br />
| sceSysconCtrlLedPwmBlinkForDriver<br />
|-<br />
| 0x89E<br />
| ?<br />
| 0x9CA6EB70<br />
| sceSysconSetChargeLedCtrlForDriver. Sends 2 bytes to Syscon. [[ScePower]] related.<br />
|-<br />
| 0x89F<br />
| ?<br />
| 0xCB41B531<br />
| sceSysconCtrlLedBlinkType2ForDriver. Sends 6 bytes to Syscon.<br />
|-<br />
| 0x8A0<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaced by Syscon command 0x981 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A1<br />
| ?0x3B or 0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaced by Syscon command 0x982 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x8A2<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaced by Syscon command 0x983 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A3<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaced by Syscon command 0x984 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A4<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaced by Syscon command 0x985 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A8<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaced by Syscon command 0x986 on Syscon version > 0x70503.<br />
|-<br />
| 0x8A9<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaced by Syscon command 0x987 on Syscon version > 0x70503.<br />
|-<br />
| 0x8AA<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaced by Syscon command 0x988 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B0<br />
| ?<br />
| 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaced by Syscon command 0x9B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x8B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaced by Syscon command 0x9B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaced by Syscon command 0x9B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaced by Syscon command 0x9B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x8B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaced by Syscon command 0x9B4 on Syscon version > 0x70503.<br />
|-<br />
| 0x8C0<br />
| ?<br />
| 0xC6A2C9EF<br />
| sceSysconCtrlManualChargeModeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C1<br />
| ?<br />
| ??<br />
| sceSysconCtrlBatteryChargeForDriver (accepts 0 / 1 as value)<br />
|-<br />
| 0x8C2<br />
| ?<br />
| ??<br />
| sceSysconCtrlChargingCurrentForDriver (accepts 0x00 - 0x1F as value)<br />
|-<br />
| 0x8C3<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentAcForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C4<br />
| ?<br />
| ??<br />
| sceSysconCtrlSupplyCurrentUsbForDriver (accepts 0x00 - 0x19 as value)<br />
|-<br />
| 0x8C5<br />
| ?0x0 or 0x2?<br />
| 0x3274A925<br />
| SceSysconForDriver_3274A925. [[SceUsbServ]] and [[SceUsbEtherSmsc]] related.<br />
|-<br />
| 0x8C6<br />
| ?<br />
| 0xDFB024C4<br />
| sceSysconReadCookieStatusForDriver. [[SceSblUpdateMgr]] related.<br />
|-<br />
| 0x8C7<br />
| ?<br />
| 0x87FF8041<br />
| SceSysconForDriver_87FF8041. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C8<br />
| ?<br />
| 0x7BFA95DA<br />
| SceSysconForDriver_7BFA95DA. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8C9<br />
| ?0?<br />
| 0x451C1662<br />
| SceSysconForDriver_451C1662. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CA<br />
| 1<br />
| 0x79074DE4<br />
| SceSysconForDriver_79074DE4. Sends 0 byte to Syscon.<br />
|-<br />
| 0x8CB<br />
| 1<br />
| 0x7D25F6D2<br />
| SceSysconForDriver_7D25F6D2. Sends 1 byte to Syscon.<br />
|-<br />
| 0x8CC<br />
| ?0?<br />
| 0xD2ADABCA<br />
| SceSysconForDriver_D2ADABCA. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x8CE<br />
| 0x10<br />
| 0x3B354824<br />
| sceSysconGetTemperatureLogForDriver<br />
|-<br />
| 0x8CF<br />
| 0<br />
| 0x3843D657<br />
| sceSysconClearTemperatureLogForDriver. Sends 2 bytes to syscon.<br />
|-<br />
| 0x8D0<br />
| ?<br />
| 0xF87679EE<br />
| SceSysconForDriver_F87679EE. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x900<br />
| ?0x4?<br />
| 0xC562AF3A<br />
| sceSysconGetBatteryRemainCapForDriver. Replaces Syscon command 0x802 on Syscon version > 0x70503.<br />
|-<br />
| 0x901<br />
| 0x4<br />
| 0x03F11220<br />
| sceSysconGetBatteryVoltForDriver. Replaces Syscon command 0x803 on Syscon version > 0x70503.<br />
|-<br />
| 0x902<br />
| ?0x4?<br />
| 0xAD0A8275<br />
| sceSysconGetBatteryLifePercentForDriver<br />
|-<br />
| 0x903<br />
| 0x2<br />
| 0x26F9D729<br />
| sceSysconGetBatteryRemainLevelForDriver. Added on a FW higher than 2.50 and Syscon version >= 0x1040105.<br />
|-<br />
| 0x904<br />
| ?<br />
| 0x9ADC9936<br />
| sceSysconGetBatteryCalibDataForDriver<br />
|-<br />
| 0x910<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x911<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x912<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x913<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x914<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x915<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x916<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x917<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x932<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x944<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x945<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x952<br />
| ?<br />
| <br />
| Uses string "PC" then "TUV".<br />
|-<br />
| 0x953<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x954<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x961<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x962<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x963<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x964<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x965<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x966<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x967<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x968<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x969<br />
| ?<br />
| <br />
| <br />
|-<br />
| 0x980<br />
| 0x6<br />
| 0x68E0031E<br />
| sceSysconGetBatteryVersionForDriver. Replaces Syscon command 0x882 on Syscon version > 0x70503.<br />
|-<br />
| 0x981<br />
| ?0x4?<br />
| 0x9070F139<br />
| sceSysconGetBatteryTempForDriver. Replaces Syscon command 0x8A0 on Syscon version > 0x70503.<br />
|-<br />
| 0x982<br />
| ?0x4?<br />
| 0x00A65FC1<br />
| sceSysconGetBatteryFullCapForDriver. Replaces Syscon command 0x8A1 on Syscon version > 0x70503. [[ScePower]] related.<br />
|-<br />
| 0x983<br />
| 0x2<br />
| 0x0826BA07<br />
| sceSysconGetBatteryElecForDriver. Replaces Syscon command 0x8A2 on Syscon version > 0x70503.<br />
|-<br />
| 0x984<br />
| ?0x4?<br />
| 0xB841C141<br />
| sceSysconGetBatteryTTEForDriver. Replaces Syscon command 0x8A3 on Syscon version > 0x70503.<br />
|-<br />
| 0x985<br />
| ?0x4?<br />
| 0x91D3B7A3<br />
| sceSysconGetBatterySOHForDriver. Replaces Syscon command 0x8A4 on Syscon version > 0x70503.<br />
|-<br />
| 0x986<br />
| 2<br />
| 0xC2FB5565<br />
| sceSysconReadBatteryRegForDriver. Replaces Syscon command 0x8A8 on Syscon version > 0x70503.<br />
|-<br />
| 0x987<br />
| ?<br />
| 0x9B779DB0<br />
| sceSysconWriteBatteryRegForDriver. Replaces Syscon command 0x8A9 on Syscon version > 0x70503.<br />
|-<br />
| 0x988<br />
| 2<br />
| 0xA5AB19B1 <br />
| SceSysconForDriver_A5AB19B1. Replaces Syscon command 0x8AA on Syscon version > 0x70503.<br />
|-<br />
| 0x989<br />
| ?<br />
| 0x87DA378D<br />
| sceSysconBatterySWResetForDriver<br />
|-<br />
| 0x98A<br />
| ?between 0x2 and 0x4?<br />
| 0xF93CF833<br />
| sceSysconGetBatteryFullCapForDriver<br />
|-<br />
| 0x98B<br />
| ?between 0x2 and 0x4?<br />
| 0xECFA7242 / 0xE1885F68<br />
| sceSysconGetBicTempForDriver / sceSysconGetAbbyTempForDriver<br />
|-<br />
| 0x98C<br />
| ?0x4?<br />
| 0xCD73079D<br />
| sceSysconGetBatteryCycleCountForDriver<br />
|-<br />
| 0x9B0<br />
| ?<br />
| 0x2CEF078E / 0x4946538A<br />
| sceSysconBatteryStartBLModeForDriver. Replaces Syscon command 0x8B0 on Syscon version > 0x70503. Since FW 0.940, it is also used by sceSysconEnableHibernateIOForDriver independently of Syscon version.<br />
|-<br />
| 0x9B1<br />
| ?<br />
| 0xE4AE7852<br />
| sceSysconBatteryStopBLModeForDriver. Replaces Syscon command 0x8B1 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B2<br />
| ?<br />
| 0xE4F29744<br />
| sceSysconBatterySetBLCommandForDriver. Replaces Syscon command 0x8B2 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B3<br />
| ?<br />
| 0x74B2AB55<br />
| sceSysconBatteryExecBLCommandForDriver. Replaces Syscon command 0x8B3 on Syscon version > 0x70503.<br />
|-<br />
| 0x9B4<br />
| ?<br />
| 0x448DAFF1<br />
| sceSysconBatteryReadBLCommandForDriver. Replaces Syscon command 0x8B4 on Syscon version > 0x70503.<br />
|-<br />
| 0xA00<br />
| 0x0<br />
| <br />
| ??<br />
|-<br />
| 0xA82<br />
| ?<br />
| 0x7BAFE083<br />
| SceSysconForDriver_7BAFE083. Sends 2 bytes to Syscon.<br />
|-<br />
| 0x1080<br />
| ?0x0 or 0x2?<br />
| 0x81A6060D<br />
| sceSysconNvsSetRunModeForDriver<br />
|-<br />
| 0x1081<br />
| ?0x0 or 0x2?<br />
| 0x2EC6D55D<br />
| sceSysconNvsSetUnkModeForDriver<br />
|-<br />
| 0x1082<br />
| ?around 0x20?<br />
| 0xACAFA2B8<br />
| sceSysconNvsReadDataForDriver<br />
|-<br />
| 0x1083<br />
| ?0x2?<br />
| 0x10C9657A<br />
| sceSysconNvsWriteDataForDriver<br />
|-<br />
| 0x1100<br />
| 0x4<br />
| 0xD2F456DC<br />
| sceSysconGetErnieDLVersionForDriver<br />
|-<br />
| 0x1101<br />
| 0x4<br />
| <br />
| <br />
|-<br />
| 0x1180<br />
| ?<br />
| 0x9B00BC7F<br />
| sceSysconUpdaterSetSegmentForDriver<br />
|-<br />
| 0x1181<br />
| ?<br />
| 0x356B9696, 0x734544E4<br />
| sceSysconUpdaterSendProgramDataForDriver, sceSysconUpdaterSendProgramData2ForDriver<br />
|-<br />
| 0x1182<br />
| ?<br />
| 0x69AD76E4<br />
| sceSysconUpdaterExecProgrammingForDriver<br />
|-<br />
| 0x1183<br />
| ?<br />
| 0xB487C2FB<br />
| sceSysconUpdaterSetRunModeForDriver<br />
|-<br />
| 0x1184<br />
| ?<br />
| 0xC7747A63<br />
| sceSysconUpdaterExecFinalizeForDriver<br />
|-<br />
| 0x1185<br />
| ?<br />
| 0xCBA836FF<br />
| sceSysconUpdaterCheckSignatureForDriver. Sends 0x18 bytes to Syscon.<br />
|-<br />
| 0x1300<br />
| 0x8<br />
| 0xCE48E8EB<br />
| sceSysconGetConfigStorageInfoForDriver<br />
|-<br />
| 0x1310<br />
| 0x1<br />
| 0x351946B0<br />
| SceSysconForDriver_351946B0<br />
|-<br />
| 0x1382<br />
| ?<br />
| 0xA4968B8C<br />
| sceSysconBeginConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1383<br />
| ?<br />
| 0xFCC3E8EE<br />
| sceSysconEndConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1384<br />
| ?<br />
| 0x7B9B3617<br />
| sceSysconCommitConfigstorageTransactionForDriver. Sends 1 byte to Syscon: 0.<br />
|-<br />
| 0x1385<br />
| ?<br />
| 0x89C5CFD6<br />
| sceSysconLoadConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1386 (called from ARM Kernel but not implemented in Syscon FW)<br />
| ?<br />
| 0xCC6F90A8<br />
| sceSysconVerifyConfigstorageScriptForDriver. Sends (3 + script_size) bytes to Syscon: script_size (1 byte), unk, script (variable length).<br />
|-<br />
| 0x1392<br />
| ?0?<br />
| 0xFD65FFCB<br />
| SceSysconForDriver_FD65FFCB. Sends 3 bytes to Syscon: 1 byte offset (between 0 and 0xFF), 2 bytes a2 (between 0 and 2).<br />
|-<br />
| 0x1393<br />
| ?<br />
| 0x02350352<br />
| SceSysconForDriver_02350352. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x1394<br />
| ?<br />
| 0x7DE84CE3<br />
| SceSysconForDriver_7DE84CE3. Sends 2 bytes to Syscon: offset (between 0 and 0xFF)<br />
|-<br />
| 0x2080<br />
| ?<br />
| 0x44A173F5<br />
| sceSysconJigOpenPortForDriver<br />
|-<br />
| 0x2081<br />
| ?<br />
| 0x483FAE05<br />
| sceSysconJigClosePortForDriver<br />
|-<br />
| 0x2082<br />
| ?<br />
| 0xD24BF916<br />
| sceSysconJigSetConfigForDriver<br />
|-<br />
| 0x2083<br />
| ?<br />
| 0x3C80B529<br />
| receive_pm_sm_jig_msg_from_syscon<br />
|-<br />
| 0x2084<br />
| ?<br />
| 0xCE346793<br />
| send_pm_sm_jig_short_msg_to_syscon<br />
|-<br />
| 0x2085<br />
| ?<br />
| 0x7BFBA09E / 0x933D813F<br />
| send_pm_sm_jig_msg_to_syscon / send_pm_sm_stop_to_syscon<br />
|}<br />
<br />
== Callbacks ==<br />
<br />
All the following exported functions have this function prototype: <code>int sceSysconSet...Callback(void (*func)(int enable, void *argp), void *argp);</code>.<br />
<br />
{| class="wikitable"<br />
! Callback name !! Callback setter function !! State getter function !! Callback setter caller !! Comments<br />
|-<br />
| SYSCON_CB_ACC || [[#sceSysconSetAccCallbackForDriver]] || [[#SceSysconForDriver_B9EA2FA8]] || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MULTI_CN_OTG || [[#sceSysconSetMultiCnOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_MINI_USB_OTG || [[#sceSysconSetMiniUsbOtgCallbackForDriver]] || NA || [[SceUsbServ]] ||<br />
|-<br />
| SYSCON_CB_ALARM || [[#sceSysconSetAlarmCallbackForDriver]] || NA || [[ScePower]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_18A6F4D9]] || [[#SceSysconForDriver_C0F215B7]] || No use case seen. ||<br />
|-<br />
| ?SYSCON_CB_HEADPHONE? || [[#SceSysconForDriver_DE613081]] || [[#SceSysconForDriver_C3504ADE]] || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_MICROPHONE? || [[#SceSysconForDriver_63352A39]] || NA || [[SceHpremote]] ||<br />
|-<br />
| ?SYSCON_CB_REMOTE? || [[#SceSysconForDriver_35E1689F]] || [[#SceSysconForDriver_ACC7F71E]] || [[SceHpremote]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY || [[#sceSysconSetLowBatteryCallbackForDriver]] || [[#sceSysconIsLowBatteryForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_THERMAL_ALERT || [[#sceSysconSetThermalAlertCallbackForDriver]] || [[#SceSysconForDriver_50CAE242]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_REBOOT || [[#sceSysconSetLowBatteryInhibitUpdateRebootCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateRebootForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_LOW_BATTERY_INIHIBIT_UPDATE_DOWNLOAD || [[#sceSysconSetLowBatteryInhibitUpdateDownloadCallbackForDriver]] || [[#sceSysconIsLowBatteryInhibitUpdateDownloadForDriver]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_BATTERY_ONLINE || [[#SceSysconForDriver_80D6E061]] || [[#SceSysconForDriver_27758A64]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_RESUME_REQUEST || [[#SceSysconForDriver_9F8340FF]] || [[#SceSysconForDriver_A57B5433]] || [[ScePower]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2D471528]] || [[#SceSysconForDriver_03C50DC3]] || [[ScePower]] || Very similar to SYSCON_CB_LOW_BATTERY.<br />
|-<br />
| ? || [[#SceSysconForDriver_7682FE69]] || [[#SceSysconForDriver_4A184B7C]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_E0D52DF0]] || [[#SceSysconForDriver_ACEE1C70]] || No use case seen. || Related to battery.<br />
|-<br />
| ? || [[#SceSysconForDriver_229A07C2]] || [[#SceSysconForDriver_B832B72C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_474A9EA7]] || [[#SceSysconForDriver_769F9AC4]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_129EA022]] || [[#SceSysconForDriver_BFDA5590]] || [[ScePower]] ||<br />
|-<br />
| SYSCON_CB_ALARM_TIMER || [[#SceSysconForDriver_8351526D]] || [[#SceSysconForDriver_86BAAF7D]] || [[SceRtc]] ||<br />
|-<br />
| ? || [[#SceSysconForDriver_2E4BA4B8]] || [[#SceSysconForDriver_29CF4335]] || No use case seen. || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_4E88B4D9]] || [[#SceSysconForDriver_4BC63A40]] || No use case seen. || Used in [[SceSblPostSsMgr]].<br />
|-<br />
| ? || [[#SceSysconForDriver_376CCCB8]] || [[#SceSysconForDriver_99A254A9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_3BAAC8A9]] || [[#SceSysconForDriver_9A4F4B7C]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_85E5DEBF]] || [[#SceSysconForDriver_63B14156]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_14730196]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_C442D0BE]] || [[#SceSysconForDriver_9F4042F8]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_61AE3970]] || [[#SceSysconForDriver_C50568E9]] || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_423D0C58]] || NA || No use case seen. ||<br />
|-<br />
| ? || [[#SceSysconForDriver_154676F1]] || NA || No use case seen. ||<br />
|}<br />
<br />
See also [http://uofw.github.io/upspd/docs/SilverSpring_Blog/my.malloc.us/silverspring/2007/12/03g-model-psp/index.html SilverSpring's PSP Syscon callbacks enum] and [https://github.com/pspdev/pspsdk/blob/master/src/power/psppower.h PSPSDK power callbacks enum].<br />
<br />
[[Category:ARM]]<br />
[[Category:Kernel]]<br />
[[Category:Modules]]<br />
[[Category:Library]]</div>
CelesteBlue