transfer_memory.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright 2019 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <memory>
  6. #include "core/hle/kernel/memory/memory_block.h"
  7. #include "core/hle/kernel/object.h"
  8. #include "core/hle/kernel/physical_memory.h"
  9. union ResultCode;
  10. namespace Core::Memory {
  11. class Memory;
  12. }
  13. namespace Kernel {
  14. class KernelCore;
  15. class Process;
  16. /// Defines the interface for transfer memory objects.
  17. ///
  18. /// Transfer memory is typically used for the purpose of
  19. /// transferring memory between separate process instances,
  20. /// thus the name.
  21. ///
  22. class TransferMemory final : public Object {
  23. public:
  24. explicit TransferMemory(KernelCore& kernel, Core::Memory::Memory& memory);
  25. ~TransferMemory() override;
  26. static constexpr HandleType HANDLE_TYPE = HandleType::TransferMemory;
  27. static std::shared_ptr<TransferMemory> Create(KernelCore& kernel, Core::Memory::Memory& memory,
  28. VAddr base_address, std::size_t size,
  29. Memory::MemoryPermission permissions);
  30. TransferMemory(const TransferMemory&) = delete;
  31. TransferMemory& operator=(const TransferMemory&) = delete;
  32. TransferMemory(TransferMemory&&) = delete;
  33. TransferMemory& operator=(TransferMemory&&) = delete;
  34. std::string GetTypeName() const override {
  35. return "TransferMemory";
  36. }
  37. std::string GetName() const override {
  38. return GetTypeName();
  39. }
  40. HandleType GetHandleType() const override {
  41. return HANDLE_TYPE;
  42. }
  43. /// Gets a pointer to the backing block of this instance.
  44. const u8* GetPointer() const;
  45. /// Gets the size of the memory backing this instance in bytes.
  46. constexpr std::size_t GetSize() const {
  47. return size;
  48. }
  49. /// Reserves the region to be used for the transfer memory, called after the transfer memory is
  50. /// created.
  51. ResultCode Reserve();
  52. /// Resets the region previously used for the transfer memory, called after the transfer memory
  53. /// is closed.
  54. ResultCode Reset();
  55. void Finalize() override {}
  56. private:
  57. /// The base address for the memory managed by this instance.
  58. VAddr base_address{};
  59. /// Size of the memory, in bytes, that this instance manages.
  60. std::size_t size{};
  61. /// The memory permissions that are applied to this instance.
  62. Memory::MemoryPermission owner_permissions{};
  63. /// The process that this transfer memory instance was created under.
  64. Process* owner_process{};
  65. Core::Memory::Memory& memory;
  66. };
  67. } // namespace Kernel