address_arbiter.h 956 B

12345678910111213141516171819202122232425262728293031323334
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include "common/common_types.h"
  6. union ResultCode;
  7. namespace Kernel {
  8. namespace AddressArbiter {
  9. enum class ArbitrationType {
  10. WaitIfLessThan = 0,
  11. DecrementAndWaitIfLessThan = 1,
  12. WaitIfEqual = 2,
  13. };
  14. enum class SignalType {
  15. Signal = 0,
  16. IncrementAndSignalIfEqual = 1,
  17. ModifyByWaitingCountAndSignalIfEqual = 2,
  18. };
  19. ResultCode SignalToAddress(VAddr address, s32 num_to_wake);
  20. ResultCode IncrementAndSignalToAddressIfEqual(VAddr address, s32 value, s32 num_to_wake);
  21. ResultCode ModifyByWaitingCountAndSignalToAddressIfEqual(VAddr address, s32 value, s32 num_to_wake);
  22. ResultCode WaitForAddressIfLessThan(VAddr address, s32 value, s64 timeout, bool should_decrement);
  23. ResultCode WaitForAddressIfEqual(VAddr address, s32 value, s64 timeout);
  24. } // namespace AddressArbiter
  25. } // namespace Kernel