memory_pool.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "audio_core/memory_pool.h"
  5. #include "common/logging/log.h"
  6. namespace AudioCore {
  7. ServerMemoryPoolInfo::ServerMemoryPoolInfo() = default;
  8. ServerMemoryPoolInfo::~ServerMemoryPoolInfo() = default;
  9. bool ServerMemoryPoolInfo::Update(const InParams& in_params, OutParams& out_params) {
  10. // Our state does not need to be changed
  11. if (in_params.state != State::RequestAttach && in_params.state != State::RequestDetach) {
  12. return true;
  13. }
  14. // Address or size is null
  15. if (in_params.address == 0 || in_params.size == 0) {
  16. LOG_ERROR(Audio, "Memory pool address or size is zero! address={:X}, size={:X}",
  17. in_params.address, in_params.size);
  18. return false;
  19. }
  20. // Address or size is not aligned
  21. if ((in_params.address % 0x1000) != 0 || (in_params.size % 0x1000) != 0) {
  22. LOG_ERROR(Audio, "Memory pool address or size is not aligned! address={:X}, size={:X}",
  23. in_params.address, in_params.size);
  24. return false;
  25. }
  26. if (in_params.state == State::RequestAttach) {
  27. cpu_address = in_params.address;
  28. size = in_params.size;
  29. used = true;
  30. out_params.state = State::Attached;
  31. } else {
  32. // Unexpected address
  33. if (cpu_address != in_params.address) {
  34. LOG_ERROR(Audio, "Memory pool address differs! Expecting {:X} but address is {:X}",
  35. cpu_address, in_params.address);
  36. return false;
  37. }
  38. if (size != in_params.size) {
  39. LOG_ERROR(Audio, "Memory pool size differs! Expecting {:X} but size is {:X}", size,
  40. in_params.size);
  41. return false;
  42. }
  43. cpu_address = 0;
  44. size = 0;
  45. used = false;
  46. out_params.state = State::Detached;
  47. }
  48. return true;
  49. }
  50. } // namespace AudioCore