#pragma once #include "sys_sync.h" #include "sys_mutex.h" struct lv2_mutex; struct sys_cond_attribute_t { be_t pshared; be_t flags; be_t ipc_key; union { nse_t name_u64; char name[sizeof(u64)]; }; }; struct lv2_cond final : lv2_obj { static const u32 id_base = 0x86000000; const u64 key; const u64 name; const u32 mtx_id; lv2_mutex* mutex; // Associated Mutex shared_ptr _mutex; ppu_thread* sq{}; lv2_cond(u64 key, u64 name, u32 mtx_id, shared_ptr mutex0) noexcept; lv2_cond(utils::serial& ar) noexcept; static std::function load(utils::serial& ar); void save(utils::serial& ar); CellError on_id_create(); }; class ppu_thread; // Syscalls error_code sys_cond_create(ppu_thread& ppu, vm::ptr cond_id, u32 mutex_id, vm::ptr attr); error_code sys_cond_destroy(ppu_thread& ppu, u32 cond_id); error_code sys_cond_wait(ppu_thread& ppu, u32 cond_id, u64 timeout); error_code sys_cond_signal(ppu_thread& ppu, u32 cond_id); error_code sys_cond_signal_all(ppu_thread& ppu, u32 cond_id); error_code sys_cond_signal_to(ppu_thread& ppu, u32 cond_id, u32 thread_id);