#ifndef SVC_H
#define SVC_H
- u32* svc_getData(void);
+ u32* getThreadCommandBuffer(void);
+
void svc_exitProcess(void);
void svc_sleepThread(s64 ns);
Result svc_releaseMutex(Handle handle);
void APT_GetLockHandle(Handle handle, u16 flags, Handle* lockHandle)
{
- u32* svcData=svc_getData();
- svcData[0]=0x10040; //request header code
- svcData[1]=flags;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x10040; //request header code
+ cmdbuf[1]=flags;
svc_sendSyncRequest(handle); //check return value...
- if(lockHandle)*lockHandle=svcData[5];
+ if(lockHandle)*lockHandle=cmdbuf[5];
}
void APT_Initialize(Handle handle, NS_APPID appId, Handle* eventHandle1, Handle* eventHandle2)
{
- u32* svcData=svc_getData();
- svcData[0]=0x20080; //request header code
- svcData[1]=appId;
- svcData[2]=0x0;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x20080; //request header code
+ cmdbuf[1]=appId;
+ cmdbuf[2]=0x0;
svc_sendSyncRequest(handle); //check return value...
- if(eventHandle1)*eventHandle1=svcData[3]; //return to menu event ?
- if(eventHandle2)*eventHandle2=svcData[4];
+ if(eventHandle1)*eventHandle1=cmdbuf[3]; //return to menu event ?
+ if(eventHandle2)*eventHandle2=cmdbuf[4];
}
Result APT_Enable(Handle handle, u32 a)
{
- u32* svcData=svc_getData();
- svcData[0]=0x30040; //request header code
- svcData[1]=a;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x30040; //request header code
+ cmdbuf[1]=a;
svc_sendSyncRequest(handle); //check return value...
- return svcData[1];
+ return cmdbuf[1];
}
u8 APT_InquireNotification(Handle handle, u32 appID)
{
- u32* svcData=svc_getData();
- svcData[0]=0xB0040; //request header code
- svcData[1]=appID;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0xB0040; //request header code
+ cmdbuf[1]=appID;
svc_sendSyncRequest(handle); //check return value...
- return svcData[2];
+ return cmdbuf[2];
}
Result APT_PrepareToJumpToHomeMenu(Handle handle)
{
- u32* svcData=svc_getData();
- svcData[0]=0x2b0000; //request header code
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x2b0000; //request header code
svc_sendSyncRequest(handle); //check return value...
- return svcData[1];
+ return cmdbuf[1];
}
Result APT_JumpToHomeMenu(Handle handle, u32 a, u32 b, u32 c)
{
- u32* svcData=svc_getData();
- svcData[0]=0x2C0044; //request header code
- svcData[1]=a;
- svcData[2]=b;
- svcData[3]=c;
- svcData[4]=(b<<14)|2;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x2C0044; //request header code
+ cmdbuf[1]=a;
+ cmdbuf[2]=b;
+ cmdbuf[3]=c;
+ cmdbuf[4]=(b<<14)|2;
svc_sendSyncRequest(handle); //check return value...
- return svcData[1];
+ return cmdbuf[1];
}
Result APT_NotifyToWait(Handle handle, u32 a)
{
- u32* svcData=svc_getData();
- svcData[0]=0x430040; //request header code
- svcData[1]=a;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x430040; //request header code
+ cmdbuf[1]=a;
svc_sendSyncRequest(handle); //check return value...
- return svcData[1];
+ return cmdbuf[1];
}
void GSPGPU_AcquireRight(Handle handle, u8 flags)
{
- u32* svcData=svc_getData();
- svcData[0]=0x160042; //request header code
- svcData[1]=flags;
- svcData[2]=0x0;
- svcData[3]=0xffff8001;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x160042; //request header code
+ cmdbuf[1]=flags;
+ cmdbuf[2]=0x0;
+ cmdbuf[3]=0xffff8001;
svc_sendSyncRequest(handle); //check return value...
}
void GSPGPU_SetLcdForceBlack(Handle handle, u8 flags)
{
- u32* svcData=svc_getData();
- svcData[0]=0xB0040; //request header code
- svcData[1]=flags;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0xB0040; //request header code
+ cmdbuf[1]=flags;
svc_sendSyncRequest(handle); //check return value...
}
void GSPGPU_FlushDataCache(Handle handle, u8* adr, u32 size)
{
- u32* svcData=svc_getData();
- svcData[0]=0x80082; //request header code
- svcData[1]=(u32)adr;
- svcData[2]=size;
- svcData[3]=0x0;
- svcData[4]=0xffff8001;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x80082; //request header code
+ cmdbuf[1]=(u32)adr;
+ cmdbuf[2]=size;
+ cmdbuf[3]=0x0;
+ cmdbuf[4]=0xffff8001;
svc_sendSyncRequest(handle); //check return value...
}
{
if(size>0x80 || !data)return;
- u32* svcData=svc_getData();
- svcData[0]=0x10082; //request header code
- svcData[1]=regAddr;
- svcData[2]=size;
- svcData[3]=(size<<14)|2;
- svcData[4]=(u32)data;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x10082; //request header code
+ cmdbuf[1]=regAddr;
+ cmdbuf[2]=size;
+ cmdbuf[3]=(size<<14)|2;
+ cmdbuf[4]=(u32)data;
svc_sendSyncRequest(handle); //check return value...
}
{
if(size>0x80 || !data)return;
- u32* svcData=svc_getData();
- svcData[0]=0x40080; //request header code
- svcData[1]=regAddr;
- svcData[2]=size;
- svcData[0x40]=(size<<14)|2;
- svcData[0x40+1]=(u32)data;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x40080; //request header code
+ cmdbuf[1]=regAddr;
+ cmdbuf[2]=size;
+ cmdbuf[0x40]=(size<<14)|2;
+ cmdbuf[0x40+1]=(u32)data;
svc_sendSyncRequest(handle); //check return value...
}
void GSPGPU_RegisterInterruptRelayQueue(Handle handle, Handle eventHandle, u32 flags, Handle* outMemHandle, u8* threadID)
{
- u32* svcData=svc_getData();
- svcData[0]=0x130042; //request header code
- svcData[1]=flags;
- svcData[2]=0x0;
- svcData[3]=eventHandle;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x130042; //request header code
+ cmdbuf[1]=flags;
+ cmdbuf[2]=0x0;
+ cmdbuf[3]=eventHandle;
svc_sendSyncRequest(handle); //check return value...
- if(threadID)*threadID=svcData[2];
- if(outMemHandle)*outMemHandle=svcData[4];
+ if(threadID)*threadID=cmdbuf[2];
+ if(outMemHandle)*outMemHandle=cmdbuf[4];
}
Result GSPGPU_TriggerCmdReqQueue(Handle handle)
{
- u32* svcData=svc_getData();
- svcData[0]=0xC0000; //request header code
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0xC0000; //request header code
svc_sendSyncRequest(handle); //check return value...
- return svcData[0];
+ return cmdbuf[0];
}
//essentially : get commandIndex and totalCommands, calculate offset of new command, copy command and update totalCommands
void HIDUSER_GetInfo(Handle handle, Handle* outMemHandle)
{
- u32* svcData=svc_getData();
+ u32* svcData=getThreadCommandBuffer();
svcData[0]=0xa0000; //request header code
svc_sendSyncRequest(handle); //check return value...
if(outMemHandle)*outMemHandle=svcData[3];
void HIDUSER_Init(Handle handle)
{
- u32* svcData=svc_getData();
+ u32* svcData=getThreadCommandBuffer();
svcData[0]=0x110000; //request header code
svc_sendSyncRequest(handle); //check return value...
}
#include <ctr/srv.h>
#include <ctr/svc.h>
-Result srv_10002(Handle handle)
+Result srv_Initialize(Handle handle)
{
- u32* svcData=svc_getData();
- svcData[0]=0x10002; //request header code
- svcData[1]=0x20;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x10002; //request header code
+ cmdbuf[1]=0x20;
svc_sendSyncRequest(handle); //check return value...
- return svcData[1];
+ return cmdbuf[1];
}
void getSrvHandle(Handle* out)
{
u8 l=strlen(server);
if(!out || !server || l>8)return;
- u32* svcData=svc_getData();
- svcData[0]=0x50100; //request header code
- strcpy((char*)&svcData[1], server);
- svcData[3]=l;
- svcData[4]=0x0;
+ u32* cmdbuf=getThreadCommandBuffer();
+ cmdbuf[0]=0x50100; //request header code
+ strcpy((char*)&cmdbuf[1], server);
+ cmdbuf[3]=l;
+ cmdbuf[4]=0x0;
svc_sendSyncRequest(handle); //check return value...
- *out=svcData[3];
+ *out=cmdbuf[3];
}
.align 4
-.global svc_getData
-.type svc_getData, %function
-svc_getData:
+.global getThreadCommandBuffer
+.type getThreadCommandBuffer, %function
+getThreadCommandBuffer:
mrc p15, 0, r0, c13, c0, 3
add r0, #0x80
bx lr