Stub sys_spu_thread_group_log

This commit is contained in:
Eladash 2019-11-21 23:29:29 +02:00 committed by Ivan
parent 038c6bb234
commit b8220ec12f
3 changed files with 46 additions and 1 deletions

View File

@ -298,7 +298,7 @@ const std::array<ppu_function_t, 1024> s_ppu_syscall_table
BIND_FUNC(sys_spu_thread_group_connect_event_all_threads), //251 (0x0FB)
BIND_FUNC(sys_spu_thread_group_disconnect_event_all_threads), //252 (0x0FC)
null_func,//BIND_FUNC(sys_spu_thread_group...) //253 (0x0FD)
null_func,//BIND_FUNC(sys_spu_thread_group_log) //254 (0x0FE)
BIND_FUNC(sys_spu_thread_group_log), //254 (0x0FE)
uns_func, uns_func, uns_func, uns_func, uns_func, //255-259 UNS

View File

@ -1376,6 +1376,43 @@ error_code sys_spu_thread_group_disconnect_event_all_threads(ppu_thread& ppu, u3
return CELL_OK;
}
error_code sys_spu_thread_group_log(ppu_thread& ppu, s32 command, vm::ptr<s32> stat)
{
vm::temporary_unlock(ppu);
sys_spu.warning("sys_spu_thread_group_log(command=0x%x, stat=*0x%x)", command, stat);
struct spu_group_log_state_t
{
atomic_t<s32> state = SYS_SPU_THREAD_GROUP_LOG_ON;
};
const auto state = g_fxo->get<spu_group_log_state_t>();
switch (command)
{
case SYS_SPU_THREAD_GROUP_LOG_GET_STATUS:
{
if (!stat)
{
return CELL_EFAULT;
}
*stat = state->state;
break;
}
case SYS_SPU_THREAD_GROUP_LOG_ON:
case SYS_SPU_THREAD_GROUP_LOG_OFF:
{
state->state.release(command);
break;
}
default: return CELL_EINVAL;
}
return CELL_OK;
}
error_code sys_spu_thread_recover_page_fault(ppu_thread& ppu, u32 id)
{
vm::temporary_unlock(ppu);

View File

@ -39,6 +39,13 @@ enum : u64
SYS_SPU_THREAD_GROUP_EVENT_SYSTEM_MODULE_KEY = 0xFFFFFFFF53505504ull,
};
enum
{
SYS_SPU_THREAD_GROUP_LOG_ON = 0x0,
SYS_SPU_THREAD_GROUP_LOG_OFF = 0x1,
SYS_SPU_THREAD_GROUP_LOG_GET_STATUS = 0x2,
};
enum : u32
{
SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED,
@ -322,6 +329,7 @@ error_code sys_spu_thread_group_connect_event(ppu_thread&, u32 id, u32 eq, u32 e
error_code sys_spu_thread_group_disconnect_event(ppu_thread&, u32 id, u32 et);
error_code sys_spu_thread_group_connect_event_all_threads(ppu_thread&, u32 id, u32 eq_id, u64 req, vm::ptr<u8> spup);
error_code sys_spu_thread_group_disconnect_event_all_threads(ppu_thread&, u32 id, u8 spup);
error_code sys_spu_thread_group_log(ppu_thread&, s32 command, vm::ptr<s32> stat);
error_code sys_spu_thread_write_ls(ppu_thread&, u32 id, u32 address, u64 value, u32 type);
error_code sys_spu_thread_read_ls(ppu_thread&, u32 id, u32 address, vm::ptr<u64> value, u32 type);
error_code sys_spu_thread_write_spu_mb(ppu_thread&, u32 id, u32 value);