Difference between revisions of "SceSblSsSmComm"
Jump to navigation
Jump to search
CelesteBlue (talk | contribs) |
CelesteBlue (talk | contribs) |
||
Line 67: | Line 67: | ||
== SceSblSmCommForKernel == | == SceSblSmCommForKernel == | ||
− | === | + | === sceSblSmCommStopSmForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
|- | |- | ||
− | | 1.69 | + | | 1.69-3.60 || 0x0631F8ED |
− | |||
− | |||
− | |||
|} | |} | ||
− | This function calls [[SceSblSsSmComm# | + | This function calls [[SceSblSsSmComm#sceSblSmCommCallFuncForKernel|sceSblSmCommCallFuncForKernel]] with <code>-1</code> as <code>command_id</code> and then calls [[SceSblSmschedProxy#sceSblSmSchedProxyWait|sceSblSmSchedProxyWait]]. |
− | <source lang="c"> | + | <source lang="c">int sceSblSmCommStopSmForKernel(int id, int result[2]);</source> |
− | int | ||
− | </source> | ||
− | === | + | === sceSblSmCommStartSmFromDataForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 94: | Line 89: | ||
|} | |} | ||
− | <source lang="c">int | + | <source lang="c">int sceSblSmCommStartSmFromDataForKernel(int priority, const char *sm_self_data, int sm_self_size, int num1, SceSblSmCommContext130 *ctx_130, int* id);</source> |
− | === | + | === sceSblSmCommStartSmFromFileForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 104: | Line 99: | ||
|} | |} | ||
− | <source lang="c">int | + | <source lang="c">int sceSblSmCommStartSmFromFileForKernel(int priority, char* sm_self_path, int num1, SceSblSmCommContext130* ctx_130, int* id);</source> |
Priority is binary: 1 = low, 0 = high. Running a high priority SM module while a low priority one is currently running will [[F00D Processor|suspend]] it. | Priority is binary: 1 = low, 0 = high. Running a high priority SM module while a low priority one is currently running will [[F00D Processor|suspend]] it. | ||
− | === | + | === sceSblSmCommCallFuncForKernel === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version !! NID | ! Version !! NID | ||
− | + | | 1.69-3.60 || 0xDB9FC204 | |
− | | 1.69 | ||
− | |||
− | |||
|} | |} | ||
Line 145: | Line 137: | ||
} SceSblSmCommMsifData; /* size = 0x20 */ | } SceSblSmCommMsifData; /* size = 0x20 */ | ||
− | int | + | int sceSblSmCommCallFuncForKernel(int id, int service_id, int *f00d_resp, void *data, int size); |
</source> | </source> | ||
== SceSblSsSmComm == | == SceSblSsSmComm == | ||
+ | |||
+ | This library is present on 1.69 but is not present on 3.60. | ||
=== sceSblSmCommStopSm === | === sceSblSmCommStopSm === | ||
Line 173: | Line 167: | ||
| 1.69 || 0xDB9FC204 | | 1.69 || 0xDB9FC204 | ||
|} | |} | ||
+ | |||
[[Category:Modules]] | [[Category:Modules]] | ||
[[Category:Kernel]] | [[Category:Kernel]] |
Revision as of 21:15, 10 January 2019
SceSblSsSmComm is a kernel module that is primary responsible for sending F00D commands.
Module
Known NIDs
Version | Name | World | Privilege | NID |
---|---|---|---|---|
1.69 | SceSblSsSmComm | Non-secure | Kernel | 0xA6A2A041 |
3.57 | SceSblSsSmComm | Non-secure | Kernel | 0x301EDC39 |
3.60 | SceSblSsSmComm | Non-secure | Kernel | 0xBB4B5D92 |
Libraries
Known NIDs
Version | Name | World | Visibility | NID |
---|---|---|---|---|
1.69-3.60 | SceSblSmCommForKernel | Non-secure | Kernel | 0xCD3C89B6 |
1.69 | SceSblSsSmComm | Non-secure | User | 0xD8DC7847 |
Types
/* example of caller_self_info
char data[0x90] =
{
0x01,0x00,0x00,0x00, 0x00,0x00,0x08,0x28, // max program-authority-id
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x80,0x00,0x00,0x00, 0xC0,0x00,0xF0,0x00,
0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x80,0x09,0x80,0x03, 0x00,0x00,0xC3,0x00,
0x00,0x00,0x80,0x09, 0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
}; */
typedef struct SceSblSmCommContext130 // size is 0x130 as its name indicates
{
uint32_t unk_0;
uint32_t self_type; // kernel = 0, user = 1, SM = 2
SceSelfInfo caller_self_info; // can be obtained with sceKernelGetSelfInfoForKernel
SceSelfInfo called_self_info; // set by F00D in F00D SceSblSmCommContext130 response
uint32_t pathId; // can be obtained with sceSblACMgrGetPathIdForKernel or sceIoGetPathIdExForDriver
uint32_t unk_12C;
} SceSblSmCommContext130;
SceSblSmCommForKernel
sceSblSmCommStopSmForKernel
Version | NID |
---|---|
1.69-3.60 | 0x0631F8ED |
This function calls sceSblSmCommCallFuncForKernel with -1
as command_id
and then calls sceSblSmSchedProxyWait.
int sceSblSmCommStopSmForKernel(int id, int result[2]);
sceSblSmCommStartSmFromDataForKernel
Version | NID |
---|---|
1.69 | 0x992BB9DB |
3.60 | 0x039C73B1 |
int sceSblSmCommStartSmFromDataForKernel(int priority, const char *sm_self_data, int sm_self_size, int num1, SceSblSmCommContext130 *ctx_130, int* id);
sceSblSmCommStartSmFromFileForKernel
Version | NID |
---|---|
3.60 | 0x7863A0CC |
int sceSblSmCommStartSmFromFileForKernel(int priority, char* sm_self_path, int num1, SceSblSmCommContext130* ctx_130, int* id);
Priority is binary: 1 = low, 0 = high. Running a high priority SM module while a low priority one is currently running will suspend it.
sceSblSmCommCallFuncForKernel
Version | NID | 1.69-3.60 | 0xDB9FC204 |
---|
sm_comm_context is described more here
f00d_resp comes from Request Buffer from offset 0x08
gc_param is generated by game card and has value 0x01
typedef struct SceSblSmCommGcData {
int unk_0; // 1
int gc_command;
char gc_buffer[0x800];
int gc_param;
int length;
int unk_810; // 0
} SceSblSmCommGcData; /* size = 0x814 */
typedef struct SceSblSmCommMsifData {
unsigned int unk00;
unsigned int unk04;
unsigned int unk08;
unsigned int unk0C;
unsigned int unk10;
unsigned int unk14;
unsigned int unk18;
unsigned int unk1C;
} SceSblSmCommMsifData; /* size = 0x20 */
int sceSblSmCommCallFuncForKernel(int id, int service_id, int *f00d_resp, void *data, int size);
SceSblSsSmComm
This library is present on 1.69 but is not present on 3.60.
sceSblSmCommStopSm
Version | NID |
---|---|
1.69 | 0x631F8ED |
sceSblSmCommStartSm_
Version | NID |
---|---|
1.69 | 0x992BB9DB |
sceSblSmCommCallFunc
Version | NID |
---|---|
1.69 | 0xDB9FC204 |