|
|
Line 132: |
Line 132: |
|
| |
|
| <source lang="c"> | | <source lang="c"> |
| | struct smc_12E_data_t |
| | { |
| | int status0; |
| | SmStatus status1; |
| | }; |
| | |
| int sceSblSmSchedProxyWaitForKernel(SmOperationId id, smc_12E_data_t* result); | | int sceSblSmSchedProxyWaitForKernel(SmOperationId id, smc_12E_data_t* result); |
| </source> | | </source> |
Module
Known NIDs
Version |
Name |
World |
Privilege |
NID
|
1.69 |
SceSblSmschedProxy |
Non-secure |
Kernel |
0xF3BC3013
|
3.60 |
SceSblSmschedProxy |
Non-secure |
Kernel |
0x254B02B3
|
Libraries
Known NIDs
Types
typedef unsigned int SmOperationId;
#define CRY_INTERRUPT_INDEX0 0
#define CRY_INTERRUPT_INDEX1 1
#define CRY_INTERRUPT_INDEX2 2
#define CRY_INTERRUPT_INDEX3 3
#define F00D_FIFO_REGISTER_INDEX1 1
#define F00D_FIFO_REGISTER_INDEX2 2
#define F00D_FIFO_REGISTER_INDEX3 3
enum SmStatus
{
SM_STATUS_1 = 0x1,
SM_STATUS_2 = 0x2,
SM_STATUS_3 = 0x3,
SM_STATUS_4 = 0x4,
SM_STATUS_5 = 0x5,
SM_STATUS_6 = 0x6,
SM_STATUS_7 = 0x7,
SM_STATUS_8 = 0x8,
SM_STATUS_9 = 0x9,
SM_STATUS_A = 0xA,
SM_STATUS_B = 0xB,
SM_STATUS_C = 0xC,
};
enum class F00D_cmd_index
{
F00D_CMD_B_INDEX = 0,
F00D_CMD_C_INDEX = 1,
F00D_CMD_D_INDEX = 2,
F00D_CMD_E_INDEX = 3,
F00D_CMD_F_INDEX = 4,
};
typedef struct SceSblSmschedCallFuncCommand {
unsigned int size;
unsigned int service_id;
unsigned int response;
unsigned int unk2;
unsigned int padding[(0x40 - 0x10) / 4];
unsigned int data[0];
} SceSblSmschedCallFuncCommand; /* size = 0X40 + ... */
SceSblSmSchedProxyForKernel
sceSblSmSchedProxyInitializeForKernel
Version |
NID
|
3.60 |
0xA488D604
|
calls module_start if cpuid is 0
int sceSblSmSchedProxyInitializeForKernel();
sceSblSmSchedProxyCreateSmOperationForKernel
Version |
NID
|
1.05 |
0x1916509B
|
3.60 |
0x1916509B
|
executes smc 12D call
- priority - first smc arg
- sm_self_data_paddr - second smc arg
- num_pairs - third smc arg
struct sm_invoke_data_block_input
{
int unk0;
int unk4;
int unk8;
int unkC;
};
// paddr = Physical address of the buffer containing the result of ksceKernelGetPaddrList (req.output_buffer)
// num_pairs = number of (paddr, size) pairs in the buffer returned by ksceKernelGetPaddrList (ret_count)
int sceSblSmSchedProxyCreateSmOperationForKernel(int priority, void *sm_self_data_paddr, unsigned int num_pairs, sm_invoke_data_block_input *invoke_input, SceSblSmCommContext130 *ctx, SmOperationId *id);
sceSblSmSchedProxyWaitForKernel
Version |
NID
|
1.05 |
0xF35EFC1A
|
3.60 |
0xF35EFC1A
|
executes smc 12E call
struct smc_12E_data_t
{
int status0;
SmStatus status1;
};
int sceSblSmSchedProxyWaitForKernel(SmOperationId id, smc_12E_data_t* result);
sceSblSmSchedProxyGetStatusForKernel
Version |
NID
|
1.05 |
0x27EB92F1
|
3.60 |
0x27EB92F1
|
executes smc 12F call
struct smc_12F_data_t
{
int status0;
SmStatus status1;
};
int sceSblSmSchedProxyGetStatusForKernel(int id, smc_12F_data_t* status);
sceSblSmSchedProxyChangeF00DStatusForKernel
Version |
NID
|
3.60 |
0xDE4EAC3C
|
executes smc 130 call
int sceSblSmSchedProxyChangeF00DStatusForKernel(SmOperationId id);
sceSblSmSchedProxyNotImplementedMaybeSMC0x131ForKernel
Version |
NID
|
3.60 |
0x984EC9D1
|
returns 0x800F0425
sceSblSmSchedProxyNotImplementedMaybeSMC0x132ForKernel
Version |
NID
|
3.60 |
0x1DFC8624
|
returns 0x800F0425
sceSblSmSchedProxySetCommandF00DRegisterForKernel
Version |
NID
|
3.60 |
0x723B382F
|
Executes smc 133 call.
Called by sceSblSmCommCallFunc.
- f00d_fifo_register_index - second smc arg
- cmd_paddr - third smc arg
// f00d_cmd_fifo_idx can be 1, 2 or 3
int sceSblSmSchedProxySetCommandF00DRegisterForKernel(SmOperationId id, int f00d_fifo_register_index, SceSblSmschedCallFuncCommand* cmd_paddr);
sceSblSmSchedProxyGetCommandF00DRegisterForKernel
Version |
NID
|
3.60 |
0xF70C04EC
|
executes smc 134 call
int sceSblSmSchedProxyGetCommandF00DRegisterForKernel(SmOperationId id, int f00d_fifo_register_index, SceSblSmschedCallFuncCommand** cmd_paddr);
sceSblSmSchedProxyGetUnknownF00DRegisterForKernel
Version |
NID
|
3.60 |
0x3CE17233
|
executes smc 135 call
int sceSblSmSchedProxyGetUnknownF00DRegisterForKernel(SmOperationId id, int f00d_fifo_register_index, int f00d_fifo_register_value);
sceSblSmSchedProxySetStatusCodeF00DRegisterForKernel
Version |
NID
|
3.60 |
0x15B0E4DF
|
executes smc 136 call
Called by SceSblAuthMgr.
int sceSblSmSchedProxySetStatusCodeF00DRegisterForKernel(SmOperationId id, int f00d_fifo_register_index, int status_code);
sceSblSmSchedProxyGetStatusCodeF00DRegisterForKernel
Version |
NID
|
3.60 |
0x973A4A7D
|
executes smc 137 call
Called by SceSblAuthMgr.
int sceSblSmSchedProxyGetStatusCodeF00DRegisterForKernel(SmOperationId id, int f00d_fifo_register_index, int* status_code);
sceSblSmSchedProxyEnableCry2ArmInterruptForKernel
Version |
NID
|
3.60 |
0x8B84AC2A
|
executes smc 138 call
Called by SceSblAuthMgr.
- smcArg1_funcArg1 - second smc arg
typedef int smc_138_callback(SmOperationId id, int intr_index, int arg2, int arg3, int arg4);
int sceSblSmSchedProxyEnableCry2ArmInterruptForKernel(SmOperationId id, int intr_index, smc_138_callback *cb, int func_arg2);
sceSblSmSchedProxyDisableCry2ArmInterruptForKernel
Version |
NID
|
3.60 |
0x85EDA5FC
|
executes smc 139 call
Called by SceSblAuthMgr.
int sceSblSmSchedProxyDisableCry2ArmInterruptForKernel(SmOperationId id, int intr_index);
sceSblSmSchedProxyUninitializeForKernel
Version |
NID
|
3.60 |
0x33A3A1E2
|
executes smc 13B call
only excutes if cpuid is 0
int sceSblSmSchedProxyUninitializeForKernel();
sceSblSmSchedProxyExecuteF00DCommandForKernel
Version |
NID
|
3.60 |
0x7894B6F0
|
executes smc 13C call
int sceSblSmSchedProxyExecuteF00DCommandForKernel(F00D_cmd_index cmd_index, int unused1, int unused2, int unused3);
This function is called by two modules:
SceSblSsMgr just before PSVita entering suspend mode:
sceSblSmSchedProxyExecuteF00DCommandForKernel(4, 0, 0, 0);
SceSdif at init (at PSVita boot and maybe called after PSVita resume):
sceSblSmSchedProxyExecuteF00DCommandForKernel(3, 0, 0, 0);