ArmProcessContextFactory.cs 1.4 KB

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