device_memory.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "common/host_memory.h"
  5. #include "common/typed_address.h"
  6. namespace Core {
  7. namespace DramMemoryMap {
  8. enum : u64 {
  9. Base = 0x80000000ULL,
  10. KernelReserveBase = Base + 0x60000,
  11. SlabHeapBase = KernelReserveBase + 0x85000,
  12. };
  13. }; // namespace DramMemoryMap
  14. class DeviceMemory {
  15. public:
  16. explicit DeviceMemory();
  17. ~DeviceMemory();
  18. DeviceMemory& operator=(const DeviceMemory&) = delete;
  19. DeviceMemory(const DeviceMemory&) = delete;
  20. template <typename T>
  21. Common::PhysicalAddress GetPhysicalAddr(const T* ptr) const {
  22. return (reinterpret_cast<uintptr_t>(ptr) -
  23. reinterpret_cast<uintptr_t>(buffer.BackingBasePointer())) +
  24. DramMemoryMap::Base;
  25. }
  26. template <typename T>
  27. PAddr GetRawPhysicalAddr(const T* ptr) const {
  28. return static_cast<PAddr>(reinterpret_cast<uintptr_t>(ptr) -
  29. reinterpret_cast<uintptr_t>(buffer.BackingBasePointer()));
  30. }
  31. template <typename T>
  32. T* GetPointer(Common::PhysicalAddress addr) {
  33. return reinterpret_cast<T*>(buffer.BackingBasePointer() +
  34. (GetInteger(addr) - DramMemoryMap::Base));
  35. }
  36. template <typename T>
  37. const T* GetPointer(Common::PhysicalAddress addr) const {
  38. return reinterpret_cast<T*>(buffer.BackingBasePointer() +
  39. (GetInteger(addr) - DramMemoryMap::Base));
  40. }
  41. template <typename T>
  42. T* GetPointerFromRaw(PAddr addr) {
  43. return reinterpret_cast<T*>(buffer.BackingBasePointer() + addr);
  44. }
  45. template <typename T>
  46. const T* GetPointerFromRaw(PAddr addr) const {
  47. return reinterpret_cast<T*>(buffer.BackingBasePointer() + addr);
  48. }
  49. Common::HostMemory buffer;
  50. };
  51. } // namespace Core