#pragma once namespace vm { using namespace ps3; } class PPUThread; enum : u32 { SYS_PPU_THREAD_ONCE_INIT = 0, SYS_PPU_THREAD_DONE_INIT = 1, }; // PPU Thread Flags enum : u64 { SYS_PPU_THREAD_CREATE_JOINABLE = 0x1, SYS_PPU_THREAD_CREATE_INTERRUPT = 0x2, }; struct sys_ppu_thread_stack_t { be_t pst_addr; be_t pst_size; }; struct ppu_thread_param_t { be_t entry; // vm::bptr be_t tls; // vm::bptr }; // Aux u32 ppu_thread_create(u32 entry, u64 arg, s32 prio, u32 stacksize, bool is_joinable, bool is_interrupt, std::string name, std::function task = nullptr); // SysCalls void _sys_ppu_thread_exit(PPUThread& CPU, u64 errorcode); void sys_ppu_thread_yield(); s32 sys_ppu_thread_join(PPUThread& CPU, u32 thread_id, vm::ptr vptr); s32 sys_ppu_thread_detach(u32 thread_id); void sys_ppu_thread_get_join_state(PPUThread& CPU, vm::ptr isjoinable); s32 sys_ppu_thread_set_priority(u32 thread_id, s32 prio); s32 sys_ppu_thread_get_priority(u32 thread_id, vm::ptr priop); s32 sys_ppu_thread_get_stack_information(PPUThread& CPU, vm::ptr sp); s32 sys_ppu_thread_stop(u32 thread_id); s32 sys_ppu_thread_restart(u32 thread_id); s32 _sys_ppu_thread_create(vm::ptr thread_id, vm::ptr param, u64 arg, u64 arg4, s32 prio, u32 stacksize, u64 flags, vm::cptr threadname); s32 sys_ppu_thread_start(u32 thread_id); s32 sys_ppu_thread_rename(u32 thread_id, vm::cptr name);