SRV: Added <7.X srv:pm
This commit is contained in:
parent
4d891e6190
commit
337eb60bae
@ -4,3 +4,7 @@ Result srvInit();
|
|||||||
Result srvExit();
|
Result srvExit();
|
||||||
Result srvRegisterClient();
|
Result srvRegisterClient();
|
||||||
Result srvGetServiceHandle(Handle* out, char* name);
|
Result srvGetServiceHandle(Handle* out, char* name);
|
||||||
|
|
||||||
|
Result srvPmInit();
|
||||||
|
Result srvRegisterProcess(u32 procid, u32 count, void *serviceaccesscontrol);
|
||||||
|
Result srvUnregisterProcess(u32 procid);
|
||||||
|
@ -31,7 +31,6 @@ extern service_list_t* __service_ptr;
|
|||||||
static Handle g_srv_handle = 0;
|
static Handle g_srv_handle = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int __name_cmp(const char* a, const char* b) {
|
static int __name_cmp(const char* a, const char* b) {
|
||||||
u32 i;
|
u32 i;
|
||||||
|
|
||||||
@ -45,7 +44,7 @@ static int __name_cmp(const char* a, const char* b) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle __get_handle_from_list(char* name) {
|
Handle __get_handle_from_list(const char* name) {
|
||||||
if((u32)__service_ptr == 0)
|
if((u32)__service_ptr == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -83,18 +82,22 @@ Result srvExit()
|
|||||||
|
|
||||||
Result srvRegisterClient()
|
Result srvRegisterClient()
|
||||||
{
|
{
|
||||||
|
Result rc = 0;
|
||||||
|
|
||||||
u32* cmdbuf = getThreadCommandBuffer();
|
u32* cmdbuf = getThreadCommandBuffer();
|
||||||
|
|
||||||
cmdbuf[0] = 0x10002;
|
cmdbuf[0] = 0x10002;
|
||||||
cmdbuf[1] = 0x20;
|
cmdbuf[1] = 0x20;
|
||||||
|
|
||||||
Result rc;
|
|
||||||
if((rc = svcSendSyncRequest(g_srv_handle)))return rc;
|
if((rc = svcSendSyncRequest(g_srv_handle)))return rc;
|
||||||
|
|
||||||
return cmdbuf[1];
|
return cmdbuf[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
Result srvGetServiceHandle(Handle* out, char* name)
|
Result srvGetServiceHandle(Handle* out, const char* name)
|
||||||
{
|
{
|
||||||
|
Result rc = 0;
|
||||||
|
|
||||||
/* Look in service-list given to us by loader. If we find find a match,
|
/* Look in service-list given to us by loader. If we find find a match,
|
||||||
we return it. */
|
we return it. */
|
||||||
Handle h = __get_handle_from_list(name);
|
Handle h = __get_handle_from_list(name);
|
||||||
@ -109,10 +112,55 @@ Result srvGetServiceHandle(Handle* out, char* name)
|
|||||||
strcpy((char*) &cmdbuf[1], name);
|
strcpy((char*) &cmdbuf[1], name);
|
||||||
cmdbuf[3] = strlen(name);
|
cmdbuf[3] = strlen(name);
|
||||||
cmdbuf[4] = 0x0;
|
cmdbuf[4] = 0x0;
|
||||||
|
|
||||||
Result rc;
|
|
||||||
if((rc = svcSendSyncRequest(g_srv_handle)))return rc;
|
if((rc = svcSendSyncRequest(g_srv_handle)))return rc;
|
||||||
|
|
||||||
*out = cmdbuf[3];
|
*out = cmdbuf[3];
|
||||||
return cmdbuf[1];
|
return cmdbuf[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Old srv:pm interface, will only work on systems where srv:pm was a port (<7.X)
|
||||||
|
Result srvPmInit()
|
||||||
|
{
|
||||||
|
Result rc = 0;
|
||||||
|
|
||||||
|
if((rc = svcConnectToPort(&g_srv_handle, "srv:pm")))return rc;
|
||||||
|
|
||||||
|
if((rc = srvRegisterClient())) {
|
||||||
|
svcCloseHandle(g_srv_handle);
|
||||||
|
g_srv_handle = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
Result srvRegisterProcess(u32 procid, u32 count, void *serviceaccesscontrol)
|
||||||
|
{
|
||||||
|
Result rc = 0;
|
||||||
|
|
||||||
|
u32 *cmdbuf = getThreadCommandBuffer();
|
||||||
|
|
||||||
|
cmdbuf[0] = 0x04030082; // <7.x
|
||||||
|
cmdbuf[1] = procid;
|
||||||
|
cmdbuf[2] = count;
|
||||||
|
cmdbuf[3] = (count << 16) | 2;
|
||||||
|
cmdbuf[4] = (u32)serviceaccesscontrol;
|
||||||
|
|
||||||
|
if((rc = svcSendSyncRequest(g_srv_handle))) return rc;
|
||||||
|
|
||||||
|
return cmdbuf[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
Result srvUnregisterProcess(u32 procid)
|
||||||
|
{
|
||||||
|
Result rc = 0;
|
||||||
|
|
||||||
|
u32 *cmdbuf = getThreadCommandBuffer();
|
||||||
|
|
||||||
|
cmdbuf[0] = 0x04040040; // <7.x
|
||||||
|
cmdbuf[1] = procid;
|
||||||
|
|
||||||
|
if((rc = svcSendSyncRequest(g_srv_handle))) return rc;
|
||||||
|
|
||||||
|
return cmdbuf[1];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user