transfer_memory.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Copyright 2019 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "core/hle/kernel/kernel.h"
  5. #include "core/hle/kernel/memory/page_table.h"
  6. #include "core/hle/kernel/process.h"
  7. #include "core/hle/kernel/transfer_memory.h"
  8. #include "core/hle/result.h"
  9. #include "core/memory.h"
  10. namespace Kernel {
  11. TransferMemory::TransferMemory(KernelCore& kernel, Core::Memory::Memory& memory)
  12. : Object{kernel}, memory{memory} {}
  13. TransferMemory::~TransferMemory() {
  14. // Release memory region when transfer memory is destroyed
  15. Reset();
  16. }
  17. std::shared_ptr<TransferMemory> TransferMemory::Create(KernelCore& kernel,
  18. Core::Memory::Memory& memory,
  19. VAddr base_address, std::size_t size,
  20. Memory::MemoryPermission permissions) {
  21. std::shared_ptr<TransferMemory> transfer_memory{
  22. std::make_shared<TransferMemory>(kernel, memory)};
  23. transfer_memory->base_address = base_address;
  24. transfer_memory->size = size;
  25. transfer_memory->owner_permissions = permissions;
  26. transfer_memory->owner_process = kernel.CurrentProcess();
  27. return transfer_memory;
  28. }
  29. const u8* TransferMemory::GetPointer() const {
  30. return memory.GetPointer(base_address);
  31. }
  32. ResultCode TransferMemory::Reserve() {
  33. return owner_process->PageTable().ReserveTransferMemory(base_address, size, owner_permissions);
  34. }
  35. ResultCode TransferMemory::Reset() {
  36. return owner_process->PageTable().ResetTransferMemory(base_address, size);
  37. }
  38. } // namespace Kernel