From 62d795a3c6c1722859c5535ccc759b57603c0f1f Mon Sep 17 00:00:00 2001 From: fincs Date: Sat, 21 Sep 2019 03:31:08 +0200 Subject: [PATCH] fs: Add support for setting priority through IPC context [5.0.0+] --- nx/include/switch/services/fs.h | 9 +++++++++ nx/source/services/fs.c | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/nx/include/switch/services/fs.h b/nx/include/switch/services/fs.h index 3d706054..084d4939 100644 --- a/nx/include/switch/services/fs.h +++ b/nx/include/switch/services/fs.h @@ -262,11 +262,20 @@ typedef enum { FsBisStorageId_SystemProperPartition = 33, } FsBisStorageId; +typedef enum { + FsPriority_Normal = 0, + FsPriority_Realtime = 1, + FsPriority_Low = 2, + FsPriority_Background = 3, +} FsPriority; + Result fsInitialize(void); void fsExit(void); Service* fsGetServiceSession(void); +void fsSetPriority(FsPriority prio); + Result fsOpenBisStorage(FsStorage* out, FsBisStorageId partitionId); Result fsOpenBisFileSystem(FsFileSystem* out, FsBisStorageId partitionId, const char* string); diff --git a/nx/source/services/fs.c b/nx/source/services/fs.c index a7ca45dd..8a70e7c3 100644 --- a/nx/source/services/fs.c +++ b/nx/source/services/fs.c @@ -18,6 +18,8 @@ static Mutex g_fsSessionMutex; static CondVar g_fsSessionCondVar; static bool g_fsSessionWaiting; +static __thread u32 g_fsPriority = FsPriority_Normal; + static int _fsGetSessionSlot(void) { mutexLock(&g_fsSessionMutex); @@ -78,6 +80,7 @@ NX_INLINE Result _fsObjectDispatchImpl( serviceAssumeDomain(s); } + disp.context = g_fsPriority; Result rc = serviceDispatchImpl(s, request_id, in_data, in_data_size, out_data, out_data_size, disp); if (slot >= 0) { @@ -150,6 +153,12 @@ Service* fsGetServiceSession(void) { return &g_fsSrv; } +void fsSetPriority(FsPriority prio) +{ + if (hosversionAtLeast(5,0,0)) + g_fsPriority = prio; +} + Result fsOpenBisStorage(FsStorage* out, FsBisStorageId partitionId) { IpcCommand c; ipcInitialize(&c);