Use IPC helpers for fs

This commit is contained in:
Lectem 2015-09-09 15:06:21 -04:00
parent d074d819ff
commit 5e6440b9b7

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h> #include <3ds/svc.h>
#include <3ds/srv.h> #include <3ds/srv.h>
#include <3ds/services/fs.h> #include <3ds/services/fs.h>
#include <3ds/ipc.h>
/*! @internal /*! @internal
* *
@ -105,8 +106,8 @@ FSUSER_Initialize(Handle handle)
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08010002; cmdbuf[0] = IPC_MakeHeader(0x801,0,2); // 0x8010002
cmdbuf[1] = 0x20; cmdbuf[1] = IPC_Desc_CurProcessHandle();
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(handle))) if((ret = svcSendSyncRequest(handle)))
@ -165,7 +166,7 @@ FSUSER_OpenFile(Handle *out,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080201C2; cmdbuf[0] = IPC_MakeHeader(0x802,7,2); // 0x80201C2
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow; cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh; cmdbuf[3] = archive.handleHigh;
@ -173,7 +174,7 @@ FSUSER_OpenFile(Handle *out,
cmdbuf[5] = fileLowPath.size; cmdbuf[5] = fileLowPath.size;
cmdbuf[6] = openFlags; cmdbuf[6] = openFlags;
cmdbuf[7] = attributes; cmdbuf[7] = attributes;
cmdbuf[8] = (fileLowPath.size << 14) | 0x2; cmdbuf[8] = IPC_Desc_StaticBuffer(fileLowPath.size,0);
cmdbuf[9] = (u32)fileLowPath.data; cmdbuf[9] = (u32)fileLowPath.data;
Result ret = 0; Result ret = 0;
@ -239,7 +240,7 @@ FSUSER_OpenFileDirectly(Handle *out,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[ 0] = 0x08030204; cmdbuf[ 0] = IPC_MakeHeader(0x803,8,4); // 0x8030204
cmdbuf[ 1] = 0; cmdbuf[ 1] = 0;
cmdbuf[ 2] = archive.id; cmdbuf[ 2] = archive.id;
cmdbuf[ 3] = archive.lowPath.type; cmdbuf[ 3] = archive.lowPath.type;
@ -248,9 +249,9 @@ FSUSER_OpenFileDirectly(Handle *out,
cmdbuf[ 6] = fileLowPath.size; cmdbuf[ 6] = fileLowPath.size;
cmdbuf[ 7] = openFlags; cmdbuf[ 7] = openFlags;
cmdbuf[ 8] = attributes; cmdbuf[ 8] = attributes;
cmdbuf[ 9] = (archive.lowPath.size << 14) | 0x802; cmdbuf[ 9] = IPC_Desc_StaticBuffer(archive.lowPath.size,2);
cmdbuf[10] = (u32)archive.lowPath.data; cmdbuf[10] = (u32)archive.lowPath.data;
cmdbuf[11] = (fileLowPath.size << 14) | 0x2; cmdbuf[11] = IPC_Desc_StaticBuffer(fileLowPath.size,0);
cmdbuf[12] = (u32)fileLowPath.data; cmdbuf[12] = (u32)fileLowPath.data;
Result ret = 0; Result ret = 0;
@ -298,13 +299,13 @@ FSUSER_DeleteFile(FS_archive archive,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08040142; cmdbuf[0] = IPC_MakeHeader(0x804,5,2); // 0x8040142
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow; cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh; cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = fileLowPath.type; cmdbuf[4] = fileLowPath.type;
cmdbuf[5] = fileLowPath.size; cmdbuf[5] = fileLowPath.size;
cmdbuf[6] = (fileLowPath.size << 14) | 0x2; cmdbuf[6] = IPC_Desc_StaticBuffer(fileLowPath.size ,0);
cmdbuf[7] = (u32)fileLowPath.data; cmdbuf[7] = (u32)fileLowPath.data;
Result ret = 0; Result ret = 0;
@ -359,7 +360,7 @@ FSUSER_RenameFile(FS_archive srcArchive,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08050244; cmdbuf[0] = IPC_MakeHeader(0x805,9,4); // 0x8050244
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = srcArchive.handleLow; cmdbuf[2] = srcArchive.handleLow;
cmdbuf[3] = srcArchive.handleHigh; cmdbuf[3] = srcArchive.handleHigh;
@ -369,9 +370,9 @@ FSUSER_RenameFile(FS_archive srcArchive,
cmdbuf[7] = destArchive.handleHigh; cmdbuf[7] = destArchive.handleHigh;
cmdbuf[8] = destFileLowPath.type; cmdbuf[8] = destFileLowPath.type;
cmdbuf[9] = destFileLowPath.size; cmdbuf[9] = destFileLowPath.size;
cmdbuf[10] = (srcFileLowPath.size << 14) | 0x402; cmdbuf[10] = IPC_Desc_StaticBuffer(srcFileLowPath.size,1);
cmdbuf[11] = (u32)srcFileLowPath.data; cmdbuf[11] = (u32)srcFileLowPath.data;
cmdbuf[12] = (destFileLowPath.size << 14) | 0x802; cmdbuf[12] = IPC_Desc_StaticBuffer(destFileLowPath.size,2);
cmdbuf[13] = (u32)destFileLowPath.data; cmdbuf[13] = (u32)destFileLowPath.data;
Result ret = 0; Result ret = 0;
@ -416,13 +417,13 @@ FSUSER_DeleteDirectory(FS_archive archive,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08060142; cmdbuf[0] = IPC_MakeHeader(0x806,5,2); // 0x8060142
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow; cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh; cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = dirLowPath.type; cmdbuf[4] = dirLowPath.type;
cmdbuf[5] = dirLowPath.size; cmdbuf[5] = dirLowPath.size;
cmdbuf[6] = (dirLowPath.size << 14) | 0x2; cmdbuf[6] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[7] = (u32)dirLowPath.data; cmdbuf[7] = (u32)dirLowPath.data;
Result ret = 0; Result ret = 0;
@ -467,13 +468,13 @@ FSUSER_DeleteDirectoryRecursively(FS_archive archive,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08070142; cmdbuf[0] = IPC_MakeHeader(0x807,5,2); // 0x8070142
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow; cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh; cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = dirLowPath.type; cmdbuf[4] = dirLowPath.type;
cmdbuf[5] = dirLowPath.size; cmdbuf[5] = dirLowPath.size;
cmdbuf[6] = (dirLowPath.size << 14) | 0x2; cmdbuf[6] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[7] = (u32)dirLowPath.data; cmdbuf[7] = (u32)dirLowPath.data;
Result ret = 0; Result ret = 0;
@ -523,7 +524,7 @@ FSUSER_CreateFile(FS_archive archive,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08080202; cmdbuf[0] = IPC_MakeHeader(0x808,8,2); // 0x8080202
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow; cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh; cmdbuf[3] = archive.handleHigh;
@ -532,7 +533,7 @@ FSUSER_CreateFile(FS_archive archive,
cmdbuf[6] = 0; cmdbuf[6] = 0;
cmdbuf[7] = fileSize; cmdbuf[7] = fileSize;
cmdbuf[8] = 0; cmdbuf[8] = 0;
cmdbuf[9] = (fileLowPath.size << 14) | 0x2; cmdbuf[9] = IPC_Desc_StaticBuffer(fileLowPath.size,0);
cmdbuf[10] = (u32)fileLowPath.data; cmdbuf[10] = (u32)fileLowPath.data;
Result ret = 0; Result ret = 0;
@ -578,14 +579,14 @@ FSUSER_CreateDirectory(FS_archive archive,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08090182; cmdbuf[0] = IPC_MakeHeader(0x809,6,2); // 0x8090182
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow; cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh; cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = dirLowPath.type; cmdbuf[4] = dirLowPath.type;
cmdbuf[5] = dirLowPath.size; cmdbuf[5] = dirLowPath.size;
cmdbuf[6] = 0; cmdbuf[6] = 0;
cmdbuf[7] = (dirLowPath.size << 14) | 0x2; cmdbuf[7] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[8] = (u32)dirLowPath.data; cmdbuf[8] = (u32)dirLowPath.data;
Result ret = 0; Result ret = 0;
@ -640,7 +641,7 @@ FSUSER_RenameDirectory(FS_archive srcArchive,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080A0244; cmdbuf[0] = IPC_MakeHeader(0x80A,9,4); // 0x80A0244
cmdbuf[1] = 0; cmdbuf[1] = 0;
cmdbuf[2] = srcArchive.handleLow; cmdbuf[2] = srcArchive.handleLow;
cmdbuf[3] = srcArchive.handleHigh; cmdbuf[3] = srcArchive.handleHigh;
@ -650,9 +651,9 @@ FSUSER_RenameDirectory(FS_archive srcArchive,
cmdbuf[7] = destArchive.handleHigh; cmdbuf[7] = destArchive.handleHigh;
cmdbuf[8] = destDirLowPath.type; cmdbuf[8] = destDirLowPath.type;
cmdbuf[9] = destDirLowPath.size; cmdbuf[9] = destDirLowPath.size;
cmdbuf[10] = (srcDirLowPath.size << 14) | 0x402; cmdbuf[10] = IPC_Desc_StaticBuffer(srcDirLowPath.size,1);
cmdbuf[11] = (u32)srcDirLowPath.data; cmdbuf[11] = (u32)srcDirLowPath.data;
cmdbuf[12] = (destDirLowPath.size << 14) | 0x802; cmdbuf[12] = IPC_Desc_StaticBuffer(destDirLowPath.size,2);
cmdbuf[13] = (u32)destDirLowPath.data; cmdbuf[13] = (u32)destDirLowPath.data;
Result ret = 0; Result ret = 0;
@ -699,12 +700,12 @@ FSUSER_OpenDirectory(Handle *out,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080B0102; cmdbuf[0] = IPC_MakeHeader(0x80B,4,2); // 0x80B0102
cmdbuf[1] = archive.handleLow; cmdbuf[1] = archive.handleLow;
cmdbuf[2] = archive.handleHigh; cmdbuf[2] = archive.handleHigh;
cmdbuf[3] = dirLowPath.type; cmdbuf[3] = dirLowPath.type;
cmdbuf[4] = dirLowPath.size; cmdbuf[4] = dirLowPath.size;
cmdbuf[5] = (dirLowPath.size << 14) | 0x2; cmdbuf[5] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[6] = (u32)dirLowPath.data; cmdbuf[6] = (u32)dirLowPath.data;
Result ret = 0; Result ret = 0;
@ -753,11 +754,11 @@ FSUSER_OpenArchive(FS_archive *archive)
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080C00C2; cmdbuf[0] = IPC_MakeHeader(0x80C,3,2); // 0x80C00C2
cmdbuf[1] = archive->id; cmdbuf[1] = archive->id;
cmdbuf[2] = archive->lowPath.type; cmdbuf[2] = archive->lowPath.type;
cmdbuf[3] = archive->lowPath.size; cmdbuf[3] = archive->lowPath.size;
cmdbuf[4] = (archive->lowPath.size << 14) | 0x2; cmdbuf[4] = IPC_Desc_StaticBuffer(archive->lowPath.size,0);
cmdbuf[5] = (u32)archive->lowPath.data; cmdbuf[5] = (u32)archive->lowPath.data;
Result ret = 0; Result ret = 0;
@ -802,7 +803,7 @@ FSUSER_CloseArchive(FS_archive *archive)
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080E0080; cmdbuf[0] = IPC_MakeHeader(0x80E,2,0); // 0x80E0080
cmdbuf[1] = archive->handleLow; cmdbuf[1] = archive->handleLow;
cmdbuf[2] = archive->handleHigh; cmdbuf[2] = archive->handleHigh;
@ -849,7 +850,7 @@ FSUSER_GetSdmcArchiveResource(u32 *sectorSize,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08140000; cmdbuf[0] = IPC_MakeHeader(0x814,0,0); // 0x8140000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle))) if((ret = svcSendSyncRequest(fsuHandle)))
@ -906,7 +907,7 @@ FSUSER_GetNandArchiveResource(u32 *sectorSize,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08150000; cmdbuf[0] = IPC_MakeHeader(0x815,0,0); // 0x8150000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle))) if((ret = svcSendSyncRequest(fsuHandle)))
@ -954,7 +955,7 @@ FSUSER_IsSdmcDetected(u8 *detected)
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08170000; cmdbuf[0] = IPC_MakeHeader(0x817,0,0); // 0x8170000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle))) if((ret = svcSendSyncRequest(fsuHandle)))
@ -992,7 +993,7 @@ FSUSER_GetMediaType(u8* mediatype)
{ {
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08680000; cmdbuf[0] = IPC_MakeHeader(0x868,0,0); // 0x8680000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle))) if((ret = svcSendSyncRequest(fsuHandle)))
@ -1031,7 +1032,7 @@ FSUSER_IsSdmcWritable(u8 *writable)
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08180000; cmdbuf[0] = IPC_MakeHeader(0x818,0,0); // 0x8180000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle))) if((ret = svcSendSyncRequest(fsuHandle)))
@ -1069,7 +1070,7 @@ FSFILE_Close(Handle handle)
{ {
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08080000; cmdbuf[0] = IPC_MakeHeader(0x808,0,0); // 0x8080000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(handle))) if((ret = svcSendSyncRequest(handle)))
@ -1121,11 +1122,11 @@ FSFILE_Read(Handle handle,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080200C2; cmdbuf[0] = IPC_MakeHeader(0x802,3,2); // 0x80200C2
cmdbuf[1] = (u32)offset; cmdbuf[1] = (u32)offset;
cmdbuf[2] = (u32)(offset >> 32); cmdbuf[2] = (u32)(offset >> 32);
cmdbuf[3] = size; cmdbuf[3] = size;
cmdbuf[4] = (size << 4) | 0xC; cmdbuf[4] = IPC_Desc_Buffer(size,IPC_BUFFER_W);
cmdbuf[5] = (u32)buffer; cmdbuf[5] = (u32)buffer;
Result ret = 0; Result ret = 0;
@ -1189,12 +1190,12 @@ FSFILE_Write(Handle handle,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08030102; cmdbuf[0] = IPC_MakeHeader(0x803,4,2); // 0x8030102
cmdbuf[1] = (u32)offset; cmdbuf[1] = (u32)offset;
cmdbuf[2] = (u32)(offset >> 32); cmdbuf[2] = (u32)(offset >> 32);
cmdbuf[3] = size; cmdbuf[3] = size;
cmdbuf[4] = flushFlags; cmdbuf[4] = flushFlags;
cmdbuf[5] = (size << 4) | 0xA; cmdbuf[5] = IPC_Desc_Buffer(size,IPC_BUFFER_R);
cmdbuf[6] = (u32)buffer; cmdbuf[6] = (u32)buffer;
Result ret = 0; Result ret = 0;
@ -1237,7 +1238,7 @@ FSFILE_GetSize(Handle handle,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08040000; cmdbuf[0] = IPC_MakeHeader(0x804,0,0); // 0x8040000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(handle))) if((ret = svcSendSyncRequest(handle)))
@ -1279,7 +1280,7 @@ FSFILE_SetSize(Handle handle,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08050080; cmdbuf[0] = IPC_MakeHeader(0x805,2,0); // 0x8050080
cmdbuf[1] = (u32)size; cmdbuf[1] = (u32)size;
cmdbuf[2] = (u32)(size >> 32); cmdbuf[2] = (u32)(size >> 32);
@ -1320,7 +1321,7 @@ FSFILE_GetAttributes(Handle handle,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08060000; cmdbuf[0] = IPC_MakeHeader(0x806,0,0); // 0x8060000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(handle))) if((ret = svcSendSyncRequest(handle)))
@ -1361,7 +1362,7 @@ FSFILE_SetAttributes(Handle handle,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08070040; cmdbuf[0] = IPC_MakeHeader(0x807,1,0); // 0x8070040
cmdbuf[1] = attributes; cmdbuf[1] = attributes;
Result ret = 0; Result ret = 0;
@ -1397,7 +1398,7 @@ FSFILE_Flush(Handle handle)
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08090000; cmdbuf[0] = IPC_MakeHeader(0x809,0,0); // 0x8090000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(handle))) if((ret = svcSendSyncRequest(handle)))
@ -1442,9 +1443,9 @@ FSDIR_Read(Handle handle,
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08010042; cmdbuf[0] = IPC_MakeHeader(0x801,1,2); // 0x8010042
cmdbuf[1] = entryCount; cmdbuf[1] = entryCount;
cmdbuf[2] = ((entryCount*0x228) << 4) | 0xC; cmdbuf[2] = IPC_Desc_Buffer(entryCount*0x228,IPC_BUFFER_W);
cmdbuf[3] = (u32)buffer; cmdbuf[3] = (u32)buffer;
Result ret = 0; Result ret = 0;
@ -1483,7 +1484,7 @@ FSDIR_Close(Handle handle)
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08020000; cmdbuf[0] = IPC_MakeHeader(0x802,0,0); // 0x8020000
Result ret = 0; Result ret = 0;
if((ret = svcSendSyncRequest(handle))) if((ret = svcSendSyncRequest(handle)))