diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Services')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Hid/Hid.cs | 11 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Time/TimeManager.cs | 4 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Time/TimeSharedMemory.cs | 34 |
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; } } } |
