aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Services')
-rw-r--r--Ryujinx.HLE/HOS/Services/Hid/Hid.cs11
-rw-r--r--Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs8
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/TimeManager.cs4
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/TimeSharedMemory.cs34
4 files changed, 28 insertions, 29 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Hid/Hid.cs b/Ryujinx.HLE/HOS/Services/Hid/Hid.cs
index 61a12d9e..85c811fa 100644
--- a/Ryujinx.HLE/HOS/Services/Hid/Hid.cs
+++ b/Ryujinx.HLE/HOS/Services/Hid/Hid.cs
@@ -11,6 +11,7 @@ using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad;
+using Ryujinx.HLE.HOS.Kernel.Memory;
namespace Ryujinx.HLE.HOS.Services.Hid
{
@@ -18,9 +19,9 @@ namespace Ryujinx.HLE.HOS.Services.Hid
{
private readonly Switch _device;
- private readonly ulong _hidMemoryAddress;
+ private readonly SharedMemoryStorage _storage;
- internal ref SharedMemory SharedMemory => ref _device.Memory.GetRef<SharedMemory>(_hidMemoryAddress);
+ internal ref SharedMemory SharedMemory => ref _storage.GetRef<SharedMemory>(0);
internal const int SharedMemEntryCount = 17;
@@ -48,10 +49,10 @@ namespace Ryujinx.HLE.HOS.Services.Hid
CheckTypeSizeOrThrow<SharedMemory>(Horizon.HidSize);
}
- public Hid(in Switch device, ulong sharedHidMemoryAddress)
+ internal Hid(in Switch device, SharedMemoryStorage storage)
{
- _device = device;
- _hidMemoryAddress = sharedHidMemoryAddress;
+ _device = device;
+ _storage = storage;
SharedMemory = SharedMemory.Create();
}
diff --git a/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs b/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs
index 8070cf54..ff5db94f 100644
--- a/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs
+++ b/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs
@@ -206,7 +206,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
private ResultCode MapNro(KProcess process, NroInfo info, out ulong nroMappedAddress)
{
- KMemoryManager memMgr = process.MemoryManager;
+ KPageTableBase memMgr = process.MemoryManager;
int retryCount = 0;
@@ -252,7 +252,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
private bool CanAddGuardRegionsInProcess(KProcess process, ulong baseAddress, ulong size)
{
- KMemoryManager memMgr = process.MemoryManager;
+ KPageTableBase memMgr = process.MemoryManager;
KMemoryInfo memInfo = memMgr.QueryMemory(baseAddress - 1);
@@ -270,7 +270,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
private ResultCode MapCodeMemoryInProcess(KProcess process, ulong baseAddress, ulong size, out ulong targetAddress)
{
- KMemoryManager memMgr = process.MemoryManager;
+ KPageTableBase memMgr = process.MemoryManager;
targetAddress = 0;
@@ -327,7 +327,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro
ulong bssStart = dataStart + (ulong)relocatableObject.Data.Length;
- ulong bssEnd = BitUtils.AlignUp(bssStart + (ulong)relocatableObject.BssSize, KMemoryManager.PageSize);
+ ulong bssEnd = BitUtils.AlignUp(bssStart + (ulong)relocatableObject.BssSize, KPageTableBase.PageSize);
process.CpuMemory.Write(textStart, relocatableObject.Text);
process.CpuMemory.Write(roStart, relocatableObject.Ro);
diff --git a/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs b/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs
index 7b17b18d..e2217890 100644
--- a/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs
+++ b/Ryujinx.HLE/HOS/Services/Time/TimeManager.cs
@@ -55,9 +55,9 @@ namespace Ryujinx.HLE.HOS.Services.Time
EphemeralClockContextWriter = new EphemeralNetworkSystemClockContextWriter();
}
- public void Initialize(Switch device, Horizon system, KSharedMemory sharedMemory, ulong timeSharedMemoryAddress, int timeSharedMemorySize)
+ public void Initialize(Switch device, Horizon system, KSharedMemory sharedMemory, SharedMemoryStorage timeSharedMemoryStorage, int timeSharedMemorySize)
{
- SharedMemory.Initialize(device, sharedMemory, timeSharedMemoryAddress, timeSharedMemorySize);
+ SharedMemory.Initialize(device, sharedMemory, timeSharedMemoryStorage, timeSharedMemorySize);
// Here we use system on purpose as device. System isn't initialized at this point.
StandardUserSystemClock.CreateAutomaticCorrectionEvent(system);
diff --git a/Ryujinx.HLE/HOS/Services/Time/TimeSharedMemory.cs b/Ryujinx.HLE/HOS/Services/Time/TimeSharedMemory.cs
index e3683076..8b08b040 100644
--- a/Ryujinx.HLE/HOS/Services/Time/TimeSharedMemory.cs
+++ b/Ryujinx.HLE/HOS/Services/Time/TimeSharedMemory.cs
@@ -12,25 +12,25 @@ namespace Ryujinx.HLE.HOS.Services.Time
{
class TimeSharedMemory
{
- private Switch _device;
- private KSharedMemory _sharedMemory;
- private ulong _timeSharedMemoryAddress;
- private int _timeSharedMemorySize;
+ private Switch _device;
+ private KSharedMemory _sharedMemory;
+ private SharedMemoryStorage _timeSharedMemoryStorage;
+ private int _timeSharedMemorySize;
private const uint SteadyClockContextOffset = 0x00;
private const uint LocalSystemClockContextOffset = 0x38;
private const uint NetworkSystemClockContextOffset = 0x80;
private const uint AutomaticCorrectionEnabledOffset = 0xC8;
- public void Initialize(Switch device, KSharedMemory sharedMemory, ulong timeSharedMemoryAddress, int timeSharedMemorySize)
+ public void Initialize(Switch device, KSharedMemory sharedMemory, SharedMemoryStorage timeSharedMemoryStorage, int timeSharedMemorySize)
{
_device = device;
_sharedMemory = sharedMemory;
- _timeSharedMemoryAddress = timeSharedMemoryAddress;
+ _timeSharedMemoryStorage = timeSharedMemoryStorage;
_timeSharedMemorySize = timeSharedMemorySize;
// Clean the shared memory
- _device.Memory.ZeroFill(_timeSharedMemoryAddress, (ulong)_timeSharedMemorySize);
+ timeSharedMemoryStorage.ZeroFill();
}
public KSharedMemory GetSharedMemory()
@@ -89,23 +89,21 @@ namespace Ryujinx.HLE.HOS.Services.Time
private T ReadObjectFromSharedMemory<T>(ulong offset, ulong padding) where T : unmanaged
{
- ulong indexOffset = _timeSharedMemoryAddress + offset;
-
T result;
uint index;
uint possiblyNewIndex;
do
{
- index = _device.Memory.Read<uint>(indexOffset);
+ index = _timeSharedMemoryStorage.GetRef<uint>(offset);
- ulong objectOffset = indexOffset + 4 + padding + (ulong)((index & 1) * Unsafe.SizeOf<T>());
+ ulong objectOffset = offset + 4 + padding + (ulong)((index & 1) * Unsafe.SizeOf<T>());
- result = _device.Memory.Read<T>(objectOffset);
+ result = _timeSharedMemoryStorage.GetRef<T>(objectOffset);
Thread.MemoryBarrier();
- possiblyNewIndex = _device.Memory.Read<uint>(indexOffset);
+ possiblyNewIndex = _device.Memory.Read<uint>(offset);
} while (index != possiblyNewIndex);
return result;
@@ -113,15 +111,15 @@ namespace Ryujinx.HLE.HOS.Services.Time
private void WriteObjectToSharedMemory<T>(ulong offset, ulong padding, T value) where T : unmanaged
{
- ulong indexOffset = _timeSharedMemoryAddress + offset;
- uint newIndex = _device.Memory.Read<uint>(indexOffset) + 1;
- ulong objectOffset = indexOffset + 4 + padding + (ulong)((newIndex & 1) * Unsafe.SizeOf<T>());
+ uint newIndex = _timeSharedMemoryStorage.GetRef<uint>(offset) + 1;
+
+ ulong objectOffset = offset + 4 + padding + (ulong)((newIndex & 1) * Unsafe.SizeOf<T>());
- _device.Memory.Write(objectOffset, value);
+ _timeSharedMemoryStorage.GetRef<T>(objectOffset) = value;
Thread.MemoryBarrier();
- _device.Memory.Write(indexOffset, newIndex);
+ _timeSharedMemoryStorage.GetRef<uint>(offset) = newIndex;
}
}
}