Difference between revisions of "SceSyscon"

From Vita Development Wiki
Jump to navigation Jump to search
Line 52: Line 52:
 
<source lang="c">int syscon_read_command(uint32_t id, void *buffer, int size);</source>
 
<source lang="c">int syscon_read_command(uint32_t id, void *buffer, int size);</source>
  
=== Get syscon timestamp ===
+
=== sceSysconGetTimeStampForDriver ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 63: Line 63:
 
| 0x4D588A0A
 
| 0x4D588A0A
 
|}
 
|}
<source lang="c">int sceSysconGetTimeStamp(char timeStamp[16]);</source>
+
<source lang="c">int sceSysconGetTimeStampForDriver(char timeStamp[16]);</source>
  
 
=== sceSysconWaitInitializedForDriver ===
 
=== sceSysconWaitInitializedForDriver ===

Revision as of 13:57, 9 March 2018

Module

Known NIDs

Version Name World Privilege NID
1.69 SceSyscon Non-secure Kernel 0x250E65E7

Libraries

Known NIDs

Version Name World Visibility NID
1.69 SceSysconForDriver Non-secure Kernel 0x60A35F64

SceSysconForDriver

Types

typedef struct SceSysconPacket {
	struct SceSysconPacket *next;
	u32 status;
	SceUID semaId;
	u32 unk;
	u8 tx[32]; // tx[0..1] = cmd, tx[2] = size
	u8 rx[32]; // rx[0..1] = cmd?, rx[2] = size?
	u32 unk1[4];
	int (*callback)(SceSysconPacket *packet, void *argp);
	void *argp;
	u32 time;
	u32 unk2[5];
} SceSysconPacket; /* size 0x80 */

Read command, used by SceRtc

Version World NID
3.60 non-secure 0x299B1CE7
int syscon_read_command(uint32_t id, void *buffer, int size);

sceSysconGetTimeStampForDriver

Version World NID
3.60 non-secure 0x4D588A0A
int sceSysconGetTimeStampForDriver(char timeStamp[16]);

sceSysconWaitInitializedForDriver

Version World NID
3.60 non-secure 0x55DF1C9B
int sceSysconWaitInitializedForDriver(void);

sceSysconCtrlHdmiCecPowerForDriver

Version World NID
3.60 non-secure 0x62155962

Sets the pin CDC Hot Plug Detect (HPD) state of the HDMI bridge (ADV7533).

int sceSysconCtrlHdmiCecPowerForDriver(int enable_HDMI_CDC_HPD_pin);

sceSysconCmdSyncForDriver

Version World NID
3.60 non-secure 0x6E517D22
int sceSysconCmdSyncForDriver(SceSysconPacket *packet, int noWait);

sceSysconCtrlMsPowerForDriver

Version World NID
3.60 non-secure 0x710A7CF0
int sceSysconCtrlMsPowerForDriver(int enable_power);

sceSysconResetDeviceForDriver

Version World NID
1.69 non-secure 0x8A95D35C
int sceSysconResetDeviceForDriver(int type, int mode);

It issues SMC #0 with r12 = 0x11A.

The mode argument is usually set to 0x2 or sometimes 0x8002 (which seems to correspond to some request by the UDC and BT drivers).

The type argument determines what to do.

Type Description
0 Power off.
1 Suspend (low-power state).
2 Cold reset.
3 Reset to update mode?
4 Reset to update mode?
5 Hibernate.
16 ??
17 Soft reset (suspend and immediately resume).

sceSysconCmdExecForDriver

Version World NID
3.60 non-secure 0x9ADDCA4A
int sceSysconCmdExecForDriver(SceSysconPacket *packet, unsigned int flags);

sceSysconCtrlSdPowerForDriver

Version World NID
3.60 non-secure 0xBE1ADE4F
int sceSysconCtrlSdPowerForDriver(int enable_power);

sceSysconCmdExecAsyncForDriver

Version World NID
3.60 non-secure 0xC2224E82
int sceSysconCmdExecAsyncForDriver(SceSysconPacket *packet, u32 flags, int (*callback)(SceSysconPacket *, void *), void *argp);

sceSysconCmdSendForDriver

Version World NID
1.69 non-secure 0xE26488B9
// used by SceRtc and ScePower
int sceSysconCmdSendForDriver(uint32_t id, void *args, int size);

sceSysconSetDebugHandlersForDriver

Version World NID
3.60 non-secure 0xF245CD6F
/** A set of debug handlers for syscon, that you can set in sceSysconSetDebugHandlersForDriver(). */
typedef struct SceSysconDebugHandlers {
    /** Structure size (probably, unused). */
    s32 size;
    /** Callback ran right before running a packet, with a pointer to it passed as the first argument. */
    void (*start)(SceSysconPacket *packet);
    /** Callback ran right after finishing running a packet, with a pointer to it passed as the first argument. */
    void (*end)(SceSysconPacket *packet);
} SceSysconDebugHandlers;

int sceSysconSetDebugHandlersForDriver(void);

sceSysconGetBaryonVersionForDriver

Version World NID
3.60 non-secure 0xFF86F4C5
int sceSysconGetBaryonVersionForDriver(void);

Commands used by function

It seems like the command format is as follows: (direction << 8) | cmd_id, where direction = 1 means write to syscon, and direction = 0 means read from syscon.

Commands used NID Description
0x800 0xA2FE9BF9 ??
0x001 0x270B7B0B ??
0x805 0xEF810687 sceSysconGetUsbDetStatusForDriver
0x806 0xE7F5D3DC Reboots Vita?
0x807 0x253CC522 ??
0x820 0x727F985A ??
0x840 0x4FEC564C sceSysconGetManualChargeModeForDriver
0x841 0x3C3B949C ??
0x842 0x1C29C00E ??
0x843 0x730E4725 ??
0x880 0xA039B563 ??
0x881 0x9BF78047 ??
0x884 0x3FDD29D6 ??
0x885 0x79E6DD8B ??
0x886 0x62155962 sceSysconCtrlHdmiCecPowerForDriver
0x887 0x063425AE ??
0x888 0xBE1ADE4F sceSysconCtrlSdPowerForDriver
0x889 0x8D1D97E8 ??
0x88A 0xA2E85DB9 ??
0x88B 0x5A614349 ??
0x88C 0xB872E904 ??
0x88D 0xDD16ABD9 ??
0x88E 0x7F198FA2 ??
0x88F 0x40FF3898 ??
0x890 0x285594F8 ??
0x891 0x04EC7579 sceSysconCtrlLEDForDriver
0x892 0x596B17B7 ??
0x893 0x2A4B0437 ??
0x899 0x5CDDA14D ??
0x89A 0x59DC5938 ??
0x89B 0x710A7CF0 sceSysconCtrlMsPowerForDriver
0x89C 0xB1F88B11 ??
0x89D 0x6F586D1A sceSysconConfigLEDForDriver?
0x89E 0x9CA6EB70 ??
0x89F 0xCB41B531 ??
0x900, 0x802 0xC562AF3A ??
0x901, 0x803 0x03F11220 ??
0x902 0xAD0A8275 ??
0x903 0x26F9D729 ??
0x981 0x9070F139 ??
0x982 0x00A65FC1 ??
0x983 0x0826BA07 ??
0x984 0xB841C141 ??
0x985 0x91D3B7A3 ??
0x98A 0xF93CF833 ??
0x98B 0xE1885F68 ??
0x98C 0xCD73079D ??

Callbacks

All the following exports have this function prototype: int sceSysconSet*Callback(void (*func)(int enable, void *argp), void *argp);.

NID Function Description
0x129EA022 ?? ??
0x14730196 ?? ??
0x2D471528 ?? ??
0x32418370 sceSysconSetAlarmCallbackForDriver? SYSCON_CB_ALARM
0x3F0DB7C0 sceSysconSetLowBatteryCallbackForDriver SYSCON_CB_LOW_BATTERY
0x773B8126 sceSysconSetThermalAlertCallbackForDriver SYSCON_CB_THERMAL_ALERT
0x80D6E061 ?? ??
0x9F8340FF ?? ??