diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-05-04 00:41:29 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-04 13:41:29 +1000 |
| commit | 15d1cc806b1b978bab83d8bb426a124d9f0f788c (patch) | |
| tree | 4fd10fdd11412bafcf3022e7cc4eb21179eef1b1 /Ryujinx.HLE/HOS/Kernel/Ipc | |
| parent | cd48576f5846aa89a36bfc833e9de5dde9627aed (diff) | |
Move kernel state out of the Horizon class (#1107)
* Move kernel state from Horizon to KernelContext
* Merge syscalls partial classes, split 32 and 64-bit variants
* Sort usings
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Ipc')
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs | 22 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs | 10 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs | 4 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs | 4 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs | 6 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs | 14 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs | 18 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs | 94 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs | 6 |
9 files changed, 88 insertions, 90 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs index 901b0222..9c542ca0 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KClientPort.cs @@ -8,19 +8,19 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { private int _sessionsCount; private int _currentCapacity; - private int _maxSessions; + private readonly int _maxSessions; - private KPort _parent; + private readonly KPort _parent; public bool IsLight => _parent.IsLight; - private object _countIncLock; + private readonly object _countIncLock; // TODO: Remove that, we need it for now to allow HLE // SM implementation to work with the new IPC system. public IpcService Service { get; set; } - public KClientPort(Horizon system, KPort parent, int maxSessions) : base(system) + public KClientPort(KernelContext context, KPort parent, int maxSessions) : base(context) { _maxSessions = maxSessions; _parent = parent; @@ -32,7 +32,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { clientSession = null; - KProcess currentProcess = System.Scheduler.GetCurrentProcess(); + KProcess currentProcess = KernelContext.Scheduler.GetCurrentProcess(); if (currentProcess.ResourceLimit != null && !currentProcess.ResourceLimit.Reserve(LimitableResource.Session, 1)) @@ -59,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc } } - KSession session = new KSession(System); + KSession session = new KSession(KernelContext); if (Service != null) { @@ -85,7 +85,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { clientSession = null; - KProcess currentProcess = System.Scheduler.GetCurrentProcess(); + KProcess currentProcess = KernelContext.Scheduler.GetCurrentProcess(); if (currentProcess.ResourceLimit != null && !currentProcess.ResourceLimit.Reserve(LimitableResource.Session, 1)) @@ -107,7 +107,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc } } - KLightSession session = new KLightSession(System); + KLightSession session = new KLightSession(KernelContext); KernelResult result = _parent.EnqueueIncomingLightSession(session.ServerSession); @@ -124,16 +124,16 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc return result; } - public new static KernelResult RemoveName(Horizon system, string name) + public new static KernelResult RemoveName(KernelContext context, string name) { - KAutoObject foundObj = FindNamedObject(system, name); + KAutoObject foundObj = FindNamedObject(context, name); if (!(foundObj is KClientPort)) { return KernelResult.NotFound; } - return KAutoObject.RemoveName(system, name); + return KAutoObject.RemoveName(context, name); } } }
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs index a5109e96..b99dd1cb 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs @@ -17,31 +17,31 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc // services implementation to work with the new IPC system. public IpcService Service { get; set; } - public KClientSession(Horizon system, KSession parent) : base(system) + public KClientSession(KernelContext context, KSession parent) : base(context) { _parent = parent; State = ChannelState.Open; - CreatorProcess = system.Scheduler.GetCurrentProcess(); + CreatorProcess = context.Scheduler.GetCurrentProcess(); CreatorProcess.IncrementReferenceCount(); } public KernelResult SendSyncRequest(ulong customCmdBuffAddr = 0, ulong customCmdBuffSize = 0) { - KThread currentThread = System.Scheduler.GetCurrentThread(); + KThread currentThread = KernelContext.Scheduler.GetCurrentThread(); KSessionRequest request = new KSessionRequest(currentThread, customCmdBuffAddr, customCmdBuffSize); - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); currentThread.SignaledObj = null; currentThread.ObjSyncResult = KernelResult.Success; KernelResult result = _parent.ServerSession.EnqueueRequest(request); - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); if (result == KernelResult.Success) { diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs index 62c352bf..27a9732b 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs @@ -4,9 +4,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { class KLightClientSession : KAutoObject { - private KLightSession _parent; + private readonly KLightSession _parent; - public KLightClientSession(Horizon system, KLightSession parent) : base(system) + public KLightClientSession(KernelContext context, KLightSession parent) : base(context) { _parent = parent; } diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs index 1ea2205d..0edbba6c 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs @@ -4,9 +4,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { class KLightServerSession : KAutoObject { - private KLightSession _parent; + private readonly KLightSession _parent; - public KLightServerSession(Horizon system, KLightSession parent) : base(system) + public KLightServerSession(KernelContext context, KLightSession parent) : base(context) { _parent = parent; } diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs index 166de065..3abb1ab0 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs @@ -7,10 +7,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc public KLightServerSession ServerSession { get; } public KLightClientSession ClientSession { get; } - public KLightSession(Horizon system) : base(system) + public KLightSession(KernelContext context) : base(context) { - ServerSession = new KLightServerSession(system, this); - ClientSession = new KLightClientSession(system, this); + ServerSession = new KLightServerSession(context, this); + ClientSession = new KLightClientSession(context, this); } } }
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs index 9d93cf7b..2f67aeae 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs @@ -13,10 +13,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc public bool IsLight { get; private set; } - public KPort(Horizon system, int maxSessions, bool isLight, long nameAddress) : base(system) + public KPort(KernelContext context, int maxSessions, bool isLight, long nameAddress) : base(context) { - ServerPort = new KServerPort(system, this); - ClientPort = new KClientPort(system, this, maxSessions); + ServerPort = new KServerPort(context, this); + ClientPort = new KClientPort(context, this, maxSessions); IsLight = isLight; _nameAddress = nameAddress; @@ -28,7 +28,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { KernelResult result; - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); if (_state == ChannelState.Open) { @@ -41,7 +41,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc result = KernelResult.PortClosed; } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return result; } @@ -50,7 +50,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { KernelResult result; - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); if (_state == ChannelState.Open) { @@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc result = KernelResult.PortClosed; } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return result; } diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs index 919df357..21a3919c 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs @@ -5,14 +5,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { class KServerPort : KSynchronizationObject { - private LinkedList<KServerSession> _incomingConnections; - private LinkedList<KLightServerSession> _lightIncomingConnections; + private readonly LinkedList<KServerSession> _incomingConnections; + private readonly LinkedList<KLightServerSession> _lightIncomingConnections; - private KPort _parent; + private readonly KPort _parent; public bool IsLight => _parent.IsLight; - public KServerPort(Horizon system, KPort parent) : base(system) + public KServerPort(KernelContext context, KPort parent) : base(context) { _parent = parent; @@ -32,7 +32,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc private void AcceptIncomingConnection<T>(LinkedList<T> list, T session) { - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); list.AddLast(session); @@ -41,7 +41,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc Signal(); } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); } public KServerSession AcceptIncomingConnection() @@ -56,9 +56,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc private T AcceptIncomingConnection<T>(LinkedList<T> list) { - T session = default(T); + T session = default; - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); if (list.Count != 0) { @@ -67,7 +67,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc list.RemoveFirst(); } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return session; } diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs index 201b0bec..70b54d05 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs @@ -177,7 +177,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc private KSessionRequest _activeRequest; - public KServerSession(Horizon system, KSession parent) : base(system) + public KServerSession(KernelContext context, KSession parent) : base(context) { _parent = parent; @@ -214,28 +214,28 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc public KernelResult Receive(ulong customCmdBuffAddr = 0, ulong customCmdBuffSize = 0) { - KThread serverThread = System.Scheduler.GetCurrentThread(); + KThread serverThread = KernelContext.Scheduler.GetCurrentThread(); KProcess serverProcess = serverThread.Owner; - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); if (_parent.ClientSession.State != ChannelState.Open) { - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return KernelResult.PortRemoteClosed; } if (_activeRequest != null || !DequeueRequest(out KSessionRequest request)) { - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return KernelResult.NotFound; } if (request.ClientThread == null) { - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return KernelResult.PortRemoteClosed; } @@ -243,7 +243,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc KThread clientThread = request.ClientThread; KProcess clientProcess = clientThread.Owner; - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); _activeRequest = request; @@ -267,7 +267,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc CloseAllHandles(serverMsg, clientHeader, serverProcess); - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); _activeRequest = null; @@ -276,7 +276,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc Signal(); } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); WakeClientThread(request, clientResult); } @@ -351,8 +351,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc for (int index = 0; index < clientHeader.CopyHandlesCount; index++) { int newHandle = 0; - - int handle = System.Device.Memory.Read<int>(clientMsg.DramAddress + offset * 4); + int handle = KernelContext.Memory.Read<int>(clientMsg.DramAddress + offset * 4); if (clientResult == KernelResult.Success && handle != 0) { @@ -367,8 +366,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc for (int index = 0; index < clientHeader.MoveHandlesCount; index++) { int newHandle = 0; - - int handle = System.Device.Memory.Read<int>(clientMsg.DramAddress + offset * 4); + int handle = KernelContext.Memory.Read<int>(clientMsg.DramAddress + offset * 4); if (handle != 0) { @@ -404,7 +402,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc for (int index = 0; index < clientHeader.PointerBuffersCount; index++) { - ulong pointerDesc = System.Device.Memory.Read<ulong>(clientMsg.DramAddress + offset * 4); + ulong pointerDesc = KernelContext.Memory.Read<ulong>(clientMsg.DramAddress + offset * 4); PointerBufferDesc descriptor = new PointerBufferDesc(pointerDesc); @@ -465,9 +463,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { ulong clientDescAddress = clientMsg.DramAddress + offset * 4; - uint descWord0 = System.Device.Memory.Read<uint>(clientDescAddress + 0); - uint descWord1 = System.Device.Memory.Read<uint>(clientDescAddress + 4); - uint descWord2 = System.Device.Memory.Read<uint>(clientDescAddress + 8); + uint descWord0 = KernelContext.Memory.Read<uint>(clientDescAddress + 0); + uint descWord1 = KernelContext.Memory.Read<uint>(clientDescAddress + 4); + uint descWord2 = KernelContext.Memory.Read<uint>(clientDescAddress + 8); bool isSendDesc = index < clientHeader.SendBuffersCount; bool isExchangeDesc = index >= clientHeader.SendBuffersCount + clientHeader.ReceiveBuffersCount; @@ -580,7 +578,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc copySrc = clientProcess.MemoryManager.GetDramAddressFromVa(copySrc); copyDst = serverProcess.MemoryManager.GetDramAddressFromVa(copyDst); - System.Device.Memory.Copy(copyDst, copySrc, copySize); + KernelContext.Memory.Copy(copyDst, copySrc, copySize); } if (clientResult != KernelResult.Success) @@ -596,14 +594,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc public KernelResult Reply(ulong customCmdBuffAddr = 0, ulong customCmdBuffSize = 0) { - KThread serverThread = System.Scheduler.GetCurrentThread(); + KThread serverThread = KernelContext.Scheduler.GetCurrentThread(); KProcess serverProcess = serverThread.Owner; - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); if (_activeRequest == null) { - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return KernelResult.InvalidState; } @@ -617,7 +615,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc Signal(); } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); KThread clientThread = request.ClientThread; KProcess clientProcess = clientThread.Owner; @@ -700,8 +698,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc } // Copy header. - System.Device.Memory.Write(clientMsg.DramAddress + 0, serverHeader.Word0); - System.Device.Memory.Write(clientMsg.DramAddress + 4, serverHeader.Word1); + KernelContext.Memory.Write(clientMsg.DramAddress + 0, serverHeader.Word0); + KernelContext.Memory.Write(clientMsg.DramAddress + 4, serverHeader.Word1); // Copy handles. uint offset; @@ -710,11 +708,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { offset = 3; - System.Device.Memory.Write(clientMsg.DramAddress + 8, serverHeader.Word2); + KernelContext.Memory.Write(clientMsg.DramAddress + 8, serverHeader.Word2); if (serverHeader.HasPid) { - System.Device.Memory.Write(clientMsg.DramAddress + offset * 4, serverProcess.Pid); + KernelContext.Memory.Write(clientMsg.DramAddress + offset * 4, serverProcess.Pid); offset += 2; } @@ -730,7 +728,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc GetCopyObjectHandle(serverThread, clientProcess, handle, out newHandle); } - System.Device.Memory.Write(clientMsg.DramAddress + offset * 4, newHandle); + KernelContext.Memory.Write(clientMsg.DramAddress + offset * 4, newHandle); offset++; } @@ -753,7 +751,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc } } - System.Device.Memory.Write(clientMsg.DramAddress + offset * 4, newHandle); + KernelContext.Memory.Write(clientMsg.DramAddress + offset * 4, newHandle); offset++; } @@ -821,9 +819,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { ulong dstDescAddress = clientMsg.DramAddress + offset * 4; - System.Device.Memory.Write(dstDescAddress + 0, 0); - System.Device.Memory.Write(dstDescAddress + 4, 0); - System.Device.Memory.Write(dstDescAddress + 8, 0); + KernelContext.Memory.Write(dstDescAddress + 0, 0); + KernelContext.Memory.Write(dstDescAddress + 4, 0); + KernelContext.Memory.Write(dstDescAddress + 8, 0); offset += 3; } @@ -857,7 +855,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc copyDst = clientProcess.MemoryManager.GetDramAddressFromVa(copyDst); copySrc = serverProcess.MemoryManager.GetDramAddressFromVa(copySrc); - System.Device.Memory.Copy(copyDst, copySrc, copySize); + KernelContext.Memory.Copy(copyDst, copySrc, copySize); } } @@ -878,16 +876,16 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc private MessageHeader GetClientMessageHeader(Message clientMsg) { - uint word0 = System.Device.Memory.Read<uint>(clientMsg.DramAddress + 0); - uint word1 = System.Device.Memory.Read<uint>(clientMsg.DramAddress + 4); - uint word2 = System.Device.Memory.Read<uint>(clientMsg.DramAddress + 8); + uint word0 = KernelContext.Memory.Read<uint>(clientMsg.DramAddress + 0); + uint word1 = KernelContext.Memory.Read<uint>(clientMsg.DramAddress + 4); + uint word2 = KernelContext.Memory.Read<uint>(clientMsg.DramAddress + 8); return new MessageHeader(word0, word1, word2); } private MessageHeader GetServerMessageHeader(Message serverMsg) { - KProcess currentProcess = System.Scheduler.GetCurrentProcess(); + KProcess currentProcess = KernelContext.Scheduler.GetCurrentProcess(); uint word0 = currentProcess.CpuMemory.Read<uint>(serverMsg.Address + 0); uint word1 = currentProcess.CpuMemory.Read<uint>(serverMsg.Address + 4); @@ -974,7 +972,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc for (int index = 0; index < recvListSize; index++) { - receiveList[index] = System.Device.Memory.Read<ulong>(recvListAddress + (ulong)index * 8); + receiveList[index] = KernelContext.Memory.Read<ulong>(recvListAddress + (ulong)index * 8); } return receiveList; @@ -1139,7 +1137,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc private IEnumerable<KSessionRequest> IterateWithRemovalOfAllRequests() { - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); if (_activeRequest != null) { @@ -1147,13 +1145,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc _activeRequest = null; - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); yield return request; } else { - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); } while (DequeueRequest(out KSessionRequest request)) @@ -1166,7 +1164,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { request = null; - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); bool hasRequest = _requests.First != null; @@ -1177,7 +1175,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc _requests.RemoveFirst(); } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); return hasRequest; } @@ -1211,11 +1209,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc } else { - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); WakeAndSetResult(request.ClientThread, result); - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); } } @@ -1225,8 +1223,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc ulong address = clientProcess.MemoryManager.GetDramAddressFromVa(request.CustomCmdBuffAddr); - System.Device.Memory.Write<ulong>(address, 0); - System.Device.Memory.Write(address + 8, (int)result); + KernelContext.Memory.Write<ulong>(address, 0); + KernelContext.Memory.Write(address + 8, (int)result); clientProcess.MemoryManager.UnborrowIpcBuffer( request.CustomCmdBuffAddr, @@ -1238,14 +1236,14 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc private void WakeServerThreads(KernelResult result) { // Wake all server threads waiting for requests. - System.CriticalSection.Enter(); + KernelContext.CriticalSection.Enter(); foreach (KThread thread in WaitingThreads) { WakeAndSetResult(thread, result); } - System.CriticalSection.Leave(); + KernelContext.CriticalSection.Leave(); } private void WakeAndSetResult(KThread thread, KernelResult result) diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs index cbf689a5..25e6eee5 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs @@ -11,10 +11,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc private bool _hasBeenInitialized; - public KSession(Horizon system) : base(system) + public KSession(KernelContext context) : base(context) { - ServerSession = new KServerSession(system, this); - ClientSession = new KClientSession(system, this); + ServerSession = new KServerSession(context, this); + ClientSession = new KClientSession(context, this); _hasBeenInitialized = true; } |
