Difference between revisions of "SceSysmem"

From Vita Development Wiki
Jump to navigation Jump to search
m (→‎sceKernelSysrootIsUsbEnumWakeupForKernel: Fix invalid predicate and cleanup code block)
(4 intermediate revisions by the same user not shown)
Line 978: Line 978:
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_UNK 0x10002
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_UNK 0x10002
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_CDRAM 0x20001
 
#define SCE_KERNEL_PHYMEMLOW_TYPE_CDRAM 0x20001
 +
 +
typedef struct kernel_message_ctx { // size is 0x18 on FW 3.60
 +
  int hex_value0_hi;
 +
  int hex_value0_lo;
 +
  int hex_value1;
 +
  const char *pFunc;
 +
  int line;
 +
  const char *pFile;
 +
} kernel_message_ctx;
  
 
/**
 
/**
Line 5,051: Line 5,060:
 
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.
 
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.
  
== SceDipsw ==
+
=== sceKernelMapMemBlock ===
 
 
=== sceKernelCheckDipsw ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x1C783FB2
+
| 0.990-1.69 || 0x7B763A21
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceKernelClearDipsw ===
+
=== sceKernelRemapMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x800EDCC1
+
| 0.990-1.69 || 0x3B29E0F5
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== sceKernelSetDipsw ===
+
=== sceKernelPartialMapMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x817053D4
+
| 0.990 || not present
 +
|-
 +
| 1.69 || 0xC0A59868
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
== SceDipswForDriver ==
+
=== sceKernelUnmapMemBlock ===
 
 
=== sceKernelCheckDipswForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA98FC2FD
+
| 0.990-1.69 || 0xEE30D976
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelCheckDipswForDriver(int no);</source>
+
<source lang="C">int sceKernelUnmapMemBlock(SceUID uid);</source>
  
=== sceKernelGetDipswInfoForDriver ===
+
=== sceKernelPartialUnmapMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB2AD48BE
+
| 0.990 || not present
 +
|-
 +
| 1.69 || 0xCA99929B
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a guessed name (cannot find an evidence).
+
=== sceKernelGetMemBlockInfoByRange ===
 
 
<source lang="C">return *(int *)(dipsw_addr + 4 * info_id);</source>
 
 
 
info_id:
 
* 0: CP timestamp 1
 
* 1: CP Version, CP Board ID
 
* 2: CP timestamp 2
 
* 3: ASLR Seed
 
 
 
See [[KBL Param#DIP Switches]].
 
 
 
<source lang="C">int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);</source>
 
 
 
=== sceKernelClearDipswForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF1F3E9FE
+
| 0.990 || not present
 +
|-
 +
| 0.996-3.60 || 0x006F3DB4
 
|}
 
|}
  
<source lang="C">void sceKernelClearDipswForDriver(int no);</source>
+
<source lang="c">
 +
/**
 +
* @brief Get memory block informaton by virtual address range
 +
 
 +
* @param[in] vbase base address
 +
* @param[in] vsize  size
 +
* @param[inout] pInfo information structure
 +
*/
 +
int sceKernelGetMemBlockInfoByRange(void *vbase, SceSize vsize, SceKernelMemBlockInfo *pInfo);
 +
</source>
  
=== sceKernelSetDipswForDriver ===
+
=== sceKernelGetMemBlockInfoByAddr ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x82E45FBF
+
| 0.990-3.60 || 0x4010AD65
 
|}
 
|}
  
<source lang="C">void sceKernelSetDipswForDriver(int no);</source>
+
<source lang="c">
 
+
/**
== SceUartForKernel ==
+
* @brief Get memory block information.
 +
*
 +
* Get information about a memory block.
 +
* @param[in] vbase Base address
 +
* @param[inout] pInfo Information structure
 +
*/
 +
int sceKernelGetMemBlockInfoByAddr(void *vbase, SceKernelMemBlockInfo *pInfo);
 +
</source>
  
=== sceKernelUartInitForKernel ===
+
=== sceKernelGetSubbudgetInfo ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xA9C74212
+
| 0.990 || not present
 +
|-
 +
| 1.69-3.60 || 0x832B4A65
 
|}
 
|}
  
Temp name was sceUartInitForKernel.
+
<source lang="c">
 +
typedef struct SceKernelSubbudgetInfo { // size is 0xC on FW 3.60
 +
  int size; // Size of this structure
 +
  int unk_4;
 +
  int unk_8;
 +
} SceKernelSubbudgetInfo;
  
It initializes the clock generator registers for the UART <code>port</code>. See [[UART Registers]]. The default baud rate is 115200 for ports 0-5 and 250000 for port 6.
+
int sceKernelGetSubbudgetInfo(SceBool unk_boolean, SceKernelSubbudgetInfo *pInfo);
 
 
<source lang="C">
 
// port: 0-6
 
int sceKernelUartInitForKernel(SceUInt32 port);
 
 
</source>
 
</source>
  
=== sceKernelUartReadAvailableForKernel ===
+
=== sceKernelGetFreeMemorySize ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 1.69-3.60 || 0x87CC580B
|-
 
| 3.60 || 0x38DB7629
 
 
|}
 
|}
  
Temp name was sceUartReadAvailableForKernel.
+
<source lang="C">
 
+
/**
Returns the number of words available to read from the read FIFO.
+
* Get free memory size
 +
*/
 +
int sceKernelGetFreeMemorySize(SceKernelFreeMemorySizeInfo *info);
 +
</source>
  
<source lang="c">int sceKernelUartReadAvailableForKernel(int port);</source>
+
=== sceKernelOpenMemBlock ===
 
 
=== sceKernelUartReadForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9BBF1255
+
| 0.990-3.60 || 0x8EB8DFBB
 
|}
 
|}
  
Temp name was sceUartReadForKernel.
+
<source lang="c">
 +
// on FW <= 1.691, flags is not used
 +
SceUID sceKernelOpenMemBlock(const char *name, int flags);
 +
</source>
  
<source lang="c">int sceKernelUartReadForKernel(int port);</source>
+
=== sceKernelFindMemBlockByAddr ===
 
 
=== sceKernelUartWriteForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x41973874
+
| 0.990-3.60 || 0xA33B99D1
 
|}
 
|}
  
Temp name was sceUartWriteForKernel.
+
<source lang="c">
 +
/**
 +
* Find memory block by virtual range (base address and size)
 +
* If size == 0, API returns a memory block which contains 'start'
 +
* If size > 0, API returns a memory block just fit range [start, start + size].
 +
* @param[in] vaddr base address
 +
* @param[in] size address size
 +
* @retval >=SCE_OK block id
 +
* @retval <SCE_OK error
 +
*/
 +
SceUID sceKernelFindMemBlockByAddr(void *vaddr, SceSize size);
 +
</source>
  
<source lang="c">int sceKernelUartWriteForKernel(int port, char c);</source>
+
=== sceKernelFreeMemBlock ===
 
 
=== sceKernelUartPutcharForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xAF243C6A
+
| 0.990-3.60 || 0xA91E15EE
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="c">int sceKernelUartPutcharForKernel(char c);</source>
+
<source lang="c">
 
+
/**
== SceCpu ==
+
* Free memory block.
This library provides wrapper for much ARM CP15 co-processor access as well as low level support of spinlocks and other synchronization primitives.
+
*
 +
* @param[in] uid block uid
 +
* @retval SCE_OK Success
 +
* @retval <SCE_OK Error code
 +
*/
 +
int sceKernelFreeMemBlock(SceUID uid);
 +
</source>
  
=== sceKernelCpuId ===
+
=== sceKernelFreeMemBlockForVM ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x2704CFEE
+
| 3.60 || 0x4EA13FEA
 
|}
 
|}
  
Return the CPU ID of the current core.
+
<source lang="c">int sceKernelFreeMemBlockForVM(SceUID uid);</source>
 
 
<source lang="c">SceUInt sceKernelCpuId(void);</source>
 
 
 
== SceCpuForKernel ==
 
  
=== sceKernelSendEventForKernel ===
+
=== sceKernelCloseMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x45885327
+
| 0.990-3.60 || 0xB680E3A0
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">void sceKernelSendEventForKernel(void);</source>
+
<source lang="c">int sceKernelCloseMemBlock(SceUID uid);</source>
  
=== sceKernelWaitForEventForKernel ===
+
=== sceKernelGetMemBlockBase ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xD2629465
+
| 0.996-3.60 || 0xB8EF5818
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">void sceKernelWaitForEventForKernel(void);</source>
+
<source lang="C">
 +
/**
 +
* @brief Get mapped base address of memory block.
 +
*
 +
* Get base address of memory block.
 +
* @param[in] uid block id
 +
* @param[out] ppBase base address of memory block
 +
* @retval SCE_OK success
 +
* @retval <SCE_OK Error
 +
*/
 +
int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);
 +
</source>
  
=== sceKernelPrintCpuModeForKernel ===
+
=== sceKernelAllocMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xDC99515C
+
| 0.990-3.60 || 0xB9D5EBDE
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== sceKernelTlsKernelSetForKernel ===
+
<source lang="c">
 +
/**
 +
* Reserve a new memory block.
 +
*
 +
* The memory types that can be specified for type are as follows.
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW
 +
* - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
 +
*
 +
* Allocate a memory block.
 +
*
 +
* @param[in] name Memory block name
 +
* @param[in] vsize Memory block virtual size
 +
* @param[in] flags Options
 +
* @retval id UID of memory block
 +
* @retval <SCE_OK Error code
 +
*/
 +
SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize vsize, const struct SceKernelAllocMemBlockOpt *pOpt);
 +
</source>
 +
 
 +
=== sceKernelAllocUnmapMemBlock ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940 || 0x7A180AA4
+
| 3.60 || 0xEC636BCB
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">
+
<source lang="c">int sceKernelAllocUnmapMemBlock(char *name, SceSize size);</source>
// thread_index must be < 8
 
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);
 
</source>
 
  
=== sceKernelTlsKernelGetForKernel ===
+
=== sceKernelOpenVMDomain ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940 || 0x28E080BC
+
| 1.69-3.60 || 0x9CA3EB2B
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">
+
<source lang="c">int sceKernelOpenVMDomain();</source>
// thread_index must be < 8
 
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);
 
</source>
 
  
=== sceKernelRoundupDCacheLineForKernel ===
+
=== sceKernelSyncVMDomain ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xED512F50
+
| 1.69-3.60 || 0x19D2A81A
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Calls the function previously registered by [[SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel]].
+
<source lang="c">int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);</source>
 
 
<source lang="C">int sceKernelRoundupDCacheLineForKernel(int a1);</source>
 
  
=== sceKernelSetRoundupDCacheLineFuncForKernel ===
+
=== sceKernelCloseVMDomain ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x66C3AA93
+
| 1.69-3.60 || 0xD6CA56CA
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Uses CTR and CTR-DMINLINE to determine which function to return.
+
<source lang="c">int sceKernelCloseVMDomain();</source>
  
<source lang="C">(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);</source>
+
=== sceKernelAllocMemBlockForVM ===
 
 
=== sceKernelReadUser8ForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x942B92C3
+
| 1.69-3.60 || 0xE2D7E137
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
+
<source lang="c">SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize vsize);</source>
  
=== sceKernelReadUser16ForKernel ===
+
=== sceKernelCheckModelCapability ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || maybe present
+
| 3.60 || 0x0144FBD9
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
+
<source lang="c">int sceKernelCheckModelCapability(int bit);</source>
  
=== sceKernelReadUser32ForKernel ===
+
=== sceKernelGetModelForCDialog ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x6091086F
+
| 3.60 || 0xA2CB322F
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
+
<source lang="c">int sceKernelGetModelForCDialog();</source>
  
=== sceKernelWriteUser8ForKernel ===
+
=== sceKernelGetModel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x13B7B151
+
| 3.60 || 0xD0D4F729
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);</source>
+
<source lang="c">int sceKernelGetModel();</source>
  
=== sceKernelWriteUser16ForKernel ===
+
=== sceKernelIsPSVitaTV ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || maybe present
+
| 3.60 || 0x1453A5E5
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);</source>
+
<source lang="c">int sceKernelIsPSVitaTV();</source>
 +
 
 +
== SceDipsw ==
  
=== sceKernelWriteUser32ForKernel ===
+
=== sceKernelCheckDipsw ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x101894E0
+
| 1.69-3.60 || 0x1C783FB2
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);</source>
+
=== sceKernelClearDipsw ===
 
 
=== sceKernelVMRead8ForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xA2F0FE9D
+
| 1.69-3.60 || 0x800EDCC1
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
+
=== sceKernelSetDipsw ===
 
 
=== sceKernelVMRead16ForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xF31D4D10
+
| 1.69-3.60 || 0x817053D4
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
+
== SceDipswForDriver ==
  
=== sceKernelVMRead32ForKernel ===
+
=== sceKernelCheckDipswForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x316574B1
+
| 3.60 || 0xA98FC2FD
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
+
<source lang="C">int sceKernelCheckDipswForDriver(int no);</source>
  
=== sceKernelVMWrite8ForKernel ===
+
=== sceKernelGetDipswInfoForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xA3C65664
+
| 3.60 || 0xB2AD48BE
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);</source>
+
This is a guessed name (cannot find an evidence).
 +
 
 +
<source lang="C">return *(int *)(dipsw_addr + 4 * info_id);</source>
 +
 
 +
info_id:
 +
* 0: CP timestamp 1
 +
* 1: CP Version, CP Board ID
 +
* 2: CP timestamp 2
 +
* 3: ASLR Seed
 +
 
 +
See [[KBL Param#DIP Switches]].
 +
 
 +
<source lang="C">int sceKernelGetDipswInfoForDriver(SceUInt32 info_id);</source>
  
=== sceKernelVMWrite16ForKernel ===
+
=== sceKernelClearDipswForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xBF38A460
+
| 3.60 || 0xF1F3E9FE
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);</source>
+
<source lang="C">void sceKernelClearDipswForDriver(int no);</source>
  
=== sceKernelVMWrite32ForKernel ===
+
=== sceKernelSetDipswForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x04D129B2
+
| 3.60 || 0x82E45FBF
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);</source>
+
<source lang="C">void sceKernelSetDipswForDriver(int no);</source>
 +
 
 +
== SceUartForKernel ==
  
=== sceKernelMMUIsValidMapForKernel ===
+
=== sceKernelUartInitForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x4891F923
+
| 0.931-3.60 || 0xA9C74212
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);</source>
+
Temp name was sceUartInitForKernel.
 +
 
 +
It initializes the clock generator registers for the UART <code>port</code>. See [[UART Registers]]. The default baud rate is 115200 for ports 0-5 and 250000 for port 6.
 +
 
 +
<source lang="C">
 +
// port: 0-6
 +
int sceKernelUartInitForKernel(SceUInt32 port);
 +
</source>
  
=== sceKernelMMUIsValidUnmapForKernel ===
+
=== sceKernelUartReadAvailableForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x60EA8433
+
| 0.990 || not present
 
|-
 
|-
| 3.60 || not present
+
| 3.60 || 0x38DB7629
 
|}
 
|}
  
<source lang="C">int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);</source>
+
Temp name was sceUartReadAvailableForKernel.
 +
 
 +
Returns the number of words available to read from the read FIFO.
 +
 
 +
<source lang="c">int sceKernelUartReadAvailableForKernel(int port);</source>
  
=== sceKernelMMUL1GetInfoForKernel ===
+
=== sceKernelUartReadForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x9D346F87
+
| 0.931-3.60 || 0x9BBF1255
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Parses a L1PT for information about a specific entry. Pass the address of the L1PT in <code>l1pt</code>. Used by [[SceSysmem#sceKernelAddressSpaceGetMMUL1InfoForKernel|sceKernelAddressSpaceGetMMUL1InfoForKernel]].
+
Temp name was sceUartReadForKernel.
  
<source lang="C">SceInt32 sceKernelMMUL1GetInfoForKernel(void* l1pt, const void *addr, SceKernelMMUL1Info *pInfo);</source>
+
<source lang="c">int sceKernelUartReadForKernel(int port);</source>
  
=== sceKernelMMUL2GetInfoForKernel ===
+
=== sceKernelUartWriteForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x247629A7
+
| 0.931-3.60 || 0x41973874
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);</source>
+
Temp name was sceUartWriteForKernel.
 +
 
 +
<source lang="c">int sceKernelUartWriteForKernel(int port, char c);</source>
  
=== sceKernelMMUMapSectionsForKernel ===
+
=== sceKernelUartPutcharForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x868B471A
+
| 0.931-0.990 || 0xAF243C6A
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
|-
 
| 3.65 || Present, but not exported
 
 
|}
 
|}
  
<source lang="C">SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>
+
<source lang="c">int sceKernelUartPutcharForKernel(char c);</source>
 +
 
 +
== SceCpu ==
 +
This library provides wrapper for much ARM CP15 co-processor access as well as low level support of spinlocks and other synchronization primitives.
  
=== sceKernelMMUMapSupersectionsForKernel ===
+
=== sceKernelCpuId ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x0D9DA15F
+
| 1.69-3.60 || 0x2704CFEE
|-
 
| 3.60 || not present
 
|-
 
| 3.65 || Present, but not exported
 
 
|}
 
|}
  
<source lang="C">SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>
+
Return the CPU ID of the current core.
 +
 
 +
<source lang="c">SceUInt sceKernelCpuId(void);</source>
 +
 
 +
== SceCpuForKernel ==
  
=== sceKernelMMUMapSmallPagesForKernel ===
+
=== sceKernelSendEventForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xB953E022
+
| 0.990 || 0x45885327
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
|-
 
| 3.65 || Present, but not exported
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>
+
<source lang="C">void sceKernelSendEventForKernel(void);</source>
  
=== sceKernelMMUMapSmallPageForKernel ===
+
=== sceKernelWaitForEventForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xCC7C16F8
+
| 0.931 || 0xD2629465
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);</source>
+
<source lang="C">void sceKernelWaitForEventForKernel(void);</source>
  
=== sceKernelMMUMapLargePagesForKernel ===
+
=== sceKernelPrintCpuModeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x78D32D38
+
| 0.931 || 0xDC99515C
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
|-
 
| 3.65 || Present, but not exported
 
 
|}
 
|}
  
<source lang="C">int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>
+
=== sceKernelTlsKernelSetForKernel ===
 
 
=== sceKernelMMUUnmapSectionsWithFlagsForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xFC657FD1
+
| 0.940 || 0x7A180AA4
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>
+
<source lang="C">
 +
// thread_index must be < 8
 +
void *sceKernelTlsKernelSetForKernel(SceUInt32 thread_index, void *tls);
 +
</source>
  
=== sceKernelMMUUnmapSupersectionsWithFlagsForKernel ===
+
=== sceKernelTlsKernelGetForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x0E4D29C6
+
| 0.940 || 0x28E080BC
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>
+
<source lang="C">
 +
// thread_index must be < 8
 +
void *sceKernelTlsKernelGetForKernel(SceUInt32 thread_index);
 +
</source>
  
=== sceKernelMMUUnmapSmallPagesWithFlagsForKernel ===
+
=== sceKernelRoundupDCacheLineForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x11EBA8CE
+
| 0.931-0.990 || 0xED512F50
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>
+
Calls the function previously registered by [[SceSysmem#sceKernelSetRoundupDCacheLineFuncForKernel]].
  
=== sceKernelMMUUnmapLargePagesWithFlagsForKernel ===
+
<source lang="C">int sceKernelRoundupDCacheLineForKernel(int a1);</source>
 +
 
 +
=== sceKernelSetRoundupDCacheLineFuncForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x44319918
+
| 0.931-0.990 || 0x66C3AA93
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>
+
Uses CTR and CTR-DMINLINE to determine which function to return.
 +
 
 +
<source lang="C">(int sceKernelRoundupDCacheLineForKernel(int) *) sceKernelSetRoundupDCacheLineFuncForKernel(void);</source>
  
=== sceKernelMMUL1VAtoPABySWForKernel ===
+
=== sceKernelReadUser8ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x8E4ECF17
+
| 0.990 || 0x942B92C3
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);</source>
+
<source lang="C">int sceKernelReadUser8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
  
=== sceKernelMMUSetL2PageTableForKernel ===
+
=== sceKernelReadUser16ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xAECA0820
+
| 0.990 || maybe present
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);</source>
+
<source lang="C">int sceKernelReadUser16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
  
=== sceKernelMMUUnsetL2PageTableForKernel ===
+
=== sceKernelReadUser32ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xCB519DF3
+
| 0.990 || 0x6091086F
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);</source>
+
<source lang="C">int sceKernelReadUser32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
  
=== SceCpuForKernel_CA4124DE ===
+
=== sceKernelWriteUser8ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xCA4124DE
+
| 0.990 || 0x13B7B151
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Returns 1, 2 or 6 based on some page/section properties.
+
<source lang="C">int sceKernelWriteUser8ForKernel(uint8_t *dest, uint8_t val);</source>
  
<source lang="C">int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);</source>
+
=== sceKernelWriteUser16ForKernel ===
 
 
=== sceKernelMMUGetContextForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x211B89DA
+
| 0.990 || maybe present
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelCpuSaveContextForKernel.
+
<source lang="C">int sceKernelWriteUser16ForKernel(uint16_t *dest, uint16_t val);</source>
  
<source lang="C">
+
=== sceKernelWriteUser32ForKernel ===
typedef struct SceKernelMMUContext { // size is 0xC on FW 0.931
 
  uint32_t unk_0;
 
  uint32_t unk_4;
 
  uint32_t unk_8;
 
} SceKernelMMUContext;
 
 
 
int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);</source>
 
 
 
=== sceKernelMMUChangeContextForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x0A4F0FB9
+
| 0.990 || 0x101894E0
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelCpuRestoreContextForKernel.
+
<source lang="C">int sceKernelWriteUser32ForKernel(uint32_t *dest, uint32_t val);</source>
  
<source lang="C">int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);</source>
+
=== sceKernelVMRead8ForKernel ===
 
 
=== sceKernelMMUVAtoPAWithModeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x67343A07
+
| 0.990 || 0xA2F0FE9D
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelCpuGetPaddrWithMaskForKernel.
+
<source lang="C">int sceKernelVMRead8ForKernel(uint8_t *dest, uint8_t *psrc);</source>
  
mode (maskPAR) is usually 0x33, sometimes 2.
+
=== sceKernelVMRead16ForKernel ===
 
 
<source lang="c">int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);</source>
 
 
 
=== sceKernelMMUCheckRangeWithModeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xCCDA3B8C
+
| 0.990 || 0xF31D4D10
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Return 0 if all pages are valid, < 0 else.
+
<source lang="C">int sceKernelVMRead16ForKernel(uint16_t *dest, uint16_t *psrc);</source>
  
<source lang="C">int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);</source>
+
=== sceKernelVMRead32ForKernel ===
 
 
=== sceKernelMMUVAtoPAForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x2A46E800
+
| 0.931-0.990 || 0x316574B1
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelCpuGetPaddrForKernel.
+
<source lang="C">int sceKernelVMRead32ForKernel(uint32_t *dest, uint32_t *psrc);</source>
  
Uses mode (maskPAR) 0x33.
+
=== sceKernelVMWrite8ForKernel ===
 
 
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.
 
 
 
Returns <0 on error, values >=0 indicate success.
 
 
 
<source lang="c">int sceKernelMMUVAtoPAForKernel(void *pVA, void **pPA);</source>
 
 
 
=== sceKernelCpuGetCONTEXTIDRForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x5B6B3274
+
| 0.931 || 0xA3C65664
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
The CONTEXTIDR, bits [31:0] contain the process ID number.
+
<source lang="C">int sceKernelVMWrite8ForKernel(uint8_t *dest, uint8_t val);</source>
  
<source lang="C">
+
=== sceKernelVMWrite16ForKernel ===
  return (unsigned __int8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)
 
</source>
 
 
 
<source lang="C">void sceKernelCpuGetCONTEXTIDRForKernel(void);</source>
 
 
 
=== sceKernelCpuUpdateSCTLRForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x04008CF7
+
| 0.931 || 0xBF38A460
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">
+
<source lang="C">int sceKernelVMWrite16ForKernel(uint16_t *dest, uint16_t val);</source>
  int result;
 
  result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)
 
  __mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)
 
  return result;
 
</source>
 
  
<source lang="C">void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)</source>
+
=== sceKernelVMWrite32ForKernel ===
 
 
=== sceKernelCpuBranchPredictorInvalidateAllISForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1BB2BB8D
+
| 0.931 || 0x04D129B2
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)</source>
 
  
=== sceKernelCpuBranchPredictorInvalidateAllForKernel ===
+
<source lang="C">int sceKernelVMWrite32ForKernel(uint32_t *dest, uint32_t val);</source>
 +
 
 +
=== sceKernelMMUIsValidMapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4C4C7D6B
+
| 0.931 || 0x4891F923
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all</source>
 
  
=== sceKernelDcacheCleanInvalidateAll ===
+
<source lang="C">int sceKernelMMUIsValidMapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size, const void *pbase);</source>
 +
 
 +
=== sceKernelMMUIsValidUnmapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x85A27F98
+
| 0.931 || 0x60EA8433
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Flushes PLE then cleans and invalidates L1 Dcache and L2 cache in this order.
+
<source lang="C">int sceKernelMMUIsValidUnmapForKernel(SceKernelMMUContext *context, const void *vbase, SceSize size);</source>
  
<source lang="c">void sceKernelDcacheCleanInvalidateAll(void);</source>
+
=== sceKernelMMUL1GetInfoForKernel ===
 
 
=== sceKernelCpuDcacheInvalidateMVACForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x470EAE1E
+
| 0.931-0.990 || 0x9D346F87
|}
 
<source lang="C">void sceKernelCpuDcacheInvalidateMVACForKernel(int mva); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>
 
 
 
=== sceKernelL1DcacheInvalidateRangeForKernel ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| 3.60 || not present
|-
 
| 3.60 || 0x583F30D1
 
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateMVACRangeForKernel.
+
Parses a L1PT for information about a specific entry. Pass the address of the L1PT in <code>l1pt</code>. Used by [[SceSysmem#sceKernelAddressSpaceGetMMUL1InfoForKernel|sceKernelAddressSpaceGetMMUL1InfoForKernel]].
  
<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>
+
<source lang="C">SceInt32 sceKernelMMUL1GetInfoForKernel(void* l1pt, const void *addr, SceKernelMMUL1Info *pInfo);</source>
  
=== sceKernelL1DcacheCleanInvalidateRangeForKernel ===
+
=== sceKernelMMUL2GetInfoForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x6BA2E51C
+
| 0.931-0.990 || 0x247629A7
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel, sceKernelDcacheWritebackInvalidateRangeForKernel.
+
<source lang="C">int sceKernelMMUL2GetInfoForKernel(int a1, void *addr, void *pInfo);</source>
  
<source lang="C">
+
=== sceKernelMMUMapSectionsForKernel ===
// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)
 
void sceKernelL1DcacheCleanInvalidateRangeForKernel(const void *addr, unsigned int size);
 
</source>
 
 
 
=== sceKernelL1DcacheInvalidateAllForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2F3BF020
+
| 0.931-0.990 || 0x868B471A
 +
|-
 +
| 3.60 || not present
 +
|-
 +
| 3.65 || Present, but not exported
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateSWForKernel.
+
<source lang="C">SceInt32 sceKernelMMUMapSectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>
  
<source lang="C">void sceKernelL1DcacheInvalidateAllForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)</source>
+
=== sceKernelMMUMapSupersectionsForKernel ===
 
 
=== sceKernelL1DcacheCleanAllForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x73A30DB2
+
| 0.931-0.990 || 0x0D9DA15F
 +
|-
 +
| 3.60 || not present
 +
|-
 +
| 3.65 || Present, but not exported
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCpuDcacheCleanSWForKernel.
+
<source lang="C">SceInt32 sceKernelMMUMapSupersectionsForKernel(const void *ttbr, SceKernelMemoryType code, SceUInt32 domain, void *vaddr, SceSize vsize, void *paddr);</source>
  
<source lang="C">void sceKernelL1DcacheCleanAllForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)</source>
+
=== sceKernelMMUMapSmallPagesForKernel ===
 
 
=== sceKernelL1DcacheCleanInvalidateAllForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x76DAB4D0
+
| 0.931-0.990 || 0xB953E022
 +
|-
 +
| 3.60 || not present
 +
|-
 +
| 3.65 || Present, but not exported
 
|}
 
|}
  
Guessed name was sceKernelCpuDcacheCleanInvalidateSWForKernel.
+
<source lang="C">int sceKernelMMUMapSmallPagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>
  
<source lang="C">void sceKernelL1DcacheCleanInvalidateAllForKernel(void);</source>
+
=== sceKernelMMUMapSmallPageForKernel ===
 
 
=== sceKernelCpuDcacheCleanMVACForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF7159B55
+
| 0.931-0.990 || 0xCC7C16F8
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
<source lang="C">void sceKernelCpuDcacheCleanMVACForKernel(int mva); // DCCMVAC, Data cache clean by MVA (PoC)</source>
 
  
=== sceKernelL1DcacheCleanRangeForKernel ===
+
<source lang="C">int sceKernelMMUMapSmallPageForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, void *paddr);</source>
 +
 
 +
=== sceKernelMMUMapLargePagesForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xC5C1EE4E
+
| 0.931-0.990 || 0x78D32D38
 +
|-
 +
| 3.60 || not present
 +
|-
 +
| 3.65 || Present, but not exported
 
|}
 
|}
  
Guessed name was sceKernelCpuDcacheCleanMVACRangeForKernel.
+
<source lang="C">int sceKernelMMUMapLargePagesForKernel(const void *table, SceKernelMemoryType code, void *vbase, SceUInt32 voffset, SceSize vsize, void *paddr);</source>
  
<source lang="C">void sceKernelL1DcacheCleanRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)</source>
+
=== sceKernelMMUUnmapSectionsWithFlagsForKernel ===
 
 
=== sceKernelL1DcacheInvalidateRangeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC8E8C9E9
+
| 0.931-0.990 || 0xFC657FD1
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACForKernel.
+
<source lang="C">int sceKernelMMUUnmapSectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>
  
<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(int mva); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)</source>
+
=== sceKernelMMUUnmapSupersectionsWithFlagsForKernel ===
 
 
=== sceKernelL1IcacheInvalidateEntireAllCoreForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x264DA250
+
| 0.931-0.990 || 0x0E4D29C6
 
|-
 
|-
| 3.65 || 0x803C84BF
+
| 3.60 || not present
 
|}
 
|}
  
Guessed name was sceKernelCpuIcacheInvalidateAllUISForKernel.
+
<source lang="C">int sceKernelMMUUnmapSupersectionsWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceSize vsize, SceUInt32 flags);</source>
  
Invalidates the L1 Icache for all cores.
+
=== sceKernelMMUUnmapSmallPagesWithFlagsForKernel ===
 
 
<source lang="C">void sceKernelL1IcacheInvalidateEntireAllCoreForKernel(void);</source>
 
 
 
=== sceKernelL1CacheInvalidateEntireForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xAEE0B489
+
| 0.931-0.990 || 0x11EBA8CE
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelCpuIcacheInvalidateAllUForKernel.
+
<source lang="C">int sceKernelMMUUnmapSmallPagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>
  
Invalidates the entire L1 Icache of this core.
+
=== sceKernelMMUUnmapLargePagesWithFlagsForKernel ===
 
 
<source lang="C">void sceKernelL1CacheInvalidateEntireForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)</source>
 
 
 
=== sceKernelL1IcacheInvalidateRangeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF4C7F578
+
| 0.931-0.990 || 0x44319918
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelCpuIcacheInvalidateRangeForKernel, sceKernelCpuIcacheInvalidateMVAURange.
+
<source lang="C">int sceKernelMMUUnmapLargePagesWithFlagsForKernel(const void *table, uint32_t maybe_ttbr0, void *vbase, SceUInt32 voffset, SceSize vsize, SceUInt32 flags);</source>
  
Invalidates a range in L1 Icache of this core.
+
=== sceKernelMMUL1VAtoPABySWForKernel ===
 
 
<source lang="C">
 
// ICIMVAU, Instruction cache invalidate by MVA (PoU)
 
void sceKernelL1IcacheInvalidateRangeForKernel(void *start, SceSize size);
 
</source>
 
 
 
=== sceKernelIcacheInvalidateRangeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x19F17BD0
+
| 0.990 || 0x8E4ECF17
 
|-
 
|-
| 3.65-3.68 || 0x73E895EA
+
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.
+
<source lang="C">int sceKernelMMUL1VAtoPABySWForKernel(const void *table, void *pVA, void **pPA);</source>
  
Cleans and invalidates range in L2 cache, then in L1 Icache of core.
+
=== sceKernelMMUSetL2PageTableForKernel ===
 
 
<source lang="c">int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);</source>
 
 
 
=== sceKernelPleFlushRequest ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD0D85FF8
+
| 0.990 || 0xAECA0820
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temporary name was <code>sceKernelCpuPreloadEngineKill</code>.
+
<source lang="C">int sceKernelMMUSetL2PageTableForKernel(const void *ttbr, const void *map, const void *pbase);</source>
  
*NSACR (Non-Secure Access Control Register)
+
=== sceKernelMMUUnsetL2PageTableForKernel ===
*Test bit NS access to the Preload Engine resources
 
*[>] PLEFF (Preload Engine FIFO flush operation)
 
*[>] PLEKC (Preload Engine kill channel operation)
 
*[<] PLEASR (Preload Engine Activity Status Register)
 
 
 
<source lang="c">void sceKernelPleFlushRequest(void);</source>
 
 
 
=== sceKernelDomainTextMemcpyForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x8C683DEC
+
| 0.990 || 0xCB519DF3
 
|-
 
|-
| 3.65 || Removed
+
| 3.60 || not present
 
|}
 
|}
  
Guessed name was <code>sceKernelCpuUnrestrictedMemcpy</code>.
+
<source lang="C">int sceKernelMMUUnsetL2PageTableForKernel(const void *ttbr, const void *PTE);</source>
  
Unrestricted memcpy by first setting the <code>DACR</code> register to <code>0xFFFF0000</code> and then doing a memcpy.
+
=== SceCpuForKernel_CA4124DE ===
 
 
In old firmware (0.931), <code>DACR</code> is set to <code>0xFFFFFFFF</code> instead and interrupts are disabled for the operation.
 
 
 
<source lang="c">int sceKernelDomainTextMemcpyForKernel(void *dest, const void *src, SceSize len);</source>
 
 
 
=== sceKernelCpuForKernel_9B8173F4 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x9B8173F4
+
| 0.990 || 0xCA4124DE
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Might be get_vaddr_memory_type.
+
Returns 1, 2 or 6 based on some page/section properties.
  
Return value can be:
+
<source lang="C">int SceCpuForKernel_CA4124DE(const void *table, void *pVA, void **pPA);</source>
* 2
 
* 8
 
* 0x40
 
* 0x80
 
* 0xD0
 
* 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)
 
  
<source lang="c">int sceKernelCpuForKernel_9B8173F4(void *vaddr);</source>
+
=== sceKernelMMUGetContextForKernel ===
 
 
=== sceKernelCoreSyncAllForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA5C9DBBA
+
| 0.931 || 0x211B89DA
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.
+
Temp name was sceKernelCpuSaveContextForKernel.
  
<source lang="c">
+
<source lang="C">
typedef struct SceCpuCoreSyncCtx {
+
typedef struct SceKernelMMUContext { // size is 0xC on FW 0.931
int lock;
+
  uint32_t unk_0;
int16_t core_count;
+
  uint32_t unk_4;
int16_t last_wait_core; // 0:core3, 1:core0, 2:core1, 3:core2
+
  uint32_t unk_8;
} SceCpuCoreSyncCtx;
+
} SceKernelMMUContext;
  
void sceKernelCoreSyncAllForKernel(SceCpuCoreSyncCtx *pCtx);
+
int sceKernelMMUGetContextForKernel(SceKernelMMUContext *context);</source>
</source>
 
  
=== sceKernelCoreSyncWaitForKernel ===
+
=== sceKernelMMUChangeContextForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9D72DD1B
+
| 0.931 || 0x0A4F0FB9
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
This is a temp name.
+
Temp name was sceKernelCpuRestoreContextForKernel.
  
<source lang="c">
+
<source lang="C">int sceKernelMMUChangeContextForKernel(SceKernelMMUContext *context);</source>
#define SCE_CPU_WAIT_CORE_0 1
 
#define SCE_CPU_WAIT_CORE_1 2
 
#define SCE_CPU_WAIT_CORE_2 3
 
#define SCE_CPU_WAIT_CORE_3 0
 
  
void sceKernelCoreSyncWaitForKernel(SceCpuCoreSyncCtx *pCtx, int core);
+
=== sceKernelMMUVAtoPAWithModeForKernel ===
</source>
 
 
 
=== sceKernelInitCpuCoreSyncCtxForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x4CD4D921
+
| 0.931-3.60 || 0x67343A07
 
|}
 
|}
  
This is a temp name.
+
Temp name was sceKernelCpuGetPaddrWithMaskForKernel.
 +
 
 +
mode (maskPAR) is usually 0x33, sometimes 2.
  
<source lang="C">void sceKernelInitCpuCoreSyncCtxForKernel(SceCpuCoreSyncCtx *pCtx);</source>
+
<source lang="c">int sceKernelMMUVAtoPAWithModeForKernel(int mode, void *pVA, void **ppPA);</source>
  
=== SceCpuForKernel_43CC6E20 ===
+
=== sceKernelMMUCheckRangeWithModeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x43CC6E20
+
| 0.931 || 0xCCDA3B8C
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
DACR off
+
Return 0 if all pages are valid, < 0 else.
  
Does some memory copies between the args.
+
<source lang="C">int sceKernelMMUCheckRangeWithModeForKernel(int mode, void *start, SceSize size);</source>
  
<source lang="c">int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);</source>
+
=== sceKernelMMUVAtoPAForKernel ===
 
 
=== sceCpuUnrestrictedBzeroIntForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x76EB0DD4
+
| 0.931-3.60 || 0x2A46E800
 
|}
 
|}
  
DACR off
+
Temp name was sceKernelCpuGetPaddrForKernel.
 +
 
 +
Uses mode (maskPAR) 0x33.
 +
 
 +
This will write the physical address for a virtual address <code>pVA</code> to memory pointed to by <code>pPA</code>.
 +
 
 +
Returns <0 on error, values >=0 indicate success.
  
<source lang="c">int sceCpuUnrestrictedBzeroIntForKernel(int *addr);</source>
+
<source lang="c">int sceKernelMMUVAtoPAForKernel(void *pVA, void **pPA);</source>
  
=== SceCpuForKernel_337473B5 ===
+
=== sceKernelCpuGetCONTEXTIDRForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x337473B5
+
| 3.60 || 0x5B6B3274
 
|}
 
|}
  
DACR off
+
The CONTEXTIDR, bits [31:0] contain the process ID number.
  
If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.
+
<source lang="C">
 +
  return (unsigned __int8)__mrc(15, 0, 13, 0, 1); // Read CONTEXTIDR (Context ID Register)
 +
</source>
  
<source lang="c">int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);</source>
+
<source lang="C">void sceKernelCpuGetCONTEXTIDRForKernel(void);</source>
  
=== sceKernelCpuAtomicSubIfGreater64ForKernel ===
+
=== sceKernelCpuUpdateSCTLRForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x37FBFD12
+
| 3.60 || 0x04008CF7
 
|}
 
|}
  
DACR is not disabled
+
<source lang="C">
 +
  int result;
 +
  result = __mrc(15, 0, 1, 0, 0) | 0x1806; // Read SCTLR (System Control Register)
 +
  __mcr(15, 0, result, 1, 0, 0); // Write SCTLR (System Control Register)
 +
  return result;
 +
</source>
  
<source lang="c">int sceKernelCpuAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);</source>
+
<source lang="C">void sceKernelCpuUpdateSCTLRForKernel(void); // SCTLR (System Control Register)</source>
  
=== sceKernelCpuAtomicLimit64ForKernel ===
+
=== sceKernelCpuBranchPredictorInvalidateAllISForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x6190A018
+
| 3.60 || 0x1BB2BB8D
 
|}
 
|}
 +
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllISForKernel(void); // BPIALLIS, Branch predictor invalidate all (IS)</source>
  
DACR is not disabled
+
=== sceKernelCpuBranchPredictorInvalidateAllForKernel ===
 
 
<source lang="c">int sceKernelCpuAtomicLimit64ForKernel(unsigned long long *result, int limit);</source>
 
 
 
=== sceKernelCpuAtomicAdd32AndGet64InRangeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD8A7216C
+
| 3.60 || 0x4C4C7D6B
 
|}
 
|}
 +
<source lang="C">void sceKernelCpuBranchPredictorInvalidateAllForKernel(void); // BPIALL, Branch predictor invalidate all</source>
  
DACR is not disabled
+
=== sceKernelDcacheCleanInvalidateAll ===
 
 
<source lang="C">int sceKernelCpuAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);</source>
 
 
 
=== sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD37AABE5
+
| 0.931 || 0x85A27F98
 
|}
 
|}
  
DACR is not disabled
+
Flushes PLE then cleans and invalidates L1 Dcache and L2 cache in this order.
  
<source lang="c">int sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);</source>
+
<source lang="c">void sceKernelDcacheCleanInvalidateAll(void);</source>
  
=== sceKernelCpuAtomicGet32AndSet64ForKernel ===
+
=== sceKernelCpuDcacheInvalidateMVACForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60 || 0x470EAE1E
|-
 
| 3.60 || 0x4553FBDE
 
 
|}
 
|}
 +
<source lang="C">void sceKernelCpuDcacheInvalidateMVACForKernel(int mva); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>
  
DACR is not disabled
+
=== sceKernelL1DcacheInvalidateRangeForKernel ===
 
 
<source lang="c">int sceKernelCpuAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);</source>
 
 
 
=== sceKernelCpuAtomicGet32AndSet64_2ForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 3.60 || 0x583F30D1
|-
 
| 3.60 || 0x7FB4E7AC
 
 
|}
 
|}
  
Exact same code as SceCpuForKernel_4553FBDE.
+
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateMVACRangeForKernel.
  
DACR is not disabled
+
<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(void *addr, unsigned int size); // DCIMVAC, Data cache invalidate by MVA (PoC)</source>
  
<source lang="c">int sceKernelCpuAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);</source>
+
=== sceKernelL1DcacheCleanInvalidateRangeForKernel ===
 
 
=== sceKernelCpuAtomicDecIfLowPositive32ForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8510FA52
+
| 0.931-3.60 || 0x6BA2E51C
 
|}
 
|}
  
DACR is not disabled
+
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACRangeForKernel, sceKernelCpuDcacheWritebackInvalidateRangeForKernel, sceKernelDcacheWritebackInvalidateRangeForKernel.
  
<source lang="c">int sceKernelCpuAtomicDecIfLowPositive32ForKernel(unsigned int *addr);</source>
+
<source lang="C">
 +
// DCCIMVAC, Data cache clean and invalidate by MVA (PoC)
 +
void sceKernelL1DcacheCleanInvalidateRangeForKernel(const void *addr, unsigned int size);
 +
</source>
  
=== sceKernelCpuAtomicHiLoAlgorithmForKernel ===
+
=== sceKernelL1DcacheInvalidateAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x5F64E5ED
+
| 3.60 || 0x2F3BF020
 
|}
 
|}
  
DACR is not disabled
+
This is a guessed name. Temp name was sceKernelCpuDcacheInvalidateSWForKernel.
  
Returns current value (high + low), and sets it to max_low.
+
<source lang="C">void sceKernelL1DcacheInvalidateAllForKernel(void); // DCISW, Data cache invalidate by set/way (all the cache)</source>
  
<source lang="c">int sceKernelCpuAtomicHiLoAlgorithmForKernel(SceUInt32 *max_low);</source>
+
=== sceKernelL1DcacheCleanAllForKernel ===
 
 
=== sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x98E91C1C
+
| 3.60 || 0x73A30DB2
 
|}
 
|}
  
DACR is not disabled
+
This is a guessed name. Temp name was sceKernelCpuDcacheCleanSWForKernel.
  
If val is negative, returns 2 and does not override val.
+
<source lang="C">void sceKernelL1DcacheCleanAllForKernel(void); // DCCSW, Data cache clean by set/way (all the cache)</source>
  
<source lang="C">int sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel(int *val, int add_val, int limit);</source>
+
=== sceKernelL1DcacheCleanInvalidateAllForKernel ===
 
 
=== SceCpuForKernel_6C7E7B57 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x6C7E7B57
+
| 0.931-3.60 || 0x76DAB4D0
 
|}
 
|}
  
Set TTBR lower value (0x4A).
+
Guessed name was sceKernelCpuDcacheCleanInvalidateSWForKernel.
  
<source lang="c">int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);</source>
+
<source lang="C">void sceKernelL1DcacheCleanInvalidateAllForKernel(void);</source>
  
=== SceCpuForKernel_AED8F8D7 ===
+
=== sceKernelCpuDcacheCleanMVACForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xAED8F8D7
+
| 3.60 || 0xF7159B55
|-
 
| 3.60 || not present
 
 
|}
 
|}
 +
<source lang="C">void sceKernelCpuDcacheCleanMVACForKernel(int mva); // DCCMVAC, Data cache clean by MVA (PoC)</source>
  
Initialize TTBR.
+
=== sceKernelL1DcacheCleanRangeForKernel ===
 
 
<source lang="C">int SceCpuForKernel_AED8F8D7(const void *ttbr);</source>
 
 
 
=== SceCpuForKernel_9A3281C0 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x9A3281C0
+
| 0.931-3.60 || 0xC5C1EE4E
|-
 
| 3.65 || 0xC32687D0
 
 
|}
 
|}
  
Gets start and end of a special code area in which the kernel<->user memory copy routines reside.
+
Guessed name was sceKernelCpuDcacheCleanMVACRangeForKernel.
See [[SceExcpmgr]] page for more information about how this is used.
 
  
In older firmware, this function also provides the start and end of the "memory access error range" code area (see [[SceExcpmgr#SceExcpmgrForKernel_C45C0D3D|SceExcpmgrForKernel_C45C0D3D]] for what this range is for).
+
<source lang="C">void sceKernelL1DcacheCleanRangeForKernel(void *addr, unsigned int size); // DCCMVAC, Data cache clean by MVA (PoC)</source>
  
<source lang="c">
+
=== sceKernelL1DcacheInvalidateRangeForKernel ===
//0.990
 
void SceCpuForKernel_9A3281C0(SceUIntPtr *pMemErrorAreaStart, SceUIntPtr* pMemErrorAreaEnd, SceUIntPtr *pUKCopyAreaStart, SceUIntPtr* pUKCopyAreaEnd)
 
 
 
//3.60+
 
void SceCpuForKernel_9A3281C0(SceUIntPtr *pUKCopyAreaStart, SceUIntPtr* pUKCopyAreaEnd);
 
</source>
 
 
 
=== SceCpuForKernel_9CB82EB0 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x9CB82EB0
+
| 3.60 || 0xC8E8C9E9
 
|}
 
|}
  
<source lang="C">
+
This is a guessed name. Temp name was sceKernelCpuDcacheCleanInvalidateMVACForKernel.
return;
 
</source>
 
  
<source lang="c">int SceCpuForKernel_9CB82EB0(void);</source>
+
<source lang="C">void sceKernelL1DcacheInvalidateRangeForKernel(int mva); // DCCIMVAC, Data cache clean and invalidate by MVA (PoC)</source>
  
== SceCpuForDriver ==
+
=== sceKernelL1IcacheInvalidateEntireAllCoreForKernel ===
 
 
=== sceKernelRoundupDCacheLine3ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xF0849812
+
| 0.931-3.60 || 0x264DA250
 
|-
 
|-
| 3.60 || not present
+
| 3.65 || 0x803C84BF
 
|}
 
|}
  
<source lang="C">int sceKernelRoundupDCacheLine3ForDriver(int a1);</source>
+
Guessed name was sceKernelCpuIcacheInvalidateAllUISForKernel.
  
=== sceKernelAbortForDriver ===
+
Invalidates the L1 Icache for all cores.
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 0.931-0.990 || 0x6DCA6903
 
|-
 
| 3.60 || not present
 
|}
 
  
<source lang="C">void sceKernelAbortForDriver(void);</source>
+
<source lang="C">void sceKernelL1IcacheInvalidateEntireAllCoreForKernel(void);</source>
  
=== sceKernelCpuIdForDriver ===
+
=== sceKernelL1CacheInvalidateEntireForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x5E4D5DE1
+
| 3.60 || 0xAEE0B489
 
|}
 
|}
  
Return the CPU ID of the current core.
+
This is a guessed name. Temp name was sceKernelCpuIcacheInvalidateAllUForKernel.
  
<source lang="c">int sceKernelCpuIdForDriver(void);</source>
+
Invalidates the entire L1 Icache of this core.
  
<hr>
+
<source lang="C">void sceKernelL1CacheInvalidateEntireForKernel(void); // ICIALLU, Instruction cache invalidate all (PoU)</source>
  
=== sceKernelCpuAtomicAddAndGet8ForDriver ===
+
=== sceKernelL1IcacheInvalidateRangeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1E850481
+
| 0.931-3.60 || 0xF4C7F578
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);</source>
+
Temp name was sceKernelCpuIcacheInvalidateRangeForKernel, sceKernelCpuIcacheInvalidateMVAURange.
 +
 
 +
Invalidates a range in L1 Icache of this core.
 +
 
 +
<source lang="C">
 +
// ICIMVAU, Instruction cache invalidate by MVA (PoU)
 +
void sceKernelL1IcacheInvalidateRangeForKernel(void *start, SceSize size);
 +
</source>
  
=== sceKernelCpuAtomicAddAndGet16ForDriver ===
+
=== sceKernelIcacheInvalidateRangeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x59F74E94
+
| 0.931-3.60 || 0x19F17BD0
 +
|-
 +
| 3.65-3.68 || 0x73E895EA
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
+
Temp name was sceKernelCpuIcacheAndL2InvalidateMVAURangeForKernel, sceKernelCpuIcacheAndL2WritebackInvalidateRangeForKernel.
 +
 
 +
Cleans and invalidates range in L2 cache, then in L1 Icache of core.
 +
 
 +
<source lang="c">int sceKernelIcacheInvalidateRangeForKernel(void *start, SceSize size);</source>
  
=== sceKernelCpuAtomicAddAndGet32ForDriver ===
+
=== sceKernelPleFlushRequest ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x5F6A8743
+
| 3.60 || 0xD0D85FF8
 
|}
 
|}
  
Adds <code>val</code> to <code>*addr</code> atomically, and returns the result.
+
Temporary name was <code>sceKernelCpuPreloadEngineKill</code>.
 +
 
 +
*NSACR (Non-Secure Access Control Register)
 +
*Test bit NS access to the Preload Engine resources
 +
*[>] PLEFF (Preload Engine FIFO flush operation)
 +
*[>] PLEKC (Preload Engine kill channel operation)
 +
*[<] PLEASR (Preload Engine Activity Status Register)
  
<source lang="c">unsigned int sceKernelCpuAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">void sceKernelPleFlushRequest(void);</source>
  
=== sceKernelCpuAtomicAddAndGet64ForDriver ===
+
=== sceKernelDomainTextMemcpyForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4E459A03
+
| 0.931-3.60 || 0x8C683DEC
 +
|-
 +
| 3.65 || Removed
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
Guessed name was <code>sceKernelCpuUnrestrictedMemcpy</code>.
 +
 
 +
Unrestricted memcpy by first setting the <code>DACR</code> register to <code>0xFFFF0000</code> and then doing a memcpy.
 +
 
 +
In old firmware (0.931), <code>DACR</code> is set to <code>0xFFFFFFFF</code> instead and interrupts are disabled for the operation.
  
<hr>
+
<source lang="c">int sceKernelDomainTextMemcpyForKernel(void *dest, const void *src, SceSize len);</source>
  
=== sceKernelCpuAtomicAddUnless8ForDriver ===
+
=== sceKernelCpuForKernel_9B8173F4 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x5CC62CEC
+
| 3.60 || 0x9B8173F4
 
|}
 
|}
  
<source lang="c">int sceKernelCpuAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);</source>
+
Might be get_vaddr_memory_type.
  
=== sceKernelCpuAtomicAddUnless16ForDriver ===
+
Return value can be:
 +
* 2
 +
* 8
 +
* 0x40
 +
* 0x80
 +
* 0xD0
 +
* 0x80022007 (SCE_KERNEL_ERROR_VA2PA_FAULT)
 +
 
 +
<source lang="c">int sceKernelCpuForKernel_9B8173F4(void *vaddr);</source>
 +
 
 +
=== sceKernelCoreSyncAllForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0F84AFE9
+
| 3.60 || 0xA5C9DBBA
 
|}
 
|}
  
<source lang="c">int sceKernelCpuAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);</source>
+
This is a guessed name. Temp name was sceKernelWaitCore3ForKernel.
 +
 
 +
<source lang="c">
 +
typedef struct SceCpuCoreSyncCtx {
 +
int lock;
 +
int16_t core_count;
 +
int16_t last_wait_core; // 0:core3, 1:core0, 2:core1, 3:core2
 +
} SceCpuCoreSyncCtx;
 +
 
 +
void sceKernelCoreSyncAllForKernel(SceCpuCoreSyncCtx *pCtx);
 +
</source>
  
=== sceKernelCpuAtomicAddUnless32ForDriver ===
+
=== sceKernelCoreSyncWaitForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1F157DC3
+
| 0.931-3.60 || 0x9D72DD1B
 
|}
 
|}
  
<source lang="c">int sceKernelCpuAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);</source>
+
This is a temp name.
 +
 
 +
<source lang="c">
 +
#define SCE_CPU_WAIT_CORE_0 1
 +
#define SCE_CPU_WAIT_CORE_1 2
 +
#define SCE_CPU_WAIT_CORE_2 3
 +
#define SCE_CPU_WAIT_CORE_3 0
 +
 
 +
void sceKernelCoreSyncWaitForKernel(SceCpuCoreSyncCtx *pCtx, int core);
 +
</source>
  
=== sceKernelCpuAtomicAddUnless64ForDriver ===
+
=== sceKernelInitCpuCoreSyncCtxForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x06CCFA4B
+
| 0.931-3.60 || 0x4CD4D921
 
|}
 
|}
  
<source lang="c">int sceKernelCpuAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);</source>
+
This is a temp name.
  
<hr>
+
<source lang="C">void sceKernelInitCpuCoreSyncCtxForKernel(SceCpuCoreSyncCtx *pCtx);</source>
  
=== sceKernelCpuAtomicAndAndGet8ForDriver ===
+
=== SceCpuForKernel_43CC6E20 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x32B62B1A
+
| 3.60 || 0x43CC6E20
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
+
DACR off
 +
 
 +
Does some memory copies between the args.
 +
 
 +
<source lang="c">int SceCpuForKernel_43CC6E20(void *addr, int a2, int a3, int a4);</source>
  
=== sceKernelCpuAtomicAndAndGet16ForDriver ===
+
=== sceCpuUnrestrictedBzeroIntForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB281D52A
+
| 3.60 || 0x76EB0DD4
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
+
DACR off
 +
 
 +
<source lang="c">int sceCpuUnrestrictedBzeroIntForKernel(int *addr);</source>
  
=== sceKernelCpuAtomicAndAndGet32ForDriver ===
+
=== SceCpuForKernel_337473B5 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xDF899E4B
+
| 0.931-3.60 || 0x337473B5
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
+
DACR off
 +
 
 +
If addr.unk_0 equals 0, changes addr.unk_0 to new_val, else increase addr.unk_4.
 +
 
 +
<source lang="c">int SceCpuForKernel_337473B5(CpuUnkStruct *addr, unsigned int new_val);</source>
  
=== sceKernelCpuAtomicAndAndGet64ForDriver ===
+
=== sceKernelCpuAtomicSubIfGreater64ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD18E7B54
+
| 3.60 || 0x37FBFD12
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
DACR is not disabled
  
<hr>
+
<source lang="c">int sceKernelCpuAtomicSubIfGreater64ForKernel(unsigned long long *a1, unsigned int a2);</source>
  
=== sceKernelCpuAtomicClearAndGet8ForDriver ===
+
=== sceKernelCpuAtomicLimit64ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8E538AB5
+
| 3.60 || 0x6190A018
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
+
DACR is not disabled
 +
 
 +
<source lang="c">int sceKernelCpuAtomicLimit64ForKernel(unsigned long long *result, int limit);</source>
  
=== sceKernelCpuAtomicClearAndGet16ForDriver ===
+
=== sceKernelCpuAtomicAdd32AndGet64InRangeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x6B050D7C
+
| 3.60 || 0xD8A7216C
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
+
DACR is not disabled
 +
 
 +
<source lang="C">int sceKernelCpuAtomicAdd32AndGet64InRangeForKernel(unsigned long long *val, int add_val, int limit);</source>
  
=== sceKernelCpuAtomicClearAndGet32ForDriver ===
+
=== sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x78C1F148
+
| 3.60 || 0xD37AABE5
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
+
DACR is not disabled
 +
 
 +
<source lang="c">int sceKernelCpuAtomicAdd32AndGet64InHiLoRangeForKernel(unsigned long long *val, int add_val, int limit);</source>
  
=== sceKernelCpuAtomicClearAndGet64ForDriver ===
+
=== sceKernelCpuAtomicGet32AndSet64ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2149CD4C
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x4553FBDE
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
DACR is not disabled
  
<hr>
+
<source lang="c">int sceKernelCpuAtomicGet32AndSet64ForKernel(unsigned long long *result, int src);</source>
  
=== sceKernelCpuAtomicClearMask8ForDriver ===
+
=== sceKernelCpuAtomicGet32AndSet64_2ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1B3336B0
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x7FB4E7AC
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);</source>
+
Exact same code as SceCpuForKernel_4553FBDE.
 +
 
 +
DACR is not disabled
 +
 
 +
<source lang="c">int sceKernelCpuAtomicGet32AndSet64_2ForKernel(unsigned long long *result, int src);</source>
  
=== sceKernelCpuAtomicClearMask16ForDriver ===
+
=== sceKernelCpuAtomicDecIfLowPositive32ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1BE58599
+
| 3.60 || 0x8510FA52
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);</source>
+
DACR is not disabled
 +
 
 +
<source lang="c">int sceKernelCpuAtomicDecIfLowPositive32ForKernel(unsigned int *addr);</source>
  
=== sceKernelCpuAtomicClearMask32ForDriver ===
+
=== sceKernelCpuAtomicHiLoAlgorithmForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4AE1BCC0
+
| 3.60 || 0x5F64E5ED
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);</source>
+
DACR is not disabled
 +
 
 +
Returns current value (high + low), and sets it to max_low.
 +
 
 +
<source lang="c">int sceKernelCpuAtomicHiLoAlgorithmForKernel(SceUInt32 *max_low);</source>
  
=== sceKernelCpuAtomicClearMask64ForDriver ===
+
=== sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x55760309
+
| 3.60 || 0x98E91C1C
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
DACR is not disabled
 +
 
 +
If val is negative, returns 2 and does not override val.
  
<hr>
+
<source lang="C">int sceKernelCpuAtomicAddAndGetPositive32InRangeForKernel(int *val, int add_val, int limit);</source>
  
=== sceKernelCpuAtomicCompareAndSet8ForDriver ===
+
=== SceCpuForKernel_6C7E7B57 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x3627F4E0
+
| 0.931-3.60 || 0x6C7E7B57
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);</source>
+
Set TTBR lower value (0x4A).
 +
 
 +
<source lang="c">int SceCpuForKernel_6C7E7B57(uintptr_t ttbr);</source>
  
=== sceKernelCpuAtomicCompareAndSet16ForDriver ===
+
=== SceCpuForKernel_AED8F8D7 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x6F63F56D
+
| 0.931 || 0xAED8F8D7
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);</source>
+
Initialize TTBR.
 +
 
 +
<source lang="C">int SceCpuForKernel_AED8F8D7(const void *ttbr);</source>
  
=== sceKernelCpuAtomicCompareAndSet32ForDriver ===
+
=== SceCpuForKernel_9A3281C0 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCDA96E81
+
| 0.990-3.60 || 0x9A3281C0
 +
|-
 +
| 3.65 || 0xC32687D0
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);</source>
+
Gets start and end of a special code area in which the kernel<->user memory copy routines reside.
 +
See [[SceExcpmgr]] page for more information about how this is used.
 +
 
 +
In older firmware, this function also provides the start and end of the "memory access error range" code area (see [[SceExcpmgr#SceExcpmgrForKernel_C45C0D3D|SceExcpmgrForKernel_C45C0D3D]] for what this range is for).
 +
 
 +
<source lang="c">
 +
//0.990
 +
void SceCpuForKernel_9A3281C0(SceUIntPtr *pMemErrorAreaStart, SceUIntPtr* pMemErrorAreaEnd, SceUIntPtr *pUKCopyAreaStart, SceUIntPtr* pUKCopyAreaEnd)
 +
 
 +
//3.60+
 +
void SceCpuForKernel_9A3281C0(SceUIntPtr *pUKCopyAreaStart, SceUIntPtr* pUKCopyAreaEnd);
 +
</source>
  
=== sceKernelCpuAtomicCompareAndSet64ForDriver ===
+
=== SceCpuForKernel_9CB82EB0 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4B527009
+
| 3.60 || 0x9CB82EB0
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);</source>
+
<source lang="C">
 +
return;
 +
</source>
  
<hr>
+
<source lang="c">int SceCpuForKernel_9CB82EB0(void);</source>
 +
 
 +
== SceCpuForDriver ==
  
=== sceKernelCpuAtomicDecIfPositive8ForDriver ===
+
=== sceKernelRoundupDCacheLine3ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x45153D4E
+
| 0.931-0.990 || 0xF0849812
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicDecIfPositive8ForDriver(unsigned char *addr);</source>
+
<source lang="C">int sceKernelRoundupDCacheLine3ForDriver(int a1);</source>
  
=== sceKernelCpuAtomicDecIfPositive16ForDriver ===
+
=== sceKernelAbortForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x9A693F5B
+
| 0.931-0.990 || 0x6DCA6903
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicDecIfPositive16ForDriver(unsigned short *addr);</source>
+
<source lang="C">void sceKernelAbortForDriver(void);</source>
  
=== sceKernelCpuAtomicDecIfPositive32ForDriver ===
+
=== sceKernelCpuIdForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2A71B03C
+
| 0.990-3.60 || 0x5E4D5DE1
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicDecIfPositive32ForDriver(unsigned int *addr);</source>
+
Return the CPU ID of the current core.
  
=== sceKernelCpuAtomicDecIfPositive64ForDriver ===
+
<source lang="c">int sceKernelCpuIdForDriver(void);</source>
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 3.60 || 0x267D0B33
 
|}
 
 
 
<source lang="c">unsigned long long sceKernelCpuAtomicDecIfPositive64ForDriver(unsigned long long *addr);</source>
 
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicGetAndAdd8ForDriver ===
+
=== sceKernelCpuAtomicAddAndGet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xFCDCD4DE
+
| 3.60 || 0x1E850481
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicAddAndGet8ForDriver (unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuAtomicGetAndAdd16ForDriver ===
+
=== sceKernelCpuAtomicAddAndGet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x225DF91A
+
| 3.60 || 0x59F74E94
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicAddAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicGetAndAdd32ForDriver ===
+
=== sceKernelCpuAtomicAddAndGet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x341B6E81
+
| 0.990-3.60 || 0x5F6A8743
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);</source>
+
Adds <code>val</code> to <code>*addr</code> atomically, and returns the result.
 +
 
 +
<source lang="c">unsigned int sceKernelCpuAtomicAddAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicGetAndAdd64ForDriver ===
+
=== sceKernelCpuAtomicAddAndGet64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x043FD446
+
| 3.60 || 0x4E459A03
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicAddAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicGetAndAnd8ForDriver ===
+
=== sceKernelCpuAtomicAddUnless8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD8E675C0
+
| 3.60 || 0x5CC62CEC
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);</source>
+
<source lang="c">int sceKernelCpuAtomicAddUnless8ForDriver(unsigned char *addr, unsigned char val, unsigned char cmp);</source>
  
=== sceKernelCpuAtomicGetAndAnd16ForDriver ===
+
=== sceKernelCpuAtomicAddUnless16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4A820BC5
+
| 3.60 || 0x0F84AFE9
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">int sceKernelCpuAtomicAddUnless16ForDriver(unsigned short *addr, unsigned short val, unsigned short cmp);</source>
  
=== sceKernelCpuAtomicGetAndAnd32ForDriver ===
+
=== sceKernelCpuAtomicAddUnless32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x10EB35EB
+
| 3.60 || 0x1F157DC3
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">int sceKernelCpuAtomicAddUnless32ForDriver(unsigned int *addr, unsigned int val, unsigned int cmp);</source>
  
=== sceKernelCpuAtomicGetAndAnd64ForDriver ===
+
=== sceKernelCpuAtomicAddUnless64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x18A17E07
+
| 3.60 || 0x06CCFA4B
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">int sceKernelCpuAtomicAddUnless64ForDriver(unsigned long long *addr, int unused, unsigned long long val, unsigned long long cmp);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicGetAndClear8ForDriver ===
+
=== sceKernelCpuAtomicAndAndGet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x382D1466
+
| 3.60 || 0x32B62B1A
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicAndAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuAtomicGetAndClear16ForDriver ===
+
=== sceKernelCpuAtomicAndAndGet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8E9C086D
+
| 3.60 || 0xB281D52A
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicAndAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicGetAndClear32ForDriver ===
+
=== sceKernelCpuAtomicAndAndGet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE36F3A46
+
| 3.60 || 0xDF899E4B
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicAndAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicGetAndClear64ForDriver ===
+
=== sceKernelCpuAtomicAndAndGet64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x88BA6002
+
| 3.60 || 0xD18E7B54
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicAndAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicGetAndOr8ForDriver ===
+
=== sceKernelCpuAtomicClearAndGet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBDF6F8E4
+
| 3.60 || 0x8E538AB5
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicClearAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuAtomicGetAndOr16ForDriver ===
+
=== sceKernelCpuAtomicClearAndGet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x004F09D1
+
| 3.60 || 0x6B050D7C
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicClearAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicGetAndOr32ForDriver ===
+
=== sceKernelCpuAtomicClearAndGet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2A40BB93
+
| 3.60 || 0x78C1F148
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicClearAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicGetAndOr64ForDriver ===
+
=== sceKernelCpuAtomicClearAndGet64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCB73D6D5
+
| 3.60 || 0x2149CD4C
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicClearAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicGetAndSet8ForDriver ===
+
=== sceKernelCpuAtomicClearMask8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x29599FC8
+
| 3.60 || 0x1B3336B0
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">void sceKernelCpuAtomicClearMask8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuAtomicGetAndSet16ForDriver ===
+
=== sceKernelCpuAtomicClearMask16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x085532C8
+
| 3.60 || 0x1BE58599
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">void sceKernelCpuAtomicClearMask16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicGetAndSet32ForDriver ===
+
=== sceKernelCpuAtomicClearMask32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0EE04C03
+
| 3.60 || 0x4AE1BCC0
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">void sceKernelCpuAtomicClearMask32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicGetAndSet64ForDriver ===
+
=== sceKernelCpuAtomicClearMask64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD2DEE625
+
| 3.60 || 0x55760309
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);</source>
+
<source lang="c">void sceKernelCpuAtomicClearMask64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
 +
 
 +
<hr>
  
=== sceKernelCpuAtomicGetAndSub8ForDriver ===
+
=== sceKernelCpuAtomicCompareAndSet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7B43D0D7
+
| 3.60 || 0x3627F4E0
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicCompareAndSet8ForDriver(unsigned char *addr, unsigned char cmp, unsigned char val);</source>
  
=== sceKernelCpuAtomicGetAndSub16ForDriver ===
+
=== sceKernelCpuAtomicCompareAndSet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x3EE9B5B8
+
| 3.60 || 0x6F63F56D
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicCompareAndSet16ForDriver(unsigned short *addr, unsigned short cmp, unsigned short val);</source>
  
=== sceKernelCpuAtomicGetAndSub32ForDriver ===
+
=== sceKernelCpuAtomicCompareAndSet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF891CF2A
+
| 3.60 || 0xCDA96E81
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicCompareAndSet32ForDriver(unsigned int *addr, unsigned int cmp, unsigned int val);</source>
  
=== sceKernelCpuAtomicGetAndSub64ForDriver ===
+
=== sceKernelCpuAtomicCompareAndSet64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA7585370
+
| 3.60 || 0x4B527009
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicCompareAndSet64ForDriver(unsigned long long *addr, int unused, unsigned long long cmp, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicGetAndXor8ForDriver ===
+
=== sceKernelCpuAtomicDecIfPositive8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBAF47F7B
+
| 3.60 || 0x45153D4E
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicDecIfPositive8ForDriver(unsigned char *addr);</source>
  
=== sceKernelCpuAtomicGetAndXor16ForDriver ===
+
=== sceKernelCpuAtomicDecIfPositive16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x711801E6
+
| 3.60 || 0x9A693F5B
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicDecIfPositive16ForDriver(unsigned short *addr);</source>
  
=== sceKernelCpuAtomicGetAndXor32ForDriver ===
+
=== sceKernelCpuAtomicDecIfPositive32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x77E34309
+
| 3.60 || 0x2A71B03C
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicDecIfPositive32ForDriver(unsigned int *addr);</source>
  
=== sceKernelCpuAtomicGetAndXor64ForDriver ===
+
=== sceKernelCpuAtomicDecIfPositive64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xE212ECAD
+
| 3.60 || 0x267D0B33
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicDecIfPositive64ForDriver(unsigned long long *addr);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicOrAndGet8ForDriver ===
+
=== sceKernelCpuAtomicGetAndAdd8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x5D515F1B
+
| 3.60 || 0xFCDCD4DE
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicGetAndAdd8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuAtomicOrAndGet16ForDriver ===
+
=== sceKernelCpuAtomicGetAndAdd16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xADD39B84
+
| 3.60 || 0x225DF91A
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicGetAndAdd16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicOrAndGet32ForDriver ===
+
=== sceKernelCpuAtomicGetAndAdd32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBC248C30
+
| 3.60 || 0x341B6E81
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicGetAndAdd32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicOrAndGet64ForDriver ===
+
=== sceKernelCpuAtomicGetAndAdd64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x3E218AF7
+
| 3.60 || 0x043FD446
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndAdd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicSet8ForDriver ===
+
=== sceKernelCpuAtomicGetAndAnd8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0836537E
+
| 3.60 || 0xD8E675C0
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicSet8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicGetAndAnd8ForDriver(unsigned char *a1, unsigned char a2);</source>
  
=== sceKernelCpuAtomicSet16ForDriver ===
+
=== sceKernelCpuAtomicGetAndAnd16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x532CA3E8
+
| 3.60 || 0x4A820BC5
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicSet16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicGetAndAnd16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicSet32ForDriver ===
+
=== sceKernelCpuAtomicGetAndAnd32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x3168BC57
+
| 3.60 || 0x10EB35EB
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicSet32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicGetAndAnd32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicSet64ForDriver ===
+
=== sceKernelCpuAtomicGetAndAnd64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC381CE8C
+
| 3.60 || 0x18A17E07
 
|}
 
|}
  
<source lang="c">void sceKernelCpuAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndAnd64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicSetIfGreaterGet8ForDriver ===
+
=== sceKernelCpuAtomicGetAndClear8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xC3868071
+
| 3.60 || 0x382D1466
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicGetAndClear8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuAtomicSetIfGreaterGet16ForDriver ===
+
=== sceKernelCpuAtomicGetAndClear16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x875B094D
+
| 3.60 || 0x8E9C086D
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicGetAndClear16ForDriver(unsigned short *addr, unsigned short val);</source>
 +
 
 +
=== sceKernelCpuAtomicGetAndClear32ForDriver ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60 || 0xE36F3A46
 +
|}
 +
 
 +
<source lang="c">unsigned int sceKernelCpuAtomicGetAndClear32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicSetIfGreaterGet32ForDriver ===
+
=== sceKernelCpuAtomicGetAndClear64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x26F71995
+
| 3.60 || 0x88BA6002
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndClear64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicSubAndGet8ForDriver ===
+
=== sceKernelCpuAtomicGetAndOr8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xEB085370
+
| 3.60 || 0xBDF6F8E4
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicGetAndOr8ForDriver(unsigned char *var, unsigned char value);</source>
  
=== sceKernelCpuAtomicSubAndGet16ForDriver ===
+
=== sceKernelCpuAtomicGetAndOr16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x515682C9
+
| 3.60 || 0x004F09D1
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicGetAndOr16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicSubAndGet32ForDriver ===
+
=== sceKernelCpuAtomicGetAndOr32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA4884C4E
+
| 3.60 || 0x2A40BB93
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicGetAndOr32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicSubAndGet64ForDriver ===
+
=== sceKernelCpuAtomicGetAndOr64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB5F8919C
+
| 3.60 || 0xCB73D6D5
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndOr64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuAtomicXorAndGet8ForDriver ===
+
=== sceKernelCpuAtomicGetAndSet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x03887992
+
| 3.60 || 0x29599FC8
 
|}
 
|}
  
<source lang="c">unsigned char sceKernelCpuAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicGetAndSet8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuAtomicXorAndGet16ForDriver ===
+
=== sceKernelCpuAtomicGetAndSet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x646003D6
+
| 3.60 || 0x085532C8
 
|}
 
|}
  
<source lang="c">unsigned short sceKernelCpuAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicGetAndSet16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuAtomicXorAndGet32ForDriver ===
+
=== sceKernelCpuAtomicGetAndSet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4244BE65
+
| 3.60 || 0x0EE04C03
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicGetAndSet32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuAtomicXorAndGet64ForDriver ===
+
=== sceKernelCpuAtomicGetAndSet64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x692C51B3
+
| 3.60 || 0xD2DEE625
 
|}
 
|}
  
<source lang="c">unsigned long long sceKernelCpuAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndSet64ForDriver(unsigned long long *addr, int unused, unsigned int lo_val, unsigned int hi_val);</source>
  
<hr>
+
=== sceKernelCpuAtomicGetAndSub8ForDriver ===
 
 
=== sceKernelDcacheInvalidateRange_1ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x02796361
+
| 3.60 || 0x7B43D0D7
 
|}
 
|}
  
Temp name was sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.
+
<source lang="c">unsigned char sceKernelCpuAtomicGetAndSub8ForDriver (unsigned char *addr, unsigned char val);</source>
  
<source lang="c">int sceKernelDcacheInvalidateRange_1ForDriver(const void *start, SceSize size);</source>
+
=== sceKernelCpuAtomicGetAndSub16ForDriver ===
 
 
=== sceKernelDcacheInvalidateRange_0x10ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x614C6698
+
| 3.60 || 0x3EE9B5B8
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Temp name was sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.
+
<source lang="c">unsigned short sceKernelCpuAtomicGetAndSub16ForDriver(unsigned short *addr, unsigned short val);</source>
  
<source lang="c">int sceKernelDcacheInvalidateRange_0x10ForDriver(const void *start, SceSize size);</source>
+
=== sceKernelCpuAtomicGetAndSub32ForDriver ===
 
 
=== sceKernelDcacheInvalidateRange_0x20ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x8B4C26DF
+
| 3.60 || 0xF891CF2A
 
|}
 
|}
  
Temp name was sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.
+
<source lang="c">unsigned int sceKernelCpuAtomicGetAndSub32ForDriver(unsigned int *addr, unsigned int val);</source>
  
<source lang="c">int sceKernelDcacheInvalidateRange_0x20ForDriver(const void *start, SceSize size);</source>
+
=== sceKernelCpuAtomicGetAndSub64ForDriver ===
 
 
=== sceKernelDcacheCleanInvalidateRange_1ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x364E68A4
+
| 3.60 || 0xA7585370
 
|}
 
|}
  
Temp name was sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver.
+
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndSub64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
<source lang="c">int sceKernelDcacheCleanInvalidateRange_1ForDriver(const void *start, SceSize size);</source>
+
<hr>
  
=== sceKernelDcacheCleanInvalidateRange_0x10ForDriver ===
+
=== sceKernelCpuAtomicGetAndXor8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x364E68A4
+
| 3.60 || 0xBAF47F7B
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">unsigned char sceKernelCpuAtomicGetAndXor8ForDriver(unsigned char *addr, unsigned char val);</source>
int sceKernelDcacheCleanInvalidateRange_0x10ForDriver(const void *start, SceSize size);
 
</source>
 
  
=== sceKernelDcacheCleanInvalidateRange_0x20ForDriver ===
+
=== sceKernelCpuAtomicGetAndXor16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xE551F99B
+
| 3.60 || 0x711801E6
 
|}
 
|}
  
Temp name was sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.
+
<source lang="c">unsigned short sceKernelCpuAtomicGetAndXor16ForDriver(unsigned short *addr, unsigned short val);</source>
  
<source lang="c">int sceKernelDcacheCleanInvalidateRange_0x20ForDriver(const void *start, SceSize);</source>
+
=== sceKernelCpuAtomicGetAndXor32ForDriver ===
 
 
=== sceKernelDcacheCleanRange_1ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x103872A5
+
| 3.60 || 0x77E34309
 
|}
 
|}
  
Temp name was sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.
+
<source lang="c">unsigned int sceKernelCpuAtomicGetAndXor32ForDriver(unsigned int *addr, unsigned int val);</source>
  
<source lang="c">int sceKernelDcacheCleanRange_1ForDriver(const void *start, SceSize size);</source>
+
=== sceKernelCpuAtomicGetAndXor64ForDriver ===
 
 
=== sceKernelDcacheCleanRange_0x10ForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x2A5344B7
+
| 3.60 || 0xE212ECAD
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="c">int sceKernelDcacheCleanRange_0x10ForDriver(const void *start, SceSize size);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicGetAndXor64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
 +
 
 +
<hr>
  
=== sceKernelDcacheCleanRange_0x20ForDriver ===
+
=== sceKernelCpuAtomicOrAndGet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.68 || 0x9CB9F0CE
+
| 3.60 || 0x5D515F1B
 
|}
 
|}
  
Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.
+
<source lang="c">unsigned char sceKernelCpuAtomicOrAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
  
<source lang="c">int sceKernelDcacheCleanRange_0x20ForDriver(const void *start, SceSize size);</source>
+
=== sceKernelCpuAtomicOrAndGet16ForDriver ===
 
 
=== SceCpuForDriver_E813EBB2 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xE813EBB2
+
| 3.60 || 0xADD39B84
 
|}
 
|}
  
Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.
+
<source lang="c">unsigned short sceKernelCpuAtomicOrAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>
  
<source lang="C">
+
=== sceKernelCpuAtomicOrAndGet32ForDriver ===
#define SceL2CacheReg 0x1A002000
+
{| class="wikitable"
__dsb();
+
|-
*(int *)(SceL2CacheReg + 0x730) = 0;
+
! Version !! NID
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )
+
|-
    ;
+
| 3.60 || 0xBC248C30
__dmb();
+
|}
</source>
 
  
<source lang="c">int SceCpuForDriver_E813EBB2(void);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicOrAndGet32ForDriver (unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuIsVaddrMappedForDriver ===
+
=== sceKernelCpuAtomicOrAndGet64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x337CBDF3
+
| 3.60 || 0x3E218AF7
 
|}
 
|}
  
<source lang="C">
+
<source lang="c">unsigned long long sceKernelCpuAtomicOrAndGet64ForDriver(unsigned long long *addr, int unused, long long val);</source>
  uint32_t vaddr_memory_type = SceCpuForKernel_9B8173F4(vaddr);
 
  if (vaddr_memory_type != 8) {
 
    if (vaddr_memory_type <= 8) {
 
      if (vaddr_memory_type != 2)
 
        return 0;
 
    } else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)
 
      return 0;
 
  }
 
  return 1;
 
</source>
 
 
 
<source lang="c">int sceKernelCpuIsVaddrMappedForDriver(void *vaddr);</source>
 
  
 
<hr>
 
<hr>
  
These functions implement a simple mutual exclusive access on a resource address using LDREX/STREX.
+
=== sceKernelCpuAtomicSet8ForDriver ===
 
 
=== sceKernelCpuLockStoreLRForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.60-3.60 || 0xBF82DEB2
+
| 3.60 || 0x0836537E
 
|}
 
|}
  
<source lang="c">void sceKernelCpuLockStoreLRForDriver(unsigned int *addr);</source>
+
<source lang="c">void sceKernelCpuAtomicSet8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuTryLockStoreLRForDriver ===
+
=== sceKernelCpuAtomicSet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x5AC9D394
+
| 3.60 || 0x532CA3E8
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuTryLockStoreLRForDriver(unsigned int *addr);</source>
+
<source lang="c">void sceKernelCpuAtomicSet16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuUnlockStoreLRForDriver ===
+
=== sceKernelCpuAtomicSet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.60-3.60 || 0xD6ED0C46
+
| 3.60 || 0x3168BC57
 +
|}
 +
 
 +
<source lang="c">void sceKernelCpuAtomicSet32ForDriver(unsigned int *addr, unsigned int val);</source>
 +
 
 +
=== sceKernelCpuAtomicSet64ForDriver ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60 || 0xC381CE8C
 
|}
 
|}
  
<source lang="c">void sceKernelCpuUnlockStoreLRForDriver(unsigned int *addr);</source>
+
<source lang="c">void sceKernelCpuAtomicSet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
  
 
<hr>
 
<hr>
  
=== sceKernelCpuLockStoreFlagForDriver ===
+
=== sceKernelCpuAtomicSetIfGreaterGet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x3F42B434
+
| 3.60 || 0xC3868071
 
|}
 
|}
  
<source lang="c">void sceKernelCpuLockStoreFlagForDriver(unsigned int *result);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicSetIfGreaterGet8ForDriver(unsigned char *addr, unsigned char val);</source>
  
=== sceKernelCpuTryLockStoreFlagForDriver ===
+
=== sceKernelCpuAtomicSetIfGreaterGet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4F7790B4
+
| 3.60 || 0x875B094D
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuTryLockStoreFlagForDriver(unsigned int *addr);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicSetIfGreaterGet16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuUnlockStoreFlagForDriver ===
+
=== sceKernelCpuAtomicSetIfGreaterGet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCB8ABDF0
+
| 3.60 || 0x26F71995
 
|}
 
|}
  
<source lang="c">void sceKernelCpuUnlockStoreFlagForDriver(unsigned int *addr);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicSetIfGreaterGet32ForDriver(unsigned int *a1, unsigned int val);</source>
  
 
<hr>
 
<hr>
  
These functions implement a simple mutual exclusive access on a resource addr using LDREX/STREX.
+
=== sceKernelCpuAtomicSubAndGet8ForDriver ===
 
 
LR is stored as addr value.
 
 
 
While mutex is held, interrupts are disabled.
 
 
 
Used like this:
 
 
 
<source lang="c">
 
int prev_state = sceKernelCpuLockSuspendIntrStoreLRForDriver(mutex);
 
// do work
 
sceKernelCpuUnlockResumeIntrStoreLRForDriver(mutex, prev_state);
 
</source>
 
 
 
=== sceKernelCpuLockSuspendIntrStoreLRForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xD32ACE9E
+
| 3.60 || 0xEB085370
 
|}
 
|}
  
Temp name was sceKernelCpuSuspendIntrForDriver.
+
<source lang="c">unsigned char sceKernelCpuAtomicSubAndGet8ForDriver(unsigned char *addr, unsigned char val);</source>
  
<source lang="c">SceUInt32 sceKernelCpuLockSuspendIntrStoreLRForDriver(SceUInt32 *addr);</source>
+
=== sceKernelCpuAtomicSubAndGet16ForDriver ===
 
 
=== sceKernelCpuTryLockSuspendIntrStoreLRForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x27C0B340
+
| 3.60 || 0x515682C9
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuTryLockSuspendIntrStoreLRForDriver(int *addr);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicSubAndGet16ForDriver(unsigned short *addr, unsigned short val);</source>
  
=== sceKernelCpuUnlockResumeIntrStoreLRForDriver ===
+
=== sceKernelCpuAtomicSubAndGet32ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x7BB9D5DF
+
| 3.60 || 0xA4884C4E
 
|}
 
|}
  
Temp name was sceKernelCpuResumeIntrForDriver.
+
<source lang="c">unsigned int sceKernelCpuAtomicSubAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
  
<source lang="c">void sceKernelCpuUnlockResumeIntrStoreLRForDriver(SceUInt32 *addr, int prev_state);</source>
+
=== sceKernelCpuAtomicSubAndGet64ForDriver ===
 
 
<hr>
 
 
 
These functions implement a simple mutual exclusive access on a resource addr using LDREX/STREX.
 
 
 
0x80000000 is stored as addr value.
 
 
 
While mutex is held, interrupts are disabled.
 
 
 
Used like this:
 
 
 
<source lang="c">
 
int prev_state = sceKernelCpuLockSuspendIntrStoreFlagForDriver(mutex);
 
// do work
 
sceKernelCpuUnlockResumeIntrStoreFlagForDriver(mutex, prev_state);
 
</source>
 
 
 
=== sceKernelCpuLockSuspendIntrStoreFlagForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x4C38CE4D
+
| 3.60 || 0xB5F8919C
 
|}
 
|}
  
<source lang="c">int sceKernelCpuLockSuspendIntrStoreFlagForDriver(void *addr);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicSubAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
 +
 
 +
<hr>
  
=== sceKernelCpuTryLockSuspendIntrStoreFlagForDriver ===
+
=== sceKernelCpuAtomicXorAndGet8ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xDE6482C6
+
| 3.60 || 0x03887992
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuTryLockSuspendIntrStoreFlagForDriver(unsigned int *addr);</source>
+
<source lang="c">unsigned char sceKernelCpuAtomicXorAndGet8ForDriver (unsigned char *a1, unsigned char a2);</source>
  
=== sceKernelCpuUnlockResumeIntrStoreFlagForDriver ===
+
=== sceKernelCpuAtomicXorAndGet16ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x9EC91017
+
| 3.60 || 0x646003D6
 
|}
 
|}
  
<source lang="c">void sceKernelCpuUnlockResumeIntrStoreFlagForDriver(void *addr, unsigned int prev_state);</source>
+
<source lang="c">unsigned short sceKernelCpuAtomicXorAndGet16ForDriver (unsigned short *addr, unsigned short val);</source>
  
<hr>
+
=== sceKernelCpuAtomicXorAndGet32ForDriver ===
 
 
=== sceKernelCpuSpinLockStoreLRForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCAC9AE80
+
| 3.60 || 0x4244BE65
 
|}
 
|}
  
<source lang="c">void sceKernelCpuSpinLockStoreLRForDriver(unsigned int *result);</source>
+
<source lang="c">unsigned int sceKernelCpuAtomicXorAndGet32ForDriver(unsigned int *addr, unsigned int val);</source>
  
=== sceKernelCpuTrySpinLockStoreLRForDriver ===
+
=== sceKernelCpuAtomicXorAndGet64ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x093925BD
+
| 3.60 || 0x692C51B3
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuTrySpinLockStoreLRForDriver(unsigned int *addr);</source>
+
<source lang="c">unsigned long long sceKernelCpuAtomicXorAndGet64ForDriver(unsigned long long *addr, int unused, unsigned long long val);</source>
 +
 
 +
<hr>
  
=== sceKernelCpuSpinUnlockStoreLRForDriver ===
+
=== sceKernelDcacheInvalidateRange_1ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF5FD5676
+
| 0.931-3.60 || 0x02796361
 
|}
 
|}
  
<source lang="c">void sceKernelCpuSpinUnlockStoreLRForDriver(unsigned int *result);</source>
+
Temp name was sceKernelCpuDcacheAndL2InvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2InvalidateRangeForDriver.
  
<hr>
+
<source lang="c">int sceKernelDcacheInvalidateRange_1ForDriver(const void *start, SceSize size);</source>
  
=== sceKernelCpuSpinLockSuspendIntrStoreLRForDriver ===
+
=== sceKernelDcacheInvalidateRange_0x10ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xEC53D007
+
| 0.990 || 0x614C6698
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuSpinLockSuspendIntrStoreLRForDriver(unsigned int *addr);</source>
+
Temp name was sceKernelCpuDcacheAndL2InvalidateMVACRange_10ForDriver.
 +
 
 +
<source lang="c">int sceKernelDcacheInvalidateRange_0x10ForDriver(const void *start, SceSize size);</source>
  
=== sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver ===
+
=== sceKernelDcacheInvalidateRange_0x20ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF02467D1
+
| 0.990-3.60 || 0x8B4C26DF
 
|}
 
|}
  
<source lang="c">unsigned int sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver(unsigned int *addr);</source>
+
Temp name was sceKernelCpuDcacheInvalidateRangeForDriver, sceKernelCpuDcacheAndL2InvalidateMVACRange_20ForDriver.
 +
 
 +
<source lang="c">int sceKernelDcacheInvalidateRange_0x20ForDriver(const void *start, SceSize size);</source>
  
=== sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver ===
+
=== sceKernelDcacheCleanInvalidateRange_1ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x740A0750
+
| 0.931-3.60 || 0x364E68A4
 
|}
 
|}
  
<source lang="c">void sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver(unsigned int *addr, unsigned int prev_state);</source>
+
Temp name was sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_1ForDriver, sceKernelCpuDcacheAndL2WritebackInvalidateRangeForDriver.
  
<hr>
+
<source lang="c">int sceKernelDcacheCleanInvalidateRange_1ForDriver(const void *start, SceSize size);</source>
  
=== sceKernelCpuDisableInterruptsForDriver ===
+
=== sceKernelDcacheCleanInvalidateRange_0x10ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.60-3.60 || 0x821FC0EE
+
| 0.990 || 0x364E68A4
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Disable irq (but not fiq) and returns previous interrupt bit status (so either 0 or 0x80).
+
<source lang="c">
 +
int sceKernelDcacheCleanInvalidateRange_0x10ForDriver(const void *start, SceSize size);
 +
</source>
  
<source lang="c">unsigned int sceKernelCpuDisableInterruptsForDriver(void);</source>
+
=== sceKernelDcacheCleanInvalidateRange_0x20ForDriver ===
 
 
=== sceKernelCpuEnableInterruptsForDriver ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.60-3.60 || 0xF5BAD43B
+
| 0.990-3.60 || 0xE551F99B
 
|}
 
|}
  
Restore previous irq state, pass either 0 or 0x80.
+
Temp name was sceKernelCpuDcacheAndL2CleanInvalidateMVACRange_20ForDriver.
 +
 
 +
<source lang="c">int sceKernelDcacheCleanInvalidateRange_0x20ForDriver(const void *start, SceSize);</source>
  
<source lang="c">unsigned int sceKernelCpuEnableInterruptsForDriver(unsigned int prev_state);</source>
+
=== sceKernelDcacheCleanRange_1ForDriver ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.931-3.60 || 0x103872A5
 +
|}
  
== SceSysclibForKernel ==
+
Temp name was sceKernelCpuDcacheAndL2WritebackRangeForDriver, sceKernelCpuDcacheAndL2CleanMVACRange_1ForDriver.
  
Was present on 1.69. Doesn't exist on 3.60.
+
<source lang="c">int sceKernelDcacheCleanRange_1ForDriver(const void *start, SceSize size);</source>
  
=== __vsnprintf_internal ===
+
=== sceKernelDcacheCleanRange_0x10ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.50 || 0xE38E7605
+
| 0.990 || 0x2A5344B7
 
|-
 
|-
| 3.60 || moved to ForDriver
+
| 3.60 || not present
 
|}
 
|}
  
=== SceSysclibForKernel_F7E34376 ===
+
<source lang="c">int sceKernelDcacheCleanRange_0x10ForDriver(const void *start, SceSize size);</source>
 +
 
 +
=== sceKernelDcacheCleanRange_0x20ForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.50 || 0xF7E34376
+
| 0.990-3.68 || 0x9CB9F0CE
 
|}
 
|}
  
=== SceSysclibForKernel_FA746181 ===
+
Temp name was sceKernelCpuDcacheWritebackRangeForDriver, flush_dcache, sceKernelCpuDcacheAndL2CleanMVACRange_20ForDriver.
 +
 
 +
<source lang="c">int sceKernelDcacheCleanRange_0x20ForDriver(const void *start, SceSize size);</source>
 +
 
 +
=== SceCpuForDriver_E813EBB2 ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-1.50 || 0xFA746181
+
| 1.69-3.60 || 0xE813EBB2
 
|}
 
|}
  
return a1 * (- 0x6e19295b) - 0x6e19295b;
+
Cleans L2 memory? A name could be sceKernelWaitL2CacheReg.
  
In SceSysmem it is used internally to modify a global variable, like a multiplication hash function would do.
+
<source lang="C">
 +
#define SceL2CacheReg 0x1A002000
 +
__dsb();
 +
*(int *)(SceL2CacheReg + 0x730) = 0;
 +
while ( *(int *)(SceL2CacheReg + 0x730) & 1 )
 +
    ;
 +
__dmb();
 +
</source>
  
<source lang="C">int SceSysclibForKernel_FA746181(int a1);</source>
+
<source lang="c">int SceCpuForDriver_E813EBB2(void);</source>
  
== SceSysclibForDriver ==
+
=== sceKernelCpuIsVaddrMappedForDriver ===
 
 
The C standard library for use in kernel only. Usermode has access to [[SceLibKernel]], which confusingly is usermode only.
 
 
 
Includes standard string functions (no insecure variants like <code>strcpy</code>).
 
 
 
=== __aeabi_idiv ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2518CD9E
+
| 3.60 || 0x337CBDF3
 
|}
 
|}
  
=== __aeabi_lcmp ===
+
<source lang="C">
 +
  uint32_t vaddr_memory_type = SceCpuForKernel_9B8173F4(vaddr);
 +
  if (vaddr_memory_type != 8) {
 +
    if (vaddr_memory_type <= 8) {
 +
      if (vaddr_memory_type != 2)
 +
        return 0;
 +
    } else if (vaddr_memory_type != 0x40 && vaddr_memory_type != 0x80)
 +
      return 0;
 +
  }
 +
  return 1;
 +
</source>
 +
 
 +
<source lang="c">int sceKernelCpuIsVaddrMappedForDriver(void *vaddr);</source>
 +
 
 +
<hr>
 +
 
 +
These functions implement a simple mutual exclusive access on a resource address using LDREX/STREX.
 +
 
 +
=== sceKernelCpuLockStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x709077A1
+
| 1.60-3.60 || 0xBF82DEB2
 
|}
 
|}
  
=== __aeabi_lmul ===
+
<source lang="c">void sceKernelCpuLockStoreLRForDriver(unsigned int *addr);</source>
 +
 
 +
=== sceKernelCpuTryLockStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xFEE5E751
+
| 3.60 || 0x5AC9D394
 
|}
 
|}
  
=== __aeabi_uidiv ===
+
<source lang="c">unsigned int sceKernelCpuTryLockStoreLRForDriver(unsigned int *addr);</source>
 +
 
 +
=== sceKernelCpuUnlockStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA9FF1205
+
| 1.60-3.60 || 0xD6ED0C46
 
|}
 
|}
  
=== __aeabi_uidivmod ===
+
<source lang="c">void sceKernelCpuUnlockStoreLRForDriver(unsigned int *addr);</source>
{| class="wikitable"
+
 
! Version !! NID
+
<hr>
|-
 
| 0.990-3.60 || 0xA46CB7DE
 
|}
 
  
=== __aeabi_ldivmod ===
+
=== sceKernelCpuLockStoreFlagForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7554AB04
+
| 3.60 || 0x3F42B434
 
|}
 
|}
  
=== __aeabi_ulcmp ===
+
<source lang="c">void sceKernelCpuLockStoreFlagForDriver(unsigned int *result);</source>
 +
 
 +
=== sceKernelCpuTryLockStoreFlagForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xFE900DE8
+
| 3.60 || 0x4F7790B4
 
|}
 
|}
  
=== __memcpy_chk ===
+
<source lang="c">unsigned int sceKernelCpuTryLockStoreFlagForDriver(unsigned int *addr);</source>
 +
 
 +
=== sceKernelCpuUnlockStoreFlagForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x8A0B0815
+
| 3.60 || 0xCB8ABDF0
 
|}
 
|}
  
=== __memmove_chk ===
+
<source lang="c">void sceKernelCpuUnlockStoreFlagForDriver(unsigned int *addr);</source>
 +
 
 +
<hr>
 +
 
 +
These functions implement a simple mutual exclusive access on a resource addr using LDREX/STREX.
 +
 
 +
LR is stored as addr value.
 +
 
 +
While mutex is held, interrupts are disabled.
 +
 
 +
Used like this:
 +
 
 +
<source lang="c">
 +
int prev_state = sceKernelCpuLockSuspendIntrStoreLRForDriver(mutex);
 +
// do work
 +
sceKernelCpuUnlockResumeIntrStoreLRForDriver(mutex, prev_state);
 +
</source>
 +
 
 +
=== sceKernelCpuLockSuspendIntrStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x35DBB110
+
| 0.990-3.60 || 0xD32ACE9E
 
|}
 
|}
  
=== __memset_chk ===
+
Temp name was sceKernelCpuSuspendIntrForDriver.
 +
 
 +
<source lang="c">SceUInt32 sceKernelCpuLockSuspendIntrStoreLRForDriver(SceUInt32 *addr);</source>
 +
 
 +
=== sceKernelCpuTryLockSuspendIntrStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1A30BB28
+
| 3.60 || 0x27C0B340
 
|}
 
|}
  
=== __stack_chk_fail ===
+
<source lang="c">unsigned int sceKernelCpuTryLockSuspendIntrStoreLRForDriver(int *addr);</source>
 +
 
 +
=== sceKernelCpuUnlockResumeIntrStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
! Version !! NID
 
 
|-
 
|-
| 1.50-3.60 || 0xB997493D
 
|}
 
 
=== __stack_chk_guard ===
 
{| class="wikitable"
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x99EEBD1F
+
| 0.990-3.60 || 0x7BB9D5DF
 
|}
 
|}
  
This is a variable.
+
Temp name was sceKernelCpuResumeIntrForDriver.
 +
 
 +
<source lang="c">void sceKernelCpuUnlockResumeIntrStoreLRForDriver(SceUInt32 *addr, int prev_state);</source>
 +
 
 +
<hr>
 +
 
 +
These functions implement a simple mutual exclusive access on a resource addr using LDREX/STREX.
 +
 
 +
0x80000000 is stored as addr value.
 +
 
 +
While mutex is held, interrupts are disabled.
 +
 
 +
Used like this:
 +
 
 +
<source lang="c">
 +
int prev_state = sceKernelCpuLockSuspendIntrStoreFlagForDriver(mutex);
 +
// do work
 +
sceKernelCpuUnlockResumeIntrStoreFlagForDriver(mutex, prev_state);
 +
</source>
  
=== __strlcat_chk ===
+
=== sceKernelCpuLockSuspendIntrStoreFlagForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x224BE33F
+
| 0.990-3.60 || 0x4C38CE4D
 
|}
 
|}
  
=== __strlcpy_chk ===
+
<source lang="c">int sceKernelCpuLockSuspendIntrStoreFlagForDriver(void *addr);</source>
 +
 
 +
=== sceKernelCpuTryLockSuspendIntrStoreFlagForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCF86EA38
+
| 3.60 || 0xDE6482C6
 
|}
 
|}
  
=== __strncat_chk ===
+
<source lang="c">unsigned int sceKernelCpuTryLockSuspendIntrStoreFlagForDriver(unsigned int *addr);</source>
 +
 
 +
=== sceKernelCpuUnlockResumeIntrStoreFlagForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x33EE298B
+
| 0.990-3.60 || 0x9EC91017
 
|}
 
|}
  
=== __strncpy_chk ===
+
<source lang="c">void sceKernelCpuUnlockResumeIntrStoreFlagForDriver(void *addr, unsigned int prev_state);</source>
 +
 
 +
<hr>
 +
 
 +
=== sceKernelCpuSpinLockStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x96268C53
+
| 3.60 || 0xCAC9AE80
 
|}
 
|}
  
=== __snprintf_chk ===
+
<source lang="c">void sceKernelCpuSpinLockStoreLRForDriver(unsigned int *result);</source>
 +
 
 +
=== sceKernelCpuTrySpinLockStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7DBE7007
+
| 3.60 || 0x093925BD
 
|}
 
|}
  
=== __vsnprintf_chk ===
+
<source lang="c">unsigned int sceKernelCpuTrySpinLockStoreLRForDriver(unsigned int *addr);</source>
 +
 
 +
=== sceKernelCpuSpinUnlockStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || not present
+
| 3.60 || 0xF5FD5676
|-
 
| 3.60 || 0xCBF64DF6
 
 
|}
 
|}
  
=== __vsnprintf_internal ===
+
<source lang="c">void sceKernelCpuSpinUnlockStoreLRForDriver(unsigned int *result);</source>
 +
 
 +
<hr>
 +
 
 +
=== sceKernelCpuSpinLockSuspendIntrStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || in ForKernel
+
| 3.60 || 0xEC53D007
 +
|}
 +
 
 +
<source lang="c">unsigned int sceKernelCpuSpinLockSuspendIntrStoreLRForDriver(unsigned int *addr);</source>
 +
 
 +
=== sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver ===
 +
{| class="wikitable"
 
|-
 
|-
| 3.60 || 0xE38E7605
+
! Version !! NID
 +
|-
 +
| 3.60 || 0xF02467D1
 
|}
 
|}
  
<source lang="C">void __vsnprintf_internal(void (* cb)(void *argp, int ch), void *argp, const char *fmt, va_list list);</source>
+
<source lang="c">unsigned int sceKernelCpuTrySpinLockSuspendIntrStoreLRForDriver(unsigned int *addr);</source>
 
 
Supported format
 
  
 +
=== sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Format !! Description
+
! Version !! NID
 
|-
 
|-
| \x20 || maybe space fill
+
| 3.60 || 0x740A0750
 +
|}
 +
 
 +
<source lang="c">void sceKernelCpuSpinUnlockResumeIntrStoreLRForDriver(unsigned int *addr, unsigned int prev_state);</source>
 +
 
 +
<hr>
 +
 
 +
=== sceKernelCpuDisableInterruptsForDriver ===
 +
{| class="wikitable"
 
|-
 
|-
| # || unknown
+
! Version !! NID
 
|-
 
|-
| * || unknown
+
| 1.60-3.60 || 0x821FC0EE
 +
|}
 +
 
 +
Disable irq (but not fiq) and returns previous interrupt bit status (so either 0 or 0x80).
 +
 
 +
<source lang="c">unsigned int sceKernelCpuDisableInterruptsForDriver(void);</source>
 +
 
 +
=== sceKernelCpuEnableInterruptsForDriver ===
 +
{| class="wikitable"
 
|-
 
|-
| - || Left align
+
! Version !! NID
 
|-
 
|-
| + || unknown
+
| 1.60-3.60 || 0xF5BAD43B
 +
|}
 +
 
 +
Restore previous irq state, pass either 0 or 0x80.
 +
 
 +
<source lang="c">unsigned int sceKernelCpuEnableInterruptsForDriver(unsigned int prev_state);</source>
 +
 
 +
== SceSysclibForKernel ==
 +
 
 +
Was present on 1.69. Doesn't exist on 3.60.
 +
 
 +
=== __vsnprintf_internal ===
 +
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
| . || unknown
+
| 0.931-1.50 || 0xE38E7605
 
|-
 
|-
| 0 || Padding number and Enter zero padding
+
| 3.60 || moved to ForDriver
|-
+
|}
| 1~9 || Padding number
+
 
 +
=== SceSysclibForKernel_F7E34376 ===
 +
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
| D || unknown (maybe with long?)
+
| 1.50 || 0xF7E34376
|-
 
| L || unknown (maybe with long?)
 
|-
 
| O || unknown (maybe with long?)
 
|-
 
| U || unknown (maybe with long?)
 
|-
 
| X || print hex number as uppercase
 
|-
 
| c || print char
 
|-
 
| d || print decimal number
 
|-
 
| h || unknown
 
|-
 
| l || long
 
|-
 
| o || unknown
 
|-
 
| p || print pointer as lowercase
 
|-
 
| s || print strings
 
|-
 
| u || unsigned number
 
|-
 
| x || print hex number as lowercase
 
 
|}
 
|}
  
=== sortof_vsnprintf ===
+
=== SceSysclibForKernel_FA746181 ===
 
{| class="wikitable"
 
{| class="wikitable"
|-
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x589BAF6B
+
| 0.990-1.50 || 0xFA746181
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
This is a temporary name.
+
return a1 * (- 0x6e19295b) - 0x6e19295b;
 +
 
 +
In SceSysmem it is used internally to modify a global variable, like a multiplication hash function would do.
 +
 
 +
<source lang="C">int SceSysclibForKernel_FA746181(int a1);</source>
 +
 
 +
== SceSysclibForDriver ==
 +
 
 +
The C standard library for use in kernel only. Usermode has access to [[SceLibKernel]], which confusingly is usermode only.
 +
 
 +
Includes standard string functions (no insecure variants like <code>strcpy</code>).
  
=== sortof_vsnprintf_2 ===
+
=== __aeabi_idiv ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x658EA38E
+
| 3.60 || 0x2518CD9E
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
This is a temporary name.
+
=== __aeabi_lcmp ===
 
 
=== vsnprintf ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x3DDBE2E1
+
| 3.60 || 0x709077A1
 
|}
 
|}
  
<source>int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);</source>
+
=== __aeabi_lmul ===
 
 
=== get_ctype_table ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x0614B013
+
| 3.60 || 0xFEE5E751
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== look_ctype_table ===
+
=== __aeabi_uidiv ===
 
{| class="wikitable"
 
{| class="wikitable"
|-
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xCDF7F155
+
| 0.990-3.60 || 0xA9FF1205
 
|}
 
|}
  
=== memchr ===
+
=== __aeabi_uidivmod ===
 
{| class="wikitable"
 
{| class="wikitable"
|-
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x60DAEA30
+
| 0.990-3.60 || 0xA46CB7DE
 
|}
 
|}
  
=== timingsafe_memcmp ===
+
=== __aeabi_ldivmod ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB5A4D745
+
| 3.60 || 0x7554AB04
 
|}
 
|}
  
timing constant memcmp
+
=== __aeabi_ulcmp ===
 
 
=== memcmp ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF939E83D
+
| 0.931-3.60 || 0xFE900DE8
 
|}
 
|}
  
=== memcpy ===
+
=== __memcpy_chk ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x40C88316
+
| 3.60 || 0x8A0B0815
 
|}
 
|}
  
=== memmove ===
+
=== __memmove_chk ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.50-3.60 || 0x6CC9C1A1
+
| 3.60 || 0x35DBB110
 
|}
 
|}
  
On 1.69, this seems to be implemented incorrectly.
+
=== __memset_chk ===
 
 
=== memset ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x0AB9BF5C
+
| 3.60 || 0x1A30BB28
 
|}
 
|}
  
=== memset2 ===
+
=== __stack_chk_fail ===
 
{| class="wikitable"
 
{| class="wikitable"
|-
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.69 || 0x502B000D
+
| 1.50-3.60 || 0xB997493D
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
=== lshift_1 ===
+
=== __stack_chk_guard ===
 
{| class="wikitable"
 
{| class="wikitable"
|-
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xE46C47E6
+
| 3.60 || 0x99EEBD1F
 
|}
 
|}
  
This is a temporary name.
+
This is a variable.
  
Returns the computation of a lot of shifts using the three arguments.
+
=== __strlcat_chk ===
 
 
=== lshift_2 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x72D31F9D
+
| 3.60 || 0x224BE33F
 
|}
 
|}
  
This is a temporary name.
+
=== __strlcpy_chk ===
 
 
Returns the computation of a lot of shifts using the three arguments.
 
 
 
=== rshift ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x1D89F6C0
+
| 3.60 || 0xCF86EA38
 
|}
 
|}
  
=== snprintf ===
+
=== __strncat_chk ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0xAE7A8981
+
| 3.60 || 0x33EE298B
 
|}
 
|}
  
=== strchr ===
+
=== __strncpy_chk ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.50-3.60 || 0x38463759
+
| 3.60 || 0x96268C53
 
|}
 
|}
  
=== strcmp ===
+
=== __snprintf_chk ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x0B33BC43
+
| 3.60 || 0x7DBE7007
 
|}
 
|}
  
=== strlcat ===
+
=== __vsnprintf_chk ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x12504E09
+
| 0.931-0.990 || not present
 +
|-
 +
| 3.60 || 0xCBF64DF6
 
|}
 
|}
  
=== strlcpy ===
+
=== __vsnprintf_internal ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7FB4EBEC
+
| 0.931 || in ForKernel
 +
|-
 +
| 3.60 || 0xE38E7605
 
|}
 
|}
  
=== strlen ===
+
<source lang="C">void __vsnprintf_internal(void (* cb)(void *argp, int ch), void *argp, const char *fmt, va_list list);</source>
 +
 
 +
Supported format
 +
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Version !! NID
+
! Format !! Description
 
|-
 
|-
| 0.931-3.60 || 0xCFC6A9AC
+
| \x20 || maybe space fill
|}
 
 
 
=== strncat ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| # || unknown
 
|-
 
|-
| 1.69-3.60 || 0xA1D1C32C
+
| * || unknown
|}
 
 
 
=== strncmp ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| - || Left align
 
|-
 
|-
| 1.60-3.60 || 0x12CEE649
+
| + || unknown
|}
 
 
 
=== strncpy ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| . || unknown
 
|-
 
|-
| 0.931-3.60 || 0x6D286146
+
| 0 || Padding number and Enter zero padding
|}
 
 
 
=== strncpy_s ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| 1~9 || Padding number
 
|-
 
|-
| 0.931 || not present
+
| D || unknown (maybe with long?)
 
|-
 
|-
| 0.990-3.60 || 0xFE39AEAC
+
| L || unknown (maybe with long?)
|}
 
 
 
=== strnlen ===
 
{| class="wikitable"
 
 
|-
 
|-
! Version !! NID
+
| O || unknown (maybe with long?)
 +
|-
 +
| U || unknown (maybe with long?)
 +
|-
 +
| X || print hex number as uppercase
 +
|-
 +
| c || print char
 +
|-
 +
| d || print decimal number
 +
|-
 +
| h || unknown
 +
|-
 +
| l || long
 +
|-
 +
| o || unknown
 +
|-
 +
| p || print pointer as lowercase
 +
|-
 +
| s || print strings
 +
|-
 +
| u || unsigned number
 
|-
 
|-
| 1.69-3.60 || 0xCD4BD884
+
| x || print hex number as lowercase
 
|}
 
|}
  
=== strrchr ===
+
=== sortof_vsnprintf ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x7F0E0835
+
| 0.931-0.990 || 0x589BAF6B
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== strstr ===
+
This is a temporary name.
 +
 
 +
=== sortof_vsnprintf_2 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.69-3.60 || 0x1304A69D
+
| 0.931-0.990 || 0x658EA38E
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
=== strtol ===
+
This is a temporary name.
 +
 
 +
=== vsnprintf ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xAB77C5AA
+
| 0.931-3.60 || 0x3DDBE2E1
 
|}
 
|}
  
=== SceSysclibForDriver_32373DF7 ===
+
<source>int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);</source>
 +
 
 +
=== get_ctype_table ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x32373DF7
+
| 0.931-0.990 || 0x0614B013
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
Helper for strtol in base 10.
+
=== look_ctype_table ===
 
 
<source lang="C">int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);</source>
 
 
 
=== strtoll ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x87AAAFA2
+
| 3.60 || 0xCDF7F155
 
|}
 
|}
  
=== strtoul ===
+
=== memchr ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x4E5042DA
+
| 3.60 || 0x60DAEA30
 
|}
 
|}
  
=== tolower ===
+
=== timingsafe_memcmp ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0021DAF9
+
| 3.60 || 0xB5A4D745
 
|}
 
|}
  
=== toupper ===
+
timing constant memcmp
 +
 
 +
=== memcmp ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xA685DCB1
+
| 0.931-3.60 || 0xF939E83D
 +
|}
 +
 
 +
=== memcpy ===
 +
{| class="wikitable"
 +
! Version !! NID
 +
|-
 +
| 0.931-3.60 || 0x40C88316
 
|}
 
|}
  
=== SceSysclibForDriver_9D148CDE ===
+
=== memmove ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x9D148CDE
+
| 1.50-3.60 || 0x6CC9C1A1
 
|}
 
|}
  
might __aeabi_uldivmod.
+
On 1.69, this seems to be implemented incorrectly.
  
Returns the 64-bit quotient of the division of dividend by divisor.
+
=== memset ===
 
 
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).
 
 
 
<source lang="C">
 
// ex: SceSysclibForDriver_9D148CDE(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000,0);
 
SceUInt64 SceSysclibForDriver_9D148CDE(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);
 
</source>
 
 
 
=== SceSysclibForDriver_33388DBC ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x33388DBC
+
| 0.931-3.60 || 0x0AB9BF5C
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Calculates xor of a1 and a2, then does some calculation with a3.
+
=== memset2 ===
 
 
=== SceSysclibForDriver_72429909 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x72429909
+
| 0.931-1.69 || 0x502B000D
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
== SceSysrootForKernel ==
+
=== lshift_1 ===
 
 
=== SceSysrootForKernel_611F17A4 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x611F17A4
+
| 0.931-3.60 || 0xE46C47E6
 
|}
 
|}
  
Registers the function called by [[#SceSysrootForKernel_118657C6]].
+
This is a temporary name.
  
<source lang="C">int SceSysrootForKernel_611F17A4(void *func);</source>
+
Returns the computation of a lot of shifts using the three arguments.
  
=== SceSysrootForKernel_118657C6 ===
+
=== lshift_2 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.65 || 0x118657C6
+
| 0.931-3.60 || 0x72D31F9D
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForKernel_611F17A4]].
+
This is a temporary name.
  
Used in [[SceExcpmgr]].
+
Returns the computation of a lot of shifts using the three arguments.
  
<source lang="C">SceKernelProcessContext* SceSysrootForKernel_118657C6(void);</source>
+
=== rshift ===
 
 
=== SceSysrootForKernel_081F2C20 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || not present
+
| 0.931-3.60 || 0x1D89F6C0
|-
 
| 1.60-1.69 || 0x081F2C20
 
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
Registers sceKernelGetProcessId_2 from [[SceKernelThreadMgr]].
+
=== snprintf ===
 
 
<source lang="C">int SceSysrootForKernel_081F2C20(void *func);</source>
 
 
 
=== SceSysrootForKernel_C5EAF5F7 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC5EAF5F7
+
| 1.69-3.60 || 0xAE7A8981
 
|}
 
|}
  
Registers the function called by [[#SceSysrootForKernel_47724459]].
+
=== strchr ===
 
 
<source lang="C">int SceSysrootForKernel_C5EAF5F7(void *func);</source>
 
 
 
=== SceSysrootForKernel_47724459 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
|-
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x47724459
+
| 1.50-3.60 || 0x38463759
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForKernel_C5EAF5F7]].
+
=== strcmp ===
 
 
=== SceSysrootForKernel_8747D415 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x8747D415
+
| 1.69-3.60 || 0x0B33BC43
 
|}
 
|}
  
Registers the function used by [[#SceSysrootForKernel_B27B7530]].
+
=== strlcat ===
 
 
<source lang="C">int SceSysrootForKernel_8747D415(void *func);</source>
 
 
 
=== SceSysrootForKernel_B27B7530 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xB27B7530
+
| 3.60 || 0x12504E09
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForKernel_8747D415]].
+
=== strlcpy ===
 
 
Used by [[SceKernelBusError]].
 
 
 
=== SceSysrootForKernel_82FC6405 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x82FC6405
+
| 3.60 || 0x7FB4EBEC
 
|}
 
|}
  
Registers the function used by [[#SceSysrootForKernel_CD4B84F7]].
+
=== strlen ===
 
 
Used by [[SceKernelBusError]].
 
 
 
<source lang="C">int SceSysrootForKernel_82FC6405(void *func);</source>
 
 
 
=== SceSysrootForKernel_CD4B84F7 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCD4B84F7
+
| 0.931-3.60 || 0xCFC6A9AC
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForKernel_82FC6405]].
+
=== strncat ===
 
 
Used by [[SceKernelBusError]].
 
 
 
=== SceSysrootForKernel_733C243E ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x733C243E
+
| 1.69-3.60 || 0xA1D1C32C
 
|}
 
|}
  
Registers many Sysroot [[SceProcessmgr]] callbacks.
+
=== strncmp ===
 
 
<source lang="C">int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);</source>
 
 
 
=== SceSysrootForKernel_7334F1E8 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x7334F1E8
+
| 1.60-3.60 || 0x12CEE649
 
|}
 
|}
  
Calls [[SceProcessmgr#SceProcessmgrForKernel_C77C2085]] function registered by [[#SceSysrootForKernel_733C243E]].
+
=== strncpy ===
 
+
{| class="wikitable"
<source lang="C">int SceSysrootForKernel_7334F1E8(SceUID pid);</source>
 
 
 
=== SceSysrootForKernel_D29BCA77 ===
 
{| class="wikitable"
 
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xD29BCA77
+
| 0.931-3.60 || 0x6D286146
 
|}
 
|}
  
Registers many Sysroot [[SceProcessmgr]] callbacks.
+
=== strncpy_s ===
 
 
<source lang="C">int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);</source>
 
 
 
=== SceSysrootForKernel_DD7821AA ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xDD7821AA
+
| 0.931 || not present
 +
|-
 +
| 0.990-3.60 || 0xFE39AEAC
 
|}
 
|}
  
Register the function called by [[#SceSysrootForKernel_340575CB]].
+
=== strnlen ===
 
 
<source lang="C">int SceSysrootForKernel_DD7821AA(void *func);</source>
 
 
 
=== SceSysrootForKernel_340575CB ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x340575CB
+
| 1.69-3.60 || 0xCD4BD884
 
|}
 
|}
  
Return some PID.
+
=== strrchr ===
 
 
<source lang="C">SceUID SceSysrootForKernel_340575CB(void);</source>
 
 
 
=== sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xBE1EF51C
+
| 1.69-3.60 || 0x7F0E0835
 
|}
 
|}
  
Registers the function called by [[#sceKernelSysrootCheckRemapCodeForUserForKernel]].
+
=== strstr ===
 
 
<source lang="C">int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);</source>
 
 
 
=== sceKernelSysrootCheckRemapCodeForUserForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF8769E86
+
| 1.69-3.60 || 0x1304A69D
 
|}
 
|}
  
=== sceKernelSysrootAllocCurrentProcessHeapForKernel ===
+
=== strtol ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2F75C1DC
+
| 0.931-3.60 || 0xAB77C5AA
 
|}
 
|}
  
<source lang="C">void *sceKernelSysrootAllocCurrentProcessHeapForKernel(SceSize size);</source>
+
=== SceSysclibForDriver_32373DF7 ===
 
 
=== sceKernelSysrootCorelockUnlockForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xAE55B7CC
+
| 0.931-0.990 || 0x32373DF7
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Calls [[#SceCpuForKernel_A5C9DBBA]].
+
Helper for strtol in base 10.
  
<source lang="C">void sceKernelSysrootCorelockUnlockForKernel(void);</source>
+
<source lang="C">int SceSysclibForDriver_32373DF7(char *__nptr, long *plResult);</source>
  
=== SceSysrootForKernel_21F5790B ===
+
=== strtoll ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present
+
| 3.60 || 0x87AAAFA2
|-
 
| 3.60 || 0x21F5790B
 
 
|}
 
|}
  
Registers a function related to kernel panic.
+
=== strtoul ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60 || 0x4E5042DA
 +
|}
  
<source lang="C">int SceSysrootForKernel_21F5790B(void *func);</source>
+
=== tolower ===
 
 
=== SceSysrootForKernel_0DF574A9 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present
+
| 3.60 || 0x0021DAF9
|-
 
| 3.60 || 0x0DF574A9
 
 
|}
 
|}
  
Calls the function related to kernel panic registered by [[#SceSysrootForKernel_21F5790B]].
+
=== toupper ===
 
 
<source lang="C">int SceSysrootForKernel_0DF574A9(void);</source>
 
 
 
=== SceSysrootForKernel_2D6B2A79 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x2D6B2A79
+
| 3.60 || 0xA685DCB1
 
|}
 
|}
  
Registers a function related to kernel panic, called by [[#SceSysrootForKernel_CC7A0E63]].
+
=== SceSysclibForDriver_9D148CDE ===
 
 
=== SceSysrootForKernel_CC7A0E63 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCC7A0E63
+
| 0.931-3.60 || 0x9D148CDE
 
|}
 
|}
  
Calls a function related to kernel panic, registered by [[#SceSysrootForKernel_2D6B2A79]].
+
might __aeabi_uldivmod.
 +
 
 +
Returns the 64-bit quotient of the division of dividend by divisor.
 +
 
 +
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).
  
 
<source lang="C">
 
<source lang="C">
// type: 1: kernel_assertion_or_panic, 3: kernel_exception
+
// ex: SceSysclibForDriver_9D148CDE(tick[0] + 0xd44000, (tick[1] - 0xdcbfff) + (uint)(0xff2bbfff < tick[0]), 1000000,0);
// size: must be <= 0x1000
+
SceUInt64 SceSysclibForDriver_9D148CDE(SceUInt32 dividend_low, SceUInt32 dividend_hi, SceUInt32 divisor_low, SceUInt32 divisor_hi);
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
 
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);
 
 
</source>
 
</source>
  
=== SceSysrootForKernel_1D84C4D4 ===
+
=== SceSysclibForDriver_33388DBC ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present
+
| 0.931-0.990 || 0x33388DBC
 
|-
 
|-
| 3.60-3.65 || 0x1D84C4D4
+
| 3.60 || not present
 
|}
 
|}
  
Get module name, dbgFingerprint and base from address.
+
Calculates xor of a1 and a2, then does some calculation with a3.
  
<source lang="C">
+
=== SceSysclibForDriver_72429909 ===
int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);</source>
 
 
 
=== SceSysrootForKernel_5B5EBFB1 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x5B5EBFB1
+
| 0.931-0.990 || 0x72429909
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Registers pointer to SceLT5 used by [[#SceSysrootForKernel_E20F6FC8]].
+
== SceSysrootForKernel ==
  
<source lang="C">int SceSysrootForKernel_5B5EBFB1(uint a1);</source>
+
=== SceSysrootForKernel_611F17A4 ===
 
 
=== SceSysrootForKernel_41636522 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x41636522
+
| 0.931-3.60 || 0x611F17A4
 
|}
 
|}
  
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.
+
Registers the function called by [[#SceSysrootForKernel_118657C6]].
  
<source lang="C">uint64_t SceSysrootForKernel_41636522(void);</source>
+
<source lang="C">int SceSysrootForKernel_611F17A4(void *func);</source>
  
=== SceSysrootForKernel_E20F6FC8 ===
+
=== SceSysrootForKernel_118657C6 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || not present
+
| 0.931-3.65 || 0x118657C6
|-
 
| 3.60-3.65 || 0xE20F6FC8
 
 
|}
 
|}
  
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".
+
Calls the function registered by [[#SceSysrootForKernel_611F17A4]].
  
Used by SceDebug Kernel Exceptions handlers.
+
Used in [[SceExcpmgr]].
  
<source lang="C">uint64_t SceSysrootForKernel_E20F6FC8(void);</source>
+
<source lang="C">SceKernelProcessContext* SceSysrootForKernel_118657C6(void);</source>
  
=== SceSysrootForKernel_1D8DB3A5 ===
+
=== SceSysrootForKernel_081F2C20 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x1D8DB3A5
+
| 0.931-0.990 || not present
 +
|-
 +
| 1.60-1.69 || 0x081F2C20
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".
+
Registers sceKernelGetProcessId_2 from [[SceKernelThreadMgr]].
  
Returns 0 on success, 0x80020006 if pTime is a NULL pointer.
+
<source lang="C">int SceSysrootForKernel_081F2C20(void *func);</source>
  
<source lang="C">int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);</source>
+
=== SceSysrootForKernel_C5EAF5F7 ===
 
 
=== sceKernelSysrootCorelockLockForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x8E4B61F1
+
| 0.990-3.60 || 0xC5EAF5F7
 
|}
 
|}
  
Calls SceCpuForKernel_9D72DD1B.
+
Registers the function called by [[#SceSysrootForKernel_47724459]].
  
<source lang="C">int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);</source>
+
<source lang="C">int SceSysrootForKernel_C5EAF5F7(void *func);</source>
  
=== SceSysrootForKernel_06182D59 ===
+
=== SceSysrootForKernel_47724459 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x06182D59
+
| 0.990-3.60 || 0x47724459
 
|}
 
|}
  
Reimplementation:
+
Calls the function registered by [[#SceSysrootForKernel_C5EAF5F7]].
<source lang="C">
 
int SceSysrootForKernel_06182D59(int a1) {
 
return *(uint32_t *)(pSysroot + 0x20) + (a1 << 0x5);
 
}
 
</source>
 
  
<source>int SceSysrootForKernel_06182D59(int a1);</source>
+
=== SceSysrootForKernel_8747D415 ===
 
 
=== SceSysrootForKernel_7385CADE ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990-3.60 || 0x8747D415
|-
 
| 3.60 || 0x7385CADE
 
 
|}
 
|}
  
Get current syscall PID.
+
Registers the function used by [[#SceSysrootForKernel_B27B7530]].
  
<source lang="C">
+
<source lang="C">int SceSysrootForKernel_8747D415(void *func);</source>
// Returns KERNEL_PID if the function has not been set
 
SceUID SceSysrootForKernel_7385CADE(void);
 
</source>
 
  
=== SceSysrootForKernel_D441DC34 ===
+
=== SceSysrootForKernel_B27B7530 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990-3.60 || 0xB27B7530
|-
 
| 3.60 || 0xD441DC34
 
 
|}
 
|}
  
Executes a function registered by [[#SceSysrootForKernel_26458702]], related to syscall frame printing on kernel panic.
+
Calls the function registered by [[#SceSysrootForKernel_8747D415]].
 +
 
 +
Used by [[SceKernelBusError]].
  
=== get_SceKernelSysrootClass_itemsize ===
+
=== SceSysrootForKernel_82FC6405 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xEEB867C0
+
| 0.990-3.60 || 0x82FC6405
 
|}
 
|}
  
On FW 0.990 return hardcoded value 0x470.
+
Registers the function used by [[#SceSysrootForKernel_CD4B84F7]].
  
On FW 3.60 return hardcoded value 0x41C.
+
Used by [[SceKernelBusError]].
  
<source lang="C">SceSize get_SceKernelSysrootClass_itemsize(void);</source>
+
<source lang="C">int SceSysrootForKernel_82FC6405(void *func);</source>
  
=== get_SceKernelSysrootClass_object ===
+
=== SceSysrootForKernel_CD4B84F7 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x085C2BCB
+
| 0.990-3.60 || 0xCD4B84F7
 
|}
 
|}
  
<source lang="C">SceKernelObject *get_SceKernelSysrootClass_object(void);</source>
+
Calls the function registered by [[#SceSysrootForKernel_82FC6405]].
 +
 
 +
Used by [[SceKernelBusError]].
  
=== sceKernelSysrootGetLibraryDBForKernel ===
+
=== SceSysrootForKernel_733C243E ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xCD70C9D7
+
| 0.990-3.60 || 0x733C243E
 
|}
 
|}
  
=== sceKernelSysrootSetLibraryDBForKernel ===
+
Registers many Sysroot [[SceProcessmgr]] callbacks.
 +
 
 +
<source lang="C">int SceSysrootForKernel_733C243E(const SceSysrootForKernel_733C243E_struct *pParam);</source>
 +
 
 +
=== SceSysrootForKernel_7334F1E8 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xCB58A0F4
+
| 3.60 || 0x7334F1E8
 
|}
 
|}
  
=== sceKernelSysrootAllocForKernel ===
+
Calls [[SceProcessmgr#SceProcessmgrForKernel_C77C2085]] function registered by [[#SceSysrootForKernel_733C243E]].
 +
 
 +
<source lang="C">int SceSysrootForKernel_7334F1E8(SceUID pid);</source>
 +
 
 +
=== SceSysrootForKernel_D29BCA77 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-0.990 || 0xB0149E69
+
| 0.990-3.60 || 0xD29BCA77
 
|}
 
|}
  
<source lang="C">void *sceKernelSysrootAllocForKernel(SceSize size);</source>
+
Registers many Sysroot [[SceProcessmgr]] callbacks.
 +
 
 +
<source lang="C">int SceSysrootForKernel_D29BCA77(const SceSysrootForKernel_D29BCA77_struct *pParam);</source>
  
=== sceKernelSysrootSetStatusForKernel ===
+
=== SceSysrootForKernel_DD7821AA ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xA84676E3
+
| 0.990-3.60 || 0xDD7821AA
 
|}
 
|}
  
 +
Register the function called by [[#SceSysrootForKernel_340575CB]].
 +
 +
<source lang="C">int SceSysrootForKernel_DD7821AA(void *func);</source>
 +
 +
=== SceSysrootForKernel_340575CB ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! status !! description
+
! Version !! NID
 
|-
 
|-
| 3 || Global malloc heap initialization completed.
+
| 0.990-3.60 || 0x340575CB
|-
 
| 4 || Start initialization for load the module
 
|-
 
| 0x10 || Initialization to load the module is complete
 
|-
 
| 0x100 || First process create
 
|-
 
| 0x1000 || Kernel boot completed.
 
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootSetStatusForKernel(SceUInt32 status);</source>
+
Return some PID.
 +
 
 +
<source lang="C">SceUID SceSysrootForKernel_340575CB(void);</source>
  
=== sceKernelSysrootGetProcessCBExitDeleteThreadForKernel ===
+
=== sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xBBFD2E3C
+
| 0.990-3.60 || 0xBE1EF51C
 
|}
 
|}
  
=== sceKernelSysrootGetCurrentProcessCBForKernel ===
+
Registers the function called by [[#sceKernelSysrootCheckRemapCodeForUserForKernel]].
 +
 
 +
<source lang="C">int sceKernelSysrootSetCheckRemapCodeForUserFuncForKernel(void *func);</source>
 +
 
 +
=== sceKernelSysrootCheckRemapCodeForUserForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x9991B1AF
+
| 0.990-3.60 || 0xF8769E86
 
|}
 
|}
  
=== sceKernelSysrootGetCurrentThreadAttrForKernel ===
+
=== sceKernelSysrootAllocCurrentProcessHeapForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x73601453
+
| 0.990-3.60 || 0x2F75C1DC
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);</source>
+
<source lang="C">void *sceKernelSysrootAllocCurrentProcessHeapForKernel(SceSize size);</source>
  
=== sceKernelSysrootGetCurrentTimeForKernel ===
+
=== sceKernelSysrootCorelockUnlockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x4FCFA359
+
| 0.931-3.60 || 0xAE55B7CC
 
|}
 
|}
  
<source lang="C">SceRtcTick *sceKernelSysrootGetCurrentTimeForKernel(void);</source>
+
Calls [[#SceCpuForKernel_A5C9DBBA]].
 +
 
 +
<source lang="C">void sceKernelSysrootCorelockUnlockForKernel(void);</source>
  
=== sceKernelSysrootGetSystemTimeForKernel ===
+
=== SceSysrootForKernel_21F5790B ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0xE0D41319
+
| 0.931 || not present
 
|-
 
|-
| 3.60 || not present
+
| 3.60 || 0x21F5790B
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)</source>
+
Registers a function related to kernel panic.
 +
 
 +
<source lang="C">int SceSysrootForKernel_21F5790B(void *func);</source>
  
=== sceKernelSysrootGetSystemTimeLowForKernel ===
+
=== SceSysrootForKernel_0DF574A9 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x2464329D
+
| 0.931 || not present
 
|-
 
|-
| 3.60 || not present
+
| 3.60 || 0x0DF574A9
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootGetSystemTimeLowForKernel(void);</source>
+
Calls the function related to kernel panic registered by [[#SceSysrootForKernel_21F5790B]].
 +
 
 +
<source lang="C">int SceSysrootForKernel_0DF574A9(void);</source>
  
=== sceKernelSysrootAssertSysrootForKernel ===
+
=== SceSysrootForKernel_2D6B2A79 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x1B7F150F
+
| 0.990-3.60 || 0x2D6B2A79
 
|}
 
|}
  
Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).
+
Registers a function related to kernel panic, called by [[#SceSysrootForKernel_CC7A0E63]].
  
<source lang="C">int sceKernelSysrootAssertSysrootForKernel(void *sysroot);</source>
+
=== SceSysrootForKernel_CC7A0E63 ===
 
 
=== sceKernelSysrootSetVbaseResetVectorForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0F2F2B4E
+
| 0.990-3.60 || 0xCC7A0E63
 
|}
 
|}
  
=== sceKernelSysrootThreadMgrStartAfterProcessForKernel ===
+
Calls a function related to kernel panic, registered by [[#SceSysrootForKernel_2D6B2A79]].
{| class="wikitable"
+
 
 +
<source lang="C">
 +
// type: 1: kernel_assertion_or_panic, 3: kernel_exception
 +
// size: must be <= 0x1000
 +
// pBuf: address of the buffer got using SceDebugForKernel_BEF921A2
 +
int SceSysrootForKernel_CC7A0E63(int type, SceSize size, const char *pBuf);
 +
</source>
 +
 
 +
=== SceSysrootForKernel_1D84C4D4 ===
 +
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x0EB5D7CD
+
| 0.931 || not present
 +
|-
 +
| 3.60-3.65 || 0x1D84C4D4
 
|}
 
|}
  
=== sceKernelSysrootGetCurrentProcessForKernel ===
+
Get module name, dbgFingerprint and base from address.
 +
 
 +
<source lang="C">
 +
int SceSysrootForKernel_1D84C4D4(SceUID pid, uintptr_t address, SceUInt32 *pDbgFingerprint, SceUInt32 *pModuleBase, char *module_name);</source>
 +
 
 +
=== SceSysrootForKernel_5B5EBFB1 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x5B7570C5
+
| 3.60 || 0x5B5EBFB1
 
|}
 
|}
  
Return the current process id.
+
Registers pointer to SceLT5 used by [[#SceSysrootForKernel_E20F6FC8]].
  
<source lang="C">SceUID sceKernelSysrootGetCurrentProcessForKernel(void);</source>
+
<source lang="C">int SceSysrootForKernel_5B5EBFB1(uint a1);</source>
  
=== sceKernelSysrootTrapThreadAfterSyscallForKernel ===
+
=== SceSysrootForKernel_41636522 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x9139E22B
+
| 3.60 || 0x41636522
 
|}
 
|}
  
=== sceKernelSysrootReturnFromExcpToThreadForKernel ===
+
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.
 +
 
 +
<source lang="C">uint64_t SceSysrootForKernel_41636522(void);</source>
 +
 
 +
=== SceSysrootForKernel_E20F6FC8 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.65 || 0xDADFF828
+
| 0.931 || not present
 +
|-
 +
| 3.60-3.65 || 0xE20F6FC8
 
|}
 
|}
  
Used in [[SceExcpmgr]].
+
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".
 +
 
 +
Used by SceDebug Kernel Exceptions handlers.
  
<source lang="C">int sceKernelSysrootReturnFromExcpToThreadForKernel(void);</source>
+
<source lang="C">uint64_t SceSysrootForKernel_E20F6FC8(void);</source>
  
=== sceKernelSysrootBacktraceForKernel ===
+
=== SceSysrootForKernel_1D8DB3A5 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xCC893F37
+
| 3.60 || 0x1D8DB3A5
 
|}
 
|}
  
See also [[SceKernelModulemgr#SceSceBacktraceForDriver]].
+
Same as [[#SceSysrootForKernel_41636522]] but "asynchronous".
  
<source lang="C">int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);</source>
+
Returns 0 on success, 0x80020006 if pTime is a NULL pointer.
 +
 
 +
<source lang="C">int SceSysrootForKernel_1D8DB3A5(SceUInt64 *pTime);</source>
  
=== sceKernelSysrootPrintBacktraceForKernel ===
+
=== sceKernelSysrootCorelockLockForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x491CE8DF
+
| 0.931-3.60 || 0x8E4B61F1
 
|}
 
|}
  
See also [[SceKernelModulemgr#SceSceBacktraceForDriver]].
+
Calls SceCpuForKernel_9D72DD1B.
  
<source lang="C">int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);</source>
+
<source lang="C">int sceKernelSysrootCorelockLockForKernel(SceUInt32 core);</source>
  
=== sceKernelSysrootRegisterBacktraceForKernel ===
+
=== SceSysrootForKernel_06182D59 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940 || 0x1C307A31
+
| 3.60 || 0x06182D59
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="c">int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());</source>
+
Reimplementation:
 +
<source lang="C">
 +
int SceSysrootForKernel_06182D59(int a1) {
 +
return *(uint32_t *)(pSysroot + 0x20) + (a1 << 0x5);
 +
}
 +
</source>
 +
 
 +
<source>int SceSysrootForKernel_06182D59(int a1);</source>
  
=== sceKernelSysrootGetSharedMemoryForKernel ===
+
=== SceSysrootForKernel_7385CADE ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xC8C8C321
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0x7385CADE
 
|}
 
|}
  
=== sceKernelSysrootSetSharedMemoryForKernel ===
+
Get current syscall PID.
 +
 
 +
<source lang="C">
 +
// Returns KERNEL_PID if the function has not been set
 +
SceUID SceSysrootForKernel_7385CADE(void);
 +
</source>
 +
 
 +
=== SceSysrootForKernel_D441DC34 ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xFBB91741
+
| 0.990 || not present
 +
|-
 +
| 3.60 || 0xD441DC34
 
|}
 
|}
  
=== sceKernelSysrootGetPUIDEntryHeapForKernel ===
+
Executes a function registered by [[#SceSysrootForKernel_26458702]], related to syscall frame printing on kernel panic.
 +
 
 +
=== get_SceKernelSysrootClass_itemsize ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x88DE85EF
+
| 0.990-3.60 || 0xEEB867C0
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootGetPUIDEntryHeapForKernel(SceUID pid, void **entryHeap);</source>
+
On FW 0.990 return hardcoded value 0x470.
 +
 
 +
On FW 3.60 return hardcoded value 0x41C.
 +
 
 +
<source lang="C">SceSize get_SceKernelSysrootClass_itemsize(void);</source>
  
=== sceKernelSysrootGetStatusForKernel ===
+
=== get_SceKernelSysrootClass_object ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x5C426B19
+
| 0.990-3.60 || 0x085C2BCB
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootGetStatusForKernel(void);</source>
+
<source lang="C">SceKernelObject *get_SceKernelSysrootClass_object(void);</source>
  
=== sceKernelSysrootIofilemgrStartForKernel ===
+
=== sceKernelSysrootGetLibraryDBForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF6A6D205
+
| 0.990 || 0xCD70C9D7
 
|}
 
|}
  
=== sceKernelSysrootSetCurrentAddressSpaceCBForKernel ===
+
=== sceKernelSysrootSetLibraryDBForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940 || 0x63EBB05B
+
| 0.990 || 0xCB58A0F4
|-
 
| 3.60 || not present
 
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootSetCurrentAddressSpaceCBForKernel(void *pasCB);</source>
+
=== sceKernelSysrootAllocForKernel ===
 
 
=== sceKernelSysrootGetCurrentAddressSpaceCBForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.940-3.60 || 0x63EBB05B
+
| 0.940-0.990 || 0xB0149E69
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForKernel_26458702]].
+
<source lang="C">void *sceKernelSysrootAllocForKernel(SceSize size);</source>
  
<source lang="C">callback *sceKernelSysrootGetCurrentAddressSpaceCBForKernel();</source>
+
=== sceKernelSysrootSetStatusForKernel ===
 
+
{| class="wikitable"
=== SceSysrootForKernel_BF82931F ===
 
{| class="wikitable"
 
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xBF82931F
+
| 0.990-3.60 || 0xA84676E3
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForDriver_2BE874EF]].
 
 
No usage seen on CEX OS. Maybe used in DEX/TOOL OS.
 
 
<source lang="C">int SceSysrootForKernel_BF82931F(int maybe_app_id, void *pOut);</source>
 
 
=== SceSysrootForKernel_6D111FA7 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Version !! NID
+
! status !! description
 +
|-
 +
| 3 || Global malloc heap initialization completed.
 +
|-
 +
| 4 || Start initialization for load the module
 +
|-
 +
| 0x10 || Initialization to load the module is complete
 +
|-
 +
| 0x100 || First process create
 
|-
 
|-
| 3.60 || 0x6D111FA7
+
| 0x1000 || Kernel boot completed.
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForDriver_3B19B06B]].
+
<source lang="C">int sceKernelSysrootSetStatusForKernel(SceUInt32 status);</source>
  
Used only in [[SceCoredump]].
+
=== sceKernelSysrootGetProcessCBExitDeleteThreadForKernel ===
 
 
<source lang="C">int SceSysrootForKernel_6D111FA7(int maybe_app_id, void *pOut);</source>
 
 
 
=== SceSysrootForKernel_2A03DFA1 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2A03DFA1
+
| 0.990-3.60 || 0xBBFD2E3C
 
|}
 
|}
  
Calls the function registered by [[#SceSysrootForDriver_70AD47A9]].
+
=== sceKernelSysrootGetCurrentProcessCBForKernel ===
 
 
Used only in [[SceCoredump]].
 
 
 
<source lang="C">
 
// pOut: A buffer of at least 0xF8 bytes
 
int SceSysrootForKernel_2A03DFA1(void *pOut);
 
</source>
 
 
 
=== sceKernelSysrootAppMgrSpawnProcessForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x3ACACD22
+
| 0.990-3.60 || 0x9991B1AF
 
|}
 
|}
  
=== sceKernelSysrootGetCachedSecureModuleInfoForKernel ===
+
=== sceKernelSysrootGetCurrentThreadAttrForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xF10AB792
+
| 0.990-3.60 || 0x73601453
 
|}
 
|}
  
Temp name was sceKernelSysrootGetSmSelfInfoForKernel.
+
<source lang="C">int sceKernelSysrootGetCurrentThreadAttrForKernel(SceUint32 *pThrAttr);</source>
  
 +
=== sceKernelSysrootGetCurrentTimeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
! Index !! SM SELF location
 
 
|-
 
|-
| 0 || os0:sm/gcauthmgr_sm.self
+
! Version !! NID
 
|-
 
|-
| 1 || os0:sm/rmauth_sm.self
+
| 0.990 || 0x4FCFA359
|-
 
| 2 ||  os0:sm/encdec_w_portability_sm.self
 
 
|}
 
|}
  
<source lang="C">int sceKernelSysrootGetCachedSecureModuleForKernel(SceCachedSecureModule id, SceCachedSecureModuleInfo *pInfo);</source>
+
<source lang="C">SceRtcTick *sceKernelSysrootGetCurrentTimeForKernel(void);</source>
  
=== sceKernelSysrootGetProcessSelfAuthInfoForKernel ===
+
=== sceKernelSysrootGetSystemTimeForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x4F0A4066
+
| 0.990 || 0xE0D41319
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceSysrootGetSelfAuthInfoForKernel.
+
<source lang="C">int sceKernelSysrootGetSystemTimeForKernel(SceRtcTick *pTick)</source>
  
<source lang="C">int sceKernelSysrootGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *pSelfAuthInfo);</source>
+
=== sceKernelSysrootGetSystemTimeLowForKernel ===
 
 
=== sceKernelSysrootGetProcessTitleIdForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xEC3124A3
+
| 0.990 || 0x2464329D
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceSysrootGetProcessTitleIdForPidForKernel.
+
<source lang="C">int sceKernelSysrootGetSystemTimeLowForKernel(void);</source>
  
<source lang="C">int sceKernelSysrootGetProcessTitleIdForKernel(SceUID pid, char *title_id, SceSize len);</source>
+
=== sceKernelSysrootAssertSysrootForKernel ===
 
 
=== sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xB39CD708
+
| 0.990 || 0x1B7F150F
 
|}
 
|}
  
<source lang="c">int sceKernelSysrootSetGetFunctionNameByNIDFuncForKernel(void *func);</source>
+
Check sysroot->magic (offset 0xC must be 0xBA97F5A1) and sysroot->magic2 (offset 0x20C must be 0xA008B0C3‬).
 +
 
 +
<source lang="C">int sceKernelSysrootAssertSysrootForKernel(void *sysroot);</source>
  
=== sceKernelSysrootGetFunctionNameByNIDForKernel ===
+
=== sceKernelSysrootSetVbaseResetVectorForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x0B79E220
+
| 0.990-3.60 || 0x0F2F2B4E
 
|}
 
|}
  
Mirror of [[SceSysLibTrace#sceNidsymtblGetFunctionNameByNIDForDriver]].
+
=== sceKernelSysrootThreadMgrStartAfterProcessForKernel ===
 
 
<source lang="c">int sceKernelSysrootGetFunctionNameByNIDForKernel(SceNID funcnid, const char **name);</source>
 
 
 
=== SceSysrootForKernel_26458702 ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.990-3.60 || 0x0EB5D7CD
|-
 
| 3.60 || 0x26458702
 
 
|}
 
|}
  
Registers some functions.
+
=== sceKernelSysrootGetCurrentProcessForKernel ===
 
 
=== SceSysrootForKernel_B171CC2D ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || not present
+
| 0.931-0.990 || 0x5B7570C5
|-
 
| 3.60 || 0xB171CC2D
 
 
|}
 
|}
  
Seems to be used to register some functions.
+
Return the current process id.
  
used by [[SceKernelModulemgr]]
+
<source lang="C">SceUID sceKernelSysrootGetCurrentProcessForKernel(void);</source>
  
<source lang="C">int SceSysrootForKernel_B171CC2D(SceSysrootModulemgrHandlers *pHandlers);</source>
+
=== sceKernelSysrootTrapThreadAfterSyscallForKernel ===
 
 
=== sceKernelSysrootGetProcessSyscallInfoForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xFF9F80FF
+
| 0.990-3.60 || 0x9139E22B
 
|}
 
|}
  
<source lang="c">int sceKernelSysrootGetProcessSyscallInfoForKernel(SceUID pid, const void *PC, SceSyscallInfo *pInfo);</source>
+
=== sceKernelSysrootReturnFromExcpToThreadForKernel ===
 
 
=== sceKernelSysrootGetVbaseResetVectorForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xCC85905B
+
| 0.931-3.65 || 0xDADFF828
 
|}
 
|}
  
Returns the exception vectors base address. The address of the exception vectors for the CPU <code>i</code> is: <code>sceKernelSysrootGetVbaseResetVectorForKernel() + 0x40 * i</code>.
+
Used in [[SceExcpmgr]].
  
<source lang="C">void *sceKernelSysrootGetVbaseResetVectorForKernel(void);</source>
+
<source lang="C">int sceKernelSysrootReturnFromExcpToThreadForKernel(void);</source>
  
=== sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel ===
+
=== sceKernelSysrootBacktraceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x71DB83A2
+
| 0.931-3.60 || 0xCC893F37
 
|}
 
|}
  
Registers [[SceSblPostSsMgr#sceSblLicMgrGetLicenseStatusForDriver]].
+
See also [[SceKernelModulemgr#SceBacktraceForDriver]].
  
<source lang="c">int sceKernelSysrootSetLicMgrGetLicenseStatusFuncForKernel(int (__cdecl *sceSblLicMgrGetLicenseStatusForDriver)());</source>
+
<source lang="C">int sceKernelSysrootBacktraceForKernel(SceUID threadId, SceKernelCallFrame *pCallFrameBuffer, SceSize numBytesBuffer, SceUInt32 *pNumReturn, SceInt32 mode);</source>
  
=== sceKernelSysrootLicMgrGetLicenseStatusForKernel ===
+
=== sceKernelSysrootPrintBacktraceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x377895EB
+
| 0.931-3.60 || 0x491CE8DF
 
|}
 
|}
  
Called by [[SceSblAuthMgr#sceSblAuthMgrAuthHeaderForKernel|sceSblAuthMgrAuthHeaderForKernel]] before Cmep request.
+
See also [[SceKernelModulemgr#SceBacktraceForDriver]].
  
<source lang="C">int sceKernelSysrootLicMgrGetLicenseStatusForKernel(void);</source>
+
<source lang="C">int sceKernelSysrootPrintBacktraceForKernel(SceUID processId, const SceKernelCallFrame *pCallFrame, SceUInt32 numFrames);</source>
  
=== sceKernelSysrootGetSysrootForKernel ===
+
=== sceKernelSysrootRegisterBacktraceForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60-3.65 || 0x3E455842
+
| 0.940 || 0x1C307A31
 +
|-
 +
| 3.60 || not present
 
|}
 
|}
  
Temp name was sceKernelGetSysbaseForKernel.
+
<source lang="c">int sceKernelSysrootRegisterBacktraceForKernel(int (__cdecl *func)());</source>
  
<source lang="C">SceSysroot *sceKernelSysrootGetSysrootForKernel(void);</source>
+
=== sceKernelSysrootGetSharedMemoryForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990-3.60 || 0xC8C8C321
 +
|}
  
=== sceKernelSysrootGetKblParamForKernel ===
+
=== sceKernelSysrootSetSharedMemoryForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.65 || 0x9DB56D1F
+
| 0.990-3.60 || 0xFBB91741
 
|}
 
|}
  
Temp name was sceKernelGetSysrootBufferForKernel, sceSysrootGetSysrootBufferForKernel.
+
=== sceKernelSysrootGetPUIDEntryHeapForKernel ===
 
 
Returns pointer to [[KBL Param]].
 
 
 
<source lang="C">SceKblParam *sceKernelSysrootGetKblParamForKernel(void);</source>
 
 
 
=== sceKernelSysrootGetSoCRevisionForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xD3872270
+
| 0.990-3.60 || 0x88DE85EF
 
|}
 
|}
  
return pSysroot->soc_revision;
+
<source lang="C">int sceKernelSysrootGetPUIDEntryHeapForKernel(SceUID pid, void **entryHeap);</source>
  
<source lang="C">int sceKernelSysrootGetSoCRevisionForKernel(void);</source>
+
=== sceKernelSysrootGetStatusForKernel ===
 
 
=== sceKernelSysrootGetPervasiveUnkDwordForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-