diff --git a/Ryujinx.HLE/HOS/Ipc/IpcHandler.cs b/Ryujinx.HLE/HOS/Ipc/IpcHandler.cs index e5d19236bb..0d123911a6 100644 --- a/Ryujinx.HLE/HOS/Ipc/IpcHandler.cs +++ b/Ryujinx.HLE/HOS/Ipc/IpcHandler.cs @@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Ipc { static class IpcHandler { - public static long IpcCall( + public static KernelResult IpcCall( Switch device, KProcess process, MemoryManager memory, @@ -100,7 +100,7 @@ namespace Ryujinx.HLE.HOS.Ipc memory.WriteBytes(cmdPtr, response.GetBytes(cmdPtr)); } - return 0; + return KernelResult.Success; } private static IpcMessage FillResponse(IpcMessage response, long result, params int[] values) diff --git a/Ryujinx.HLE/HOS/Kernel/KAddressArbiter.cs b/Ryujinx.HLE/HOS/Kernel/KAddressArbiter.cs index 2fa1ba9776..e54d0fc7c3 100644 --- a/Ryujinx.HLE/HOS/Kernel/KAddressArbiter.cs +++ b/Ryujinx.HLE/HOS/Kernel/KAddressArbiter.cs @@ -1,8 +1,6 @@ using System.Collections.Generic; using System.Linq; -using static Ryujinx.HLE.HOS.ErrorCode; - namespace Ryujinx.HLE.HOS.Kernel { class KAddressArbiter @@ -29,7 +27,7 @@ namespace Ryujinx.HLE.HOS.Kernel _system.CriticalSection.Enter(); currentThread.SignaledObj = null; - currentThread.ObjSyncResult = 0; + currentThread.ObjSyncResult = KernelResult.Success; KProcess currentProcess = _system.Scheduler.GetCurrentProcess(); @@ -87,7 +85,7 @@ namespace Ryujinx.HLE.HOS.Kernel if (result != KernelResult.Success && newOwnerThread != null) { newOwnerThread.SignaledObj = null; - newOwnerThread.ObjSyncResult = (int)result; + newOwnerThread.ObjSyncResult = result; } _system.CriticalSection.Leave(); @@ -106,7 +104,7 @@ namespace Ryujinx.HLE.HOS.Kernel KThread currentThread = _system.Scheduler.GetCurrentThread(); currentThread.SignaledObj = null; - currentThread.ObjSyncResult = (int)MakeError(ErrorModule.Kernel, KernelErr.Timeout); + currentThread.ObjSyncResult = KernelResult.TimedOut; if (currentThread.ShallBeTerminated || currentThread.SchedFlags == ThreadSchedState.TerminationPending) @@ -178,7 +176,7 @@ namespace Ryujinx.HLE.HOS.Kernel } newOwnerThread.SignaledObj = null; - newOwnerThread.ObjSyncResult = 0; + newOwnerThread.ObjSyncResult = KernelResult.Success; newOwnerThread.ReleaseAndResume(); } @@ -236,7 +234,7 @@ namespace Ryujinx.HLE.HOS.Kernel currentProcess.CpuMemory.ClearExclusive(0); requester.SignaledObj = null; - requester.ObjSyncResult = (int)MakeError(ErrorModule.Kernel, KernelErr.NoAccessPerm); + requester.ObjSyncResult = KernelResult.InvalidMemState; return null; } @@ -270,7 +268,7 @@ namespace Ryujinx.HLE.HOS.Kernel { //We now own the mutex. requester.SignaledObj = null; - requester.ObjSyncResult = 0; + requester.ObjSyncResult = KernelResult.Success; requester.ReleaseAndResume(); @@ -290,7 +288,7 @@ namespace Ryujinx.HLE.HOS.Kernel { //Invalid mutex owner. requester.SignaledObj = null; - requester.ObjSyncResult = (int)MakeError(ErrorModule.Kernel, KernelErr.InvalidHandle); + requester.ObjSyncResult = KernelResult.InvalidHandle; requester.ReleaseAndResume(); } @@ -313,7 +311,7 @@ namespace Ryujinx.HLE.HOS.Kernel } currentThread.SignaledObj = null; - currentThread.ObjSyncResult = (int)MakeError(ErrorModule.Kernel, KernelErr.Timeout); + currentThread.ObjSyncResult = KernelResult.TimedOut; if (!KernelTransfer.UserToKernelInt32(_system, address, out int currentValue)) { @@ -388,7 +386,7 @@ namespace Ryujinx.HLE.HOS.Kernel } currentThread.SignaledObj = null; - currentThread.ObjSyncResult = (int)MakeError(ErrorModule.Kernel, KernelErr.Timeout); + currentThread.ObjSyncResult = KernelResult.TimedOut; KProcess currentProcess = _system.Scheduler.GetCurrentProcess(); @@ -641,7 +639,7 @@ namespace Ryujinx.HLE.HOS.Kernel while (signaledThreads.TryDequeue(out KThread thread)) { thread.SignaledObj = null; - thread.ObjSyncResult = 0; + thread.ObjSyncResult = KernelResult.Success; thread.ReleaseAndResume(); diff --git a/Ryujinx.HLE/HOS/Kernel/KSynchronization.cs b/Ryujinx.HLE/HOS/Kernel/KSynchronization.cs index 9abf5016f1..81d6f2f908 100644 --- a/Ryujinx.HLE/HOS/Kernel/KSynchronization.cs +++ b/Ryujinx.HLE/HOS/Kernel/KSynchronization.cs @@ -65,7 +65,7 @@ namespace Ryujinx.HLE.HOS.Kernel currentThread.WaitingSync = true; currentThread.SignaledObj = null; - currentThread.ObjSyncResult = (int)result; + currentThread.ObjSyncResult = result; currentThread.Reschedule(ThreadSchedState.Paused); @@ -85,7 +85,7 @@ namespace Ryujinx.HLE.HOS.Kernel _system.CriticalSection.Enter(); - result = (KernelResult)currentThread.ObjSyncResult; + result = currentThread.ObjSyncResult; handleIndex = -1; @@ -120,7 +120,7 @@ namespace Ryujinx.HLE.HOS.Kernel if ((thread.SchedFlags & ThreadSchedState.LowMask) == ThreadSchedState.Paused) { thread.SignaledObj = syncObj; - thread.ObjSyncResult = 0; + thread.ObjSyncResult = KernelResult.Success; thread.Reschedule(ThreadSchedState.Running); } diff --git a/Ryujinx.HLE/HOS/Kernel/KThread.cs b/Ryujinx.HLE/HOS/Kernel/KThread.cs index c24ae0b16b..52568ae0c8 100644 --- a/Ryujinx.HLE/HOS/Kernel/KThread.cs +++ b/Ryujinx.HLE/HOS/Kernel/KThread.cs @@ -4,8 +4,6 @@ using System; using System.Collections.Generic; using System.Linq; -using static Ryujinx.HLE.HOS.ErrorCode; - namespace Ryujinx.HLE.HOS.Kernel { class KThread : KSynchronizationObject, IKFutureSchedulerObject @@ -48,7 +46,7 @@ namespace Ryujinx.HLE.HOS.Kernel private ThreadSchedState _forcePauseFlags; - public int ObjSyncResult { get; set; } + public KernelResult ObjSyncResult { get; set; } public int DynamicPriority { get; set; } public int CurrentCore { get; set; } @@ -113,7 +111,7 @@ namespace Ryujinx.HLE.HOS.Kernel DynamicPriority = priority; BasePriority = priority; - ObjSyncResult = 0x7201; + ObjSyncResult = KernelResult.ThreadNotStarted; _entrypoint = entrypoint; @@ -274,7 +272,7 @@ namespace Ryujinx.HLE.HOS.Kernel System.CriticalSection.Leave(); } - public long Sleep(long timeout) + public KernelResult Sleep(long timeout) { System.CriticalSection.Enter(); @@ -282,7 +280,7 @@ namespace Ryujinx.HLE.HOS.Kernel { System.CriticalSection.Leave(); - return MakeError(ErrorModule.Kernel, KernelErr.ThreadTerminating); + return KernelResult.ThreadTerminating; } SetNewSchedFlags(ThreadSchedState.Paused); @@ -553,7 +551,7 @@ namespace Ryujinx.HLE.HOS.Kernel else { SignaledObj = null; - ObjSyncResult = (int)MakeError(ErrorModule.Kernel, KernelErr.Cancelled); + ObjSyncResult = KernelResult.Cancelled; SetNewSchedFlags(ThreadSchedState.Running); @@ -1017,7 +1015,7 @@ namespace Ryujinx.HLE.HOS.Kernel { thread.MutexOwner = null; thread._preferredCoreOverride = 0; - thread.ObjSyncResult = 0xfa01; + thread.ObjSyncResult = KernelResult.InvalidState; thread.ReleaseAndResume(); } diff --git a/Ryujinx.HLE/HOS/Kernel/KernelErr.cs b/Ryujinx.HLE/HOS/Kernel/KernelErr.cs deleted file mode 100644 index e0b196f412..0000000000 --- a/Ryujinx.HLE/HOS/Kernel/KernelErr.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Ryujinx.HLE.HOS.Kernel -{ - static class KernelErr - { - public const int ThreadTerminating = 59; - public const int InvalidSize = 101; - public const int InvalidAddress = 102; - public const int OutOfMemory = 104; - public const int HandleTableFull = 105; - public const int NoAccessPerm = 106; - public const int InvalidPermission = 108; - public const int InvalidMemRange = 110; - public const int InvalidPriority = 112; - public const int InvalidCoreId = 113; - public const int InvalidHandle = 114; - public const int InvalidMaskValue = 116; - public const int Timeout = 117; - public const int Cancelled = 118; - public const int CountOutOfRange = 119; - public const int InvalidEnumValue = 120; - public const int InvalidThread = 122; - public const int InvalidState = 125; - } -} \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Kernel/KernelResult.cs b/Ryujinx.HLE/HOS/Kernel/KernelResult.cs index 9870d17549..37e7267b10 100644 --- a/Ryujinx.HLE/HOS/Kernel/KernelResult.cs +++ b/Ryujinx.HLE/HOS/Kernel/KernelResult.cs @@ -4,6 +4,7 @@ namespace Ryujinx.HLE.HOS.Kernel { Success = 0, InvalidCapability = 0x1c01, + ThreadNotStarted = 0x7201, ThreadTerminating = 0x7601, InvalidSize = 0xca01, InvalidAddress = 0xcc01, diff --git a/Ryujinx.HLE/HOS/Kernel/SvcSystem.cs b/Ryujinx.HLE/HOS/Kernel/SvcSystem.cs index 245afdc171..a7be663ffe 100644 --- a/Ryujinx.HLE/HOS/Kernel/SvcSystem.cs +++ b/Ryujinx.HLE/HOS/Kernel/SvcSystem.cs @@ -178,7 +178,7 @@ namespace Ryujinx.HLE.HOS.Kernel KThread currentThread = _system.Scheduler.GetCurrentThread(); currentThread.SignaledObj = null; - currentThread.ObjSyncResult = 0; + currentThread.ObjSyncResult = KernelResult.Success; currentThread.Reschedule(ThreadSchedState.Paused); @@ -194,7 +194,7 @@ namespace Ryujinx.HLE.HOS.Kernel _system.CriticalSection.Leave(); - return (KernelResult)currentThread.ObjSyncResult; + return currentThread.ObjSyncResult; } else { @@ -208,7 +208,7 @@ namespace Ryujinx.HLE.HOS.Kernel { HleIpcMessage ipcMessage = (HleIpcMessage)state; - ipcMessage.Thread.ObjSyncResult = (int)IpcHandler.IpcCall( + ipcMessage.Thread.ObjSyncResult = IpcHandler.IpcCall( _device, _process, _memory,