SceSyscon

From Vita Development Wiki
Jump to: navigation, search

Module

Known NIDs

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

Libraries

Known NIDs

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

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 */

SceSysconForDriver

sceSysconIsLowBatteryInhibitUpdateRebootForDriver

Version World NID
3.60 non-secure 0x1A0C140F

used by scePowerIsLowBatteryInhibitUpdateReboot

int sceSysconIsLowBatteryInhibitUpdateRebootForDriver(unk);

sceSysconIsLowBatteryInhibitUpdateDownloadForDriver

Version World NID
3.60 non-secure 0x1E3130EE

used by scePowerIsLowBatteryInhibitUpdateDownload

int sceSysconIsLowBatteryInhibitUpdateDownloadForDriver(unk);

sceSysconCmdReadForDriver

Version World NID
3.60 non-secure 0x299B1CE7

used by SceRtc

int sceSysconCmdReadForDriver(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
3.60 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 Syscon command
0 Power off {0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}
1 Suspend (low-power state) {0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}
2 Cold reset {0x01, 8, 1, 0}
3 ?Reset to update mode? {0xC1, 0, 2, 0}
4 ?Reset to update mode? {0xC1, 0, 2, 1}
5 Hibernate {0xC2, 0, 2, 0x5A}
16 ?? {0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}
17 Soft reset (suspend and immediately resume) {0xC0, 0, 5, type, (~mode) & 0xFF, (~mode >> 8) & 0xFF, (mode >> 16) & 0xFF}

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

sceSysconGetSomeVersionForDriver

Version World NID
3.60 non-secure 0xCBD6D8BC
int sceSysconGetSomeVersionForDriver(void);

unk_9DA2A5AB

Version World NID
3.60 non-secure 0x9DA2A5AB

used by scePowerGetBatteryLifeTime and other ScePower functions

int unk_9DA2A5AB(void);

sceSysconGetDataForDriver

Version World NID
3.60 non-secure 0x81A6060D

sceSysconGetOrSetDataForDriver

Version World NID
3.60 non-secure 0x10C9657A

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
0x1 0x270B7B0B and module_start ?? used during SysconInit
0x3 module_start ?? used during SysconInit
0x10 0xCF5B2F2F ??
0x11 0xD7BEFF8B ??
0x13 0xBA09F171 ??
0x14 0x93075DD1 ??
0x15 0x3E09A1F4 ??
0x80 module_start ?? used at SysconInit
0xB0 0x058941D7 ??
0xB2 0xDECCB2B4 ??
0xB3 0x33B5CDB3 ??
0xB4 0xF6D4DDC4 ??
0xB7 0x91EF4EC3 ??
0x100 0x145F59A4 ??
0x120 0x76272CB9 ??
0x130 module_start ?? used during SysconInit
0x131 0xF99BC858 ??
0x38A 0xA1F1B973 ??
0x3AC 0x3664E2C0 ??
0x3BC 0x2E6D97CD ??
0x480 0xD01E64FC ??
0x800 0xA2FE9BF9 ?? related to Ernie#CMD_0x0800
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 F00D and USB related
0x88A 0xA2E85DB9 Wlan/Bluetooth related
0x88B 0x5A614349 ??
0x88C 0xB872E904 ??
0x88D 0xDD16ABD9 ??
0x88E 0x7F198FA2 ?? related to Ernie#CMD_0x088E
0x88F 0x40FF3898 UsbEtherSmsc and WlanBt related
0x890 0x285594F8 ??
0x891 0x04EC7579 sceSysconCtrlLEDForDriver
0x892 0x596B17B7 ScePower related
0x893 0x2A4B0437 ScePower related
0x899 0x5CDDA14D SceHpremote related
0x89A 0x59DC5938 SceUdcd and ScePower related
0x89B 0x710A7CF0 sceSysconCtrlMsPowerForDriver
0x89C 0xB1F88B11 SceUsbServ related
0x89D 0x6F586D1A sceSysconConfigLEDForDriver?
0x89E 0x9CA6EB70 ScePower related
0x89F 0xCB41B531 ??
0x8A0 0x9070F139 ScePower related
0x8A1 0x00A65FC1 ??
0x8A2 0x0826BA07 ??
0x8C5 0x3274A925 SceUsbServ and SceUsbEtherSmsc related
0x8C6 0xDFB024C4 SceSblUpdateMgr related
0x8C7 0x87FF8041 ??
0x8C8 0x7BFA95DA ??
0x8C9 0x451C1662 ??
0x8CA 0x79074DE4 ??
0x8CB 0x7D25F6D2 ??
0x8CC 0xD2ADABCA ??
0x8CE 0x3B354824 sceSysconGetTemperatureLog
0x8CF 0x3843D657 sceSysconClearTemperatureLog
0x8D0 0xF87679EE ??
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 ??
0xA82 0x7BAFE083 ??
0x1080 0x81A6060D ??
0x1081 02EC6D55D ??
0x1310 0x351946B0 ??
0x1382 0xA4968B8C ??
0x1383 0xFCC3E8EE ??
0x1384 0x7B9B3617 ??
0x1392 0xFD65FFCB ??
0x1393 0x02350352 ??
0x1394 0x7DE84CE3 ??

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 ?? ??