memory_pool.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 ServerMemoryPoolInfo::InParams& in_params,
  10. ServerMemoryPoolInfo::OutParams& out_params) {
  11. // Our state does not need to be changed
  12. if (in_params.state != ServerMemoryPoolInfo::State::RequestAttach &&
  13. in_params.state != ServerMemoryPoolInfo::State::RequestDetach) {
  14. return true;
  15. }
  16. // Address or size is null
  17. if (in_params.address == 0 || in_params.size == 0) {
  18. LOG_ERROR(Audio, "Memory pool address or size is zero! address={:X}, size={:X}",
  19. in_params.address, in_params.size);
  20. return false;
  21. }
  22. // Address or size is not aligned
  23. if ((in_params.address % 0x1000) != 0 || (in_params.size % 0x1000) != 0) {
  24. LOG_ERROR(Audio, "Memory pool address or size is not aligned! address={:X}, size={:X}",
  25. in_params.address, in_params.size);
  26. return false;
  27. }
  28. if (in_params.state == ServerMemoryPoolInfo::State::RequestAttach) {
  29. cpu_address = in_params.address;
  30. size = in_params.size;
  31. used = true;
  32. out_params.state = ServerMemoryPoolInfo::State::Attached;
  33. } else {
  34. // Unexpected address
  35. if (cpu_address != in_params.address) {
  36. LOG_ERROR(Audio, "Memory pool address differs! Expecting {:X} but address is {:X}",
  37. cpu_address, in_params.address);
  38. return false;
  39. }
  40. if (size != in_params.size) {
  41. LOG_ERROR(Audio, "Memory pool size differs! Expecting {:X} but size is {:X}", size,
  42. in_params.size);
  43. return false;
  44. }
  45. cpu_address = 0;
  46. size = 0;
  47. used = false;
  48. out_params.state = ServerMemoryPoolInfo::State::Detached;
  49. }
  50. return true;
  51. }
  52. } // namespace AudioCore