fs: Add support for setting priority through IPC context [5.0.0+]

This commit is contained in:
fincs 2019-09-21 03:31:08 +02:00
parent 8a0aef8824
commit 62d795a3c6
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60
2 changed files with 18 additions and 0 deletions

View File

@ -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);

View File

@ -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);