address_arbiter.h 931 B

1234567891011121314151617181920212223242526272829303132
  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::AddressArbiter {
  8. enum class ArbitrationType {
  9. WaitIfLessThan = 0,
  10. DecrementAndWaitIfLessThan = 1,
  11. WaitIfEqual = 2,
  12. };
  13. enum class SignalType {
  14. Signal = 0,
  15. IncrementAndSignalIfEqual = 1,
  16. ModifyByWaitingCountAndSignalIfEqual = 2,
  17. };
  18. ResultCode SignalToAddress(VAddr address, s32 num_to_wake);
  19. ResultCode IncrementAndSignalToAddressIfEqual(VAddr address, s32 value, s32 num_to_wake);
  20. ResultCode ModifyByWaitingCountAndSignalToAddressIfEqual(VAddr address, s32 value, s32 num_to_wake);
  21. ResultCode WaitForAddressIfLessThan(VAddr address, s32 value, s64 timeout, bool should_decrement);
  22. ResultCode WaitForAddressIfEqual(VAddr address, s32 value, s64 timeout);
  23. } // namespace Kernel::AddressArbiter