SceSyscon

From Vita Development Wiki
Jump to navigation Jump to search

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

Get syscon timestamp

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

Wait syscon initialized

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

Set ADV7533 CDC HPD pin state

Version World NID
3.60 non-secure 0x62155962

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

int SceSysconForDriver_62155962(int enable_HDMI_CDC_HPD_pin);

Sync

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

MSIF (Memory card) power

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

Reset device

Version World NID
1.69 non-secure 0x8A95D35C
int syscon_reset_device(int type, int unk);

It issues SMC #0 with r12 = 0x11A.

The unk 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 of the device.
1 Enter low-power (suspend) state.
2 Cold reset.
3 Reset to update mode?
4 Reset to update mode?
5 Hibernate.
16 ??
17 Suspend and immediately resume (soft reset).

Command exec

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

SDIF power

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

Command exec async

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

Send command, used by SceRtc and ScePower

Version World NID
1.69 non-secure 0xE26488B9
int syscon_send_command(uint32_t id, void *args, int size);

ksceSysconSetDebugHandlers

Version World NID
3.60 non-secure 0xF245CD6F
/** A set of debug handlers for syscon, that you can set in ksceSysconSetDebugHandlers(). */
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 ksceSysconSetDebugHandlers(void);

Get Baryon version

Version World NID
3.60 non-secure 0xFF86F4C5
int SceSysconForDriver_FF86F4C5(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 ksceSysconGetUsbDetStatus
0x806 0xE7F5D3DC Reboots Vita?
0x807 0x253CC522 ??
0x820 0x727F985A ??
0x840 0x4FEC564C ksceSysconGetManualChargeMode
0x841 0x3C3B949C ??
0x842 0x1C29C00E ??
0x843 0x730E4725 ??
0x880 0xA039B563 ??
0x881 0x9BF78047 ??
0x884 0x3FDD29D6 ??
0x885 0x79E6DD8B ??
0x886 0x62155962 ??
0x887 0x063425AE ??
0x888 0xBE1ADE4F Control SDIF power
0x889 0x8D1D97E8 ??
0x88A 0xA2E85DB9 ??
0x88B 0x5A614349 ??
0x88C 0xB872E904 ??
0x88D 0xDD16ABD9 ??
0x88E 0x7F198FA2 ??
0x88F 0x40FF3898 ??
0x890 0x285594F8 ??
0x891 0x04EC7579 ksceSysconCtrlLED
0x892 0x596B17B7 ??
0x893 0x2A4B0437 ??
0x899 0x5CDDA14D ??
0x89A 0x59DC5938 ??
0x89B 0x710A7CF0 Control Memory Card power
0x89C 0xB1F88B11 ??
0x89D 0x6F586D1A ksceSysconConfigLED?
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 Description
0x129EA022 ??
0x14730196 ??
0x2D471528 ??
0x32418370 SYSCON_CB_ALARM?
0x3F0DB7C0 SYSCON_CB_LOW_BATTERY
0x773B8126 SYSCON_CB_THERMAL_ALERT
0x80D6E061 ??
0x9F8340FF ??