ArmProcessContextFactory.cs 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. using Ryujinx.Common.Configuration;
  2. using Ryujinx.Cpu;
  3. using Ryujinx.HLE.HOS.Kernel;
  4. using Ryujinx.HLE.HOS.Kernel.Process;
  5. using Ryujinx.Memory;
  6. using System;
  7. namespace Ryujinx.HLE.HOS
  8. {
  9. class ArmProcessContextFactory : IProcessContextFactory
  10. {
  11. public IProcessContext Create(KernelContext context, ulong addressSpaceSize, InvalidAccessHandler invalidAccessHandler, bool for64Bit)
  12. {
  13. MemoryManagerMode mode = context.Device.Configuration.MemoryManagerMode;
  14. switch (mode)
  15. {
  16. case MemoryManagerMode.SoftwarePageTable:
  17. return new ArmProcessContext<MemoryManager>(new MemoryManager(addressSpaceSize, invalidAccessHandler), for64Bit);
  18. case MemoryManagerMode.HostMapped:
  19. case MemoryManagerMode.HostMappedUnsafe:
  20. bool unsafeMode = mode == MemoryManagerMode.HostMappedUnsafe;
  21. return new ArmProcessContext<MemoryManagerHostMapped>(new MemoryManagerHostMapped(addressSpaceSize, unsafeMode, invalidAccessHandler), for64Bit);
  22. default:
  23. throw new ArgumentOutOfRangeException();
  24. }
  25. }
  26. }
  27. }