System controller
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-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
sceSysconErnieShutdownForDriver
Version |
NID
|
0.931-3.60 |
0x94AB13CC
|
#define ERNIE_SHUTDOWN_SHUTDOWN 0
#define ERNIE_SHUTDOWN_REBOOT 1
int sceSysconErnieShutdownForDriver(int mode);
sceSysconPowerCtrlKermitResetForDriver
Version |
NID
|
0.931-3.60 |
0x14B99945
|
int sceSysconPowerCtrlKermitResetForDriver(void);
sceSysconBatteryExecBLCommandForDriver
Version |
NID
|
3.60 |
0x74B2AB55
|
sceSysconBatteryReadBLCommandForDriver
Version |
NID
|
3.60 |
0x448DAFF1
|
sceSysconBatterySetBLCommandForDriver
Version |
NID
|
3.60 |
0xE4F29744
|
sceSysconBatteryStartBLModeForDriver
Version |
NID
|
3.60 |
0x2CEF078E
|
sceSysconBatteryStopBLModeForDriver
Version |
NID
|
3.60 |
0xE4AE7852
|
sceSysconBatterySWResetForDriver
Version |
NID
|
3.60 |
0x87DA378D
|
sceSysconIsLowBatteryInhibitUpdateRebootForDriver
Version |
NID
|
3.60 |
0x1A0C140F
|
used by scePowerIsLowBatteryInhibitUpdateReboot
int sceSysconIsLowBatteryInhibitUpdateRebootForDriver(unk);
sceSysconIsLowBatteryInhibitUpdateDownloadForDriver
Version |
NID
|
3.60 |
0x1E3130EE
|
used by scePowerIsLowBatteryInhibitUpdateDownload
int sceSysconIsLowBatteryInhibitUpdateDownloadForDriver(unk);
sceSysconGetManualChargeModeForDriver
Version |
NID
|
3.60 |
0x4FEC564C
|
sceSysconGetLogInfoForDriver
Version |
NID
|
3.60 |
0x701535FC
|
sceSysconLogStartForDriver
Version |
NID
|
3.60 |
0x4E55CF5E
|
sceSysconLogStartWaitingForDriver
Version |
NID
|
3.60 |
0x9C0B1E61
|
sceSysconLogReadDataForDriver
Version |
NID
|
3.60 |
0x487D97F3
|
sceSysconGetTemperatureLogForDriver
Version |
NID
|
3.60 |
0x3B354824
|
sceSysconClearTemperatureLogForDriver
Version |
NID
|
3.60 |
0x3843D657
|
sceSysconGetUsbDetStatusForDriver
Version |
NID
|
3.60 |
0xEF810687
|
sceSysconCmdReadForDriver
Version |
NID
|
3.60 |
0x299B1CE7
|
used by SceRtc
int sceSysconCmdReadForDriver(uint32_t id, void *buffer, int size);
sceSysconGetBaryonTimestampForDriver
Version |
NID
|
3.60 |
0x4D588A0A
|
A temp name was sceSysconGetTimeStampForDriver.
int sceSysconGetBaryonTimestampForDriver(char timeStamp[16]);
sceSysconWaitInitializedForDriver
Version |
NID
|
3.60 |
0x55DF1C9B
|
int sceSysconWaitInitializedForDriver(void);
sceSysconCtrlHdmiCecPowerForDriver
Version |
NID
|
3.60 |
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 |
NID
|
3.60 |
0x6E517D22
|
int sceSysconCmdSyncForDriver(SceSysconPacket *packet, int noWait);
sceSysconCtrlRMRPowerForDriver
Version |
NID
|
3.60 |
0x710A7CF0
|
Temp name was sceSysconCtrlMsPowerForDriver.
int sceSysconCtrlRMRPowerForDriver(int enable_power);
sceSysconSetPowerModeForDriver
Version |
NID
|
0.940-3.60 |
0x8A95D35C
|
Temp name was sceSysconResetDeviceForDriver.
int sceSysconSetPowerModeForDriver(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.
Real define names are like: "SCE_SYSCON_POWERMODE_MODE_STANDBY".
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}
|
sceSysconEnableHibernateIOForDriver
Version |
NID
|
0.990-3.60 |
0x4946538A
|
sceSysconCmdExecForDriver
Version |
NID
|
3.60 |
0x9ADDCA4A
|
int sceSysconCmdExecForDriver(SceSysconPacket *packet, unsigned int flags);
sceSysconCtrlSdPowerForDriver
Version |
NID
|
3.60 |
0xBE1ADE4F
|
int sceSysconCtrlSdPowerForDriver(int enable_power);
sceSysconCtrlWirelessPowerForDriver
Version |
NID
|
0.990 |
0x4FBDA504
|
3.60 |
unk
|
sceSysconCtrlWirelessPowerDownForDriver
Version |
NID
|
0.990 |
0xDF8C6D2D
|
3.60 |
unk
|
sceSysconCmdExecAsyncForDriver
Version |
NID
|
3.60 |
0xC2224E82
|
int sceSysconCmdExecAsyncForDriver(SceSysconPacket *packet, u32 flags, int (*callback)(SceSysconPacket *, void *), void *argp);
sceSysconCmdSendForDriver
Version |
NID
|
1.69-3.60 |
0xE26488B9
|
Used by SceRtc and ScePower.
int sceSysconCmdSendForDriver(uint32_t id, void *args, int size);
sceSysconVerifyConfigstorageScriptForDriver
Version |
NID
|
3.60 |
0xCC6F90A8
|
sceSysconLoadConfigstorageScriptForDriver
Version |
NID
|
3.60 |
0x89C5CFD6
|
sceSysconBeginConfigstorageTransactionForDriver
Version |
NID
|
3.60 |
0xA4968B8C
|
sceSysconCommitConfigstorageTransactionForDriver
Version |
NID
|
3.60 |
0x7B9B3617
|
sceSysconEndConfigstorageTransactionForDriver
Version |
NID
|
3.60 |
0xFCC3E8EE
|
sceSysconSetDebugHandlersForDriver
Version |
NID
|
3.60 |
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);
sceSysconGetBatteryCalibDataForDriver
Version |
NID
|
3.60 |
0x9ADC9936
|
sceSysconGetTouchpanelDeviceInfoForDriver
Version |
NID
|
0.990-3.60 |
0xF492E69E
|
sceSysconGetHardwareInfoForDriver
Version |
NID
|
0.931-3.60 |
0xCBD6D8BC
|
Return Ernie HW info.
//"hwinfo = 0x%08x, id = 0x%llx, hwtype = 0x%08x"
int sceSysconGetHardwareInfoForDriver(void);
sceSysconGetHardwareInfo2ForDriver
Version |
NID
|
3.60 |
0x965C68C3
|
typedef struct sceSysconGetHardwareInfo2ForDriverInfo {
int unk0;
int unk4;
int unk8;
int unkC;
} sceSysconGetHardwareInfo2ForDriverInfo;
int sceSysconGetHardwareInfo2ForDriver(sceSysconGetHardwareInfo2ForDriverInfo *pInfo, int a2, int a3);
sceSysconGetBaryonVersionForDriver
Version |
NID
|
0.931-3.60 |
0xFF86F4C5
|
On PSVita it is Ernie Version not Baryon Version.
int sceSysconGetBaryonVersionForDriver(void);
SceSysconForDriver_EBE3262C
Version |
NID
|
1.03-3.60 |
0xEBE3262C
|
In SceSblPostSsMgr, used just after sceSysconGetBaryonVersionForDriver.
SceSysconForDriver_D2F456DC
Version |
NID
|
1.03-3.60 |
0xD2F456DC
|
In SceSblPostSsMgr, used just after sceSysconGetBaryonVersionForDriver.
void SceSysconForDriver_D2F456DC(int *result);
sceSysconGetBatteryVersionForDriver
Version |
NID
|
0.931-3.60 |
0x68E0031E
|
Battery IC name: if HWinfo > 7 "Abby" else "Bert".
int sceSysconGetBatteryVersionForDriver(int *HWinfo, int *FWinfo, int *DFinfo);
sceSysconGetManufacturesStatusForDriver
Version |
NID
|
3.60 |
0x3E09A1F4
|
Unverified name.
unk_9DA2A5AB
Version |
NID
|
3.60 |
0x9DA2A5AB
|
used by scePowerGetBatteryLifeTime and other ScePower functions
int unk_9DA2A5AB(void);
sceSysconNvsSetRunModeForDriver
Version |
NID
|
0.931-3.60 |
0x81A6060D
|
Used by sceSblNvsReadDataForKernel and sceSblNvsWriteDataForKernel.
// mode: 0
int sceSysconNvsSetRunModeForDriver(int mode);
sceSysconNvsReadDataForDriver
Version |
NID
|
0.931-3.60 |
0xACAFA2B8
|
Used by sceSblSsNvsReadDataForKernel and sceSblSsGetNvsDataForDriver.
int sceSysconNvsReadDataForDriver(int offset, char *buffer, int size);
sceSysconNvsWriteDataForDriver
Version |
NID
|
0.931-3.60 |
0x10C9657A
|
Used by sceSblSsNvsWriteDataForKernel and sceSblSsSetNvsDataForDriver.
int sceSysconNvsWriteDataForDriver(int offset, char *buffer, int size);
sceSysconSetMultiCnPortForDriver
Version |
NID
|
0.940-3.60 |
0x8AAB6308
|
0: for JIG mode
0x10000: for normal mode
int sceSysconSetMultiCnPortForDriver(int port);
sceSysconCtrlLEDForDriver
Version |
NID
|
0.931-3.60 |
0x04EC7579
|
example values: a1: 0x40, a2: 0 (OFF), 1 (ON)
int sceSysconCtrlLEDForDriver(int a1, int a2);
?sceSysconConfigLEDForDriver?
Version |
NID
|
3.60 |
0x6F586D1A
|
sceSysconCtrlAccPowerForDriver
Version |
NID
|
0.940-3.60 |
0x8D1D97E8
|
int sceSysconCtrlAccPowerForDriver(int a1);
sceSysconCtrlDeviceResetForDriver
Version |
NID
|
0.990-3.60 |
0x40FF3898
|
sceSysconJigOpenPortForDriver
Version |
NID
|
0.940-3.60 |
0x44A173F5
|
int sceSysconJigOpenPortForDriver(void);
sceSysconJigClosePortForDriver
Version |
NID
|
0.940-3.60 |
0x483FAE05
|
int sceSysconJigClosePortForDriver(void);
sceSysconJigSetConfigForDriver
Version |
NID
|
0.940-3.60 |
0xD24BF916
|
int sceSysconJigSetConfigForDriver(char a1, char a2);
sceSysconCtrlHostOutputViaDongleForDriver
Version |
NID
|
0.990-3.60 |
0xDECCB2B4
|
int sceSysconCtrlHostOutputViaDongleForDriver(void);
receive_pm_sm_jig_msg_from_syscon
Version |
NID
|
0.940-3.60 |
0x3C80B529
|
int receive_pm_sm_jig_msg_from_syscon(unsigned int offset, unsigned int size, char *buf);
send_pm_sm_jig_msg_to_syscon
Version |
NID
|
0.940-3.60 |
0x7BFBA09E
|
send_pm_sm_stop_to_syscon
Version |
NID
|
0.990-3.60 |
0x933D813F
|
Used just after send_pm_sm_jig_msg_to_syscon or when it fails before.
int send_pm_sm_stop_to_syscon(int a1, int a2, int a3);
sceSysconIduModeSetForDriver
Version |
NID
|
3.60 |
0x956D07CB
|
sceSysconIduModeClearForDriver
Version |
NID
|
3.60 |
0x34574496
|
sceSysconShowModeSetForDriver
Version |
NID
|
3.60 |
0x6D65B70F
|
sceSysconShowModeClearForDriver
Version |
NID
|
3.60 |
0x8D7724C0
|
sceSysconIsDownLoaderModeForDriver
Version |
NID
|
3.60 |
0x9ADD60D2
|
sceSysconSetAlarmCallbackForDriver
Version |
NID
|
3.60 |
0x32418370
|
sceSysconSetLowBatteryCallbackForDriver
Version |
NID
|
3.60 |
0x3F0DB7C0
|
sceSysconSetThermalAlertCallbackForDriver
Version |
NID
|
3.60 |
0x773B8126
|
sceSysconUpdaterCalcChecksumForDriver
Version |
NID
|
3.60 |
0xD27C3D80
|
sceSysconUpdaterExecFinalizeForDriver
Version |
NID
|
3.60 |
0xC7747A63
|
sceSysconUpdaterExecProgrammingForDriver
Version |
NID
|
3.60 |
0x69AD76E4
|
sceSysconUpdaterSetRunModeForDriver
Version |
NID
|
3.60 |
0xB487C2FB
|
sceSysconUpdaterSetSegmentForDriver
Version |
NID
|
3.60 |
0x9B00BC7F
|
nvs_read_special
Version |
NID
|
1.03-3.60 |
0xEBDF88B9
|
Used in SceSblPostSsMgr to read data from NVS with pm_sm command 8. Also used in update_mgr with update_service_sm command 0xC0002.
int nvs_read_special(void *buf1, unsigned int size1, void *buf2, unsigned int size2);
nvs_write_special
Version |
NID
|
1.03-3.60 |
0x63683B9B
|
Used in SceSblPostSsMgr to write data to NVS with pm_sm service 8.
int nvs_write_special(void *buf1, unsigned int size1, void *buf2, unsigned int size2);
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
|
sceSysconGetManufacturesStatusForDriver
|
0x80
|
module_start
|
?? used at SysconInit
|
0xB0
|
0x058941D7
|
??
|
0xB2
|
0xDECCB2B4
|
sceSysconCtrlHostOutputViaDongleForDriver
|
0xB3
|
0x33B5CDB3
|
??
|
0xB4
|
0xF6D4DDC4
|
??
|
0xB7
|
0x91EF4EC3
|
??
|
0x100
|
0x145F59A4
|
??
|
0x120
|
0x76272CB9
|
??
|
0x130
|
module_start
|
?? used during SysconInit
|
0x131
|
0xF99BC858
|
??
|
0x190
|
0x8AAB6308
|
sceSysconSetMultiCnPortForDriver
|
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
|
sceSysconCtrlAccPowerForDriver. ?F00D and USB related?
|
0x88A
|
0xA2E85DB9
|
Wlan/Bluetooth related
|
0x88B
|
0x5A614349
|
??
|
0x88C
|
0xB872E904
|
??
|
0x88D
|
0xDD16ABD9
|
??
|
0x88E
|
0x7F198FA2
|
?? related to Ernie#CMD_0x088E
|
0x88F
|
0x40FF3898
|
sceSysconCtrlDeviceResetForDriver ?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
|
sceSysconCtrlRMRPowerForDriver
|
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
|
sceSysconNvsSetRunModeForDriver
|
0x1081
|
02EC6D55D
|
??
|
0x1310
|
0x351946B0
|
??
|
0x1382
|
0xA4968B8C
|
sceSysconBeginConfigstorageTransactionForDriver
|
0x1383
|
0xFCC3E8EE
|
sceSysconEndConfigstorageTransactionForDriver
|
0x1384
|
0x7B9B3617
|
sceSysconCommitConfigstorageTransactionForDriver
|
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 |
?? |
??
|