Difference between revisions of "SceSblSmschedProxy"

From Vita Development Wiki
Jump to navigation Jump to search
Line 88: Line 88:
  
 
<source lang="C">int sceSblSmSchedProxyInitializeForKernel();</source>
 
<source lang="C">int sceSblSmSchedProxyInitializeForKernel();</source>
 
=== sceSblSmSchedProxyUninitializeForKernel ===
 
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 3.60 || 0x33A3A1E2
 
|}
 
 
executes [[SceExcpmgr|smc 13B]] call
 
 
only excutes if cpuid is 0
 
 
<source lang="C">int sceSblSmSchedProxyUninitializeForKernel();</source>
 
  
 
=== sceSblSmSchedProxyCreateSmOperationForKernel ===
 
=== sceSblSmSchedProxyCreateSmOperationForKernel ===
Line 131: Line 117:
 
// num_pairs = number of (paddr, size) pairs in the buffer returned by ksceKernelGetPaddrList (ret_count)
 
// 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);
 
int sceSblSmSchedProxyCreateSmOperationForKernel(int priority, void *sm_self_data_paddr, unsigned int num_pairs, sm_invoke_data_block_input *invoke_input, SceSblSmCommContext130 *ctx, SmOperationId *id);
 +
</source>
 +
 +
=== sceSblSmSchedProxyWaitForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 1.05 || 0xF35EFC1A
 +
|-
 +
| 3.60 || 0xF35EFC1A
 +
|}
 +
 +
executes [[SceExcpmgr|smc 12E]] call
 +
 +
<source lang="c">
 +
int sceSblSmSchedProxyWaitForKernel(SmOperationId id, smc_12E_data_t* result);
 
</source>
 
</source>
  
Line 155: Line 157:
 
</source>
 
</source>
  
=== sceSblSmSchedProxySetCommandF00DRegisterForKernel ===
+
=== sceSblSmSchedProxyChangeF00DStatusForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x723B382F
+
| 3.60 || 0xDE4EAC3C
 
|}
 
|}
  
Executes [[SceExcpmgr|smc 133]] call.
+
executes [[SceExcpmgr|smc 130]] call
  
Called by [[SceSblSsSmComm#sceSblSmCommCallFunc|sceSblSmCommCallFunc]].
+
<source lang="C">int sceSblSmSchedProxyChangeF00DStatusForKernel(SmOperationId id);</source>
  
* f00d_fifo_register_index - second smc arg
+
=== sceSblSmSchedProxyNotImplementedMaybeSMC0x131ForKernel ===
* cmd_paddr - third smc arg
+
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60 || 0x984EC9D1
 +
|}
  
<source lang="c">
+
returns 0x800F0425
// f00d_cmd_fifo_idx can be 1, 2 or 3
 
int sceSblSmSchedProxySetCommandF00DRegisterForKernel(SmOperationId id, int f00d_fifo_register_index, SceSblSmschedCallFuncCommand* cmd_paddr);
 
</source>
 
  
=== sceSblSmSchedProxyWaitForKernel ===
+
=== sceSblSmSchedProxyNotImplementedMaybeSMC0x132ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.05 || 0xF35EFC1A
+
| 3.60 || 0x1DFC8624
|-
 
| 3.60 || 0xF35EFC1A
 
 
|}
 
|}
  
executes [[SceExcpmgr|smc 12E]] call
+
returns 0x800F0425
  
<source lang="c">
+
=== sceSblSmSchedProxySetCommandF00DRegisterForKernel ===
int sceSblSmSchedProxyWaitForKernel(SmOperationId id, smc_12E_data_t* result);
 
</source>
 
 
 
=== sceSblSmSchedProxyChangeF00DStatusForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xDE4EAC3C
+
| 3.60 || 0x723B382F
 
|}
 
|}
  
executes [[SceExcpmgr|smc 130]] call
+
Executes [[SceExcpmgr|smc 133]] call.
 +
 
 +
Called by [[SceSblSsSmComm#sceSblSmCommCallFunc|sceSblSmCommCallFunc]].
 +
 
 +
* f00d_fifo_register_index - second smc arg
 +
* cmd_paddr - third smc arg
  
<source lang="C">int sceSblSmSchedProxyChangeF00DStatusForKernel(SmOperationId id);</source>
+
<source lang="c">
 +
// f00d_cmd_fifo_idx can be 1, 2 or 3
 +
int sceSblSmSchedProxySetCommandF00DRegisterForKernel(SmOperationId id, int f00d_fifo_register_index, SceSblSmschedCallFuncCommand* cmd_paddr);
 +
</source>
  
 
=== sceSblSmSchedProxyGetCommandF00DRegisterForKernel ===
 
=== sceSblSmSchedProxyGetCommandF00DRegisterForKernel ===
Line 288: Line 294:
  
 
<source lang="C">int sceSblSmSchedProxyDisableCry2ArmInterruptForKernel(SmOperationId id, int intr_index);</source>
 
<source lang="C">int sceSblSmSchedProxyDisableCry2ArmInterruptForKernel(SmOperationId id, int intr_index);</source>
 +
 +
=== sceSblSmSchedProxyUninitializeForKernel ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 3.60 || 0x33A3A1E2
 +
|}
 +
 +
executes [[SceExcpmgr|smc 13B]] call
 +
 +
only excutes if cpuid is 0
 +
 +
<source lang="C">int sceSblSmSchedProxyUninitializeForKernel();</source>
  
 
=== sceSblSmSchedProxyExecuteF00DCommandForKernel ===
 
=== sceSblSmSchedProxyExecuteF00DCommandForKernel ===
Line 308: Line 328:
 
[[SceSdif]] at [[SceSdif#init|init]] (at PSVita boot and maybe called after PSVita resume):
 
[[SceSdif]] at [[SceSdif#init|init]] (at PSVita boot and maybe called after PSVita resume):
 
<source lang="C">sceSblSmSchedProxyExecuteF00DCommandForKernel(3, 0, 0, 0);</source>
 
<source lang="C">sceSblSmSchedProxyExecuteF00DCommandForKernel(3, 0, 0, 0);</source>
 
=== sceSblSmSchedProxyNotImplementedMaybeSMC0x132ForKernel ===
 
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 3.60 || 0x1DFC8624
 
|}
 
 
returns 0x800F0425
 
 
=== sceSblSmSchedProxyNotImplementedMaybeSMC0x131ForKernel ===
 
{| class="wikitable"
 
|-
 
! Version !! NID
 
|-
 
| 3.60 || 0x984EC9D1
 
|}
 
 
returns 0x800F0425
 
  
 
[[Category:Modules]]
 
[[Category:Modules]]
 
[[Category:Kernel]]
 
[[Category:Kernel]]

Revision as of 00:06, 1 October 2018

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

Version Name World Visibility NID
1.69 SceSblSmSchedProxyForKernel Non-secure Kernel 0x15F25C84
3.60 SceSblSmSchedProxyForKernel Non-secure Kernel 0x15F25C84

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

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