aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/Ipc
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-05-04 00:41:29 -0300
committerGitHub <noreply@github.com>2020-05-04 13:41:29 +1000
commit15d1cc806b1b978bab83d8bb426a124d9f0f788c (patch)
tree4fd10fdd11412bafcf3022e7cc4eb21179eef1b1 /Ryujinx.HLE/HOS/Kernel/Ipc
parentcd48576f5846aa89a36bfc833e9de5dde9627aed (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.cs22
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KClientSession.cs10
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KLightClientSession.cs4
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KLightServerSession.cs4
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KLightSession.cs6
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KPort.cs14
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs18
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs94
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Ipc/KSession.cs6
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;
}