mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 02:08:49 +12:00
sys_event: add vm::temporary_unlock
This commit is contained in:
parent
cbfa6cc91f
commit
0a88a23bf5
4 changed files with 44 additions and 24 deletions
|
@ -10,8 +10,6 @@
|
|||
#include "Emu/Cell/SPUThread.h"
|
||||
#include "sys_process.h"
|
||||
|
||||
|
||||
|
||||
LOG_CHANNEL(sys_event);
|
||||
|
||||
template<> DECLARE(ipc_manager<lv2_event_queue, u64>::g_ipc) {};
|
||||
|
@ -76,6 +74,8 @@ bool lv2_event_queue::send(lv2_event event)
|
|||
|
||||
error_code sys_event_queue_create(vm::ptr<u32> equeue_id, vm::ptr<sys_event_queue_attribute_t> attr, u64 event_queue_key, s32 size)
|
||||
{
|
||||
vm::temporary_unlock();
|
||||
|
||||
sys_event.warning("sys_event_queue_create(equeue_id=*0x%x, attr=*0x%x, event_queue_key=0x%llx, size=%d)", equeue_id, attr, event_queue_key, size);
|
||||
|
||||
if (size <= 0 || size > 127)
|
||||
|
@ -138,6 +138,8 @@ error_code sys_event_queue_create(vm::ptr<u32> equeue_id, vm::ptr<sys_event_queu
|
|||
|
||||
error_code sys_event_queue_destroy(ppu_thread& ppu, u32 equeue_id, s32 mode)
|
||||
{
|
||||
vm::temporary_unlock(ppu);
|
||||
|
||||
sys_event.warning("sys_event_queue_destroy(equeue_id=0x%x, mode=%d)", equeue_id, mode);
|
||||
|
||||
if (mode && mode != SYS_EVENT_QUEUE_DESTROY_FORCE)
|
||||
|
@ -190,8 +192,10 @@ error_code sys_event_queue_destroy(ppu_thread& ppu, u32 equeue_id, s32 mode)
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
error_code sys_event_queue_tryreceive(u32 equeue_id, vm::ptr<sys_event_t> event_array, s32 size, vm::ptr<u32> number)
|
||||
error_code sys_event_queue_tryreceive(ppu_thread& ppu, u32 equeue_id, vm::ptr<sys_event_t> event_array, s32 size, vm::ptr<u32> number)
|
||||
{
|
||||
vm::temporary_unlock(ppu);
|
||||
|
||||
sys_event.trace("sys_event_queue_tryreceive(equeue_id=0x%x, event_array=*0x%x, size=%d, number=*0x%x)", equeue_id, event_array, size, number);
|
||||
|
||||
const auto queue = idm::get<lv2_obj, lv2_event_queue>(equeue_id);
|
||||
|
@ -226,6 +230,8 @@ error_code sys_event_queue_tryreceive(u32 equeue_id, vm::ptr<sys_event_t> event_
|
|||
|
||||
error_code sys_event_queue_receive(ppu_thread& ppu, u32 equeue_id, vm::ptr<sys_event_t> dummy_event, u64 timeout)
|
||||
{
|
||||
vm::temporary_unlock(ppu);
|
||||
|
||||
sys_event.trace("sys_event_queue_receive(equeue_id=0x%x, *0x%x, timeout=0x%llx)", equeue_id, dummy_event, timeout);
|
||||
|
||||
ppu.gpr[3] = CELL_OK;
|
||||
|
@ -305,8 +311,10 @@ error_code sys_event_queue_receive(ppu_thread& ppu, u32 equeue_id, vm::ptr<sys_e
|
|||
return not_an_error(ppu.gpr[3]);
|
||||
}
|
||||
|
||||
error_code sys_event_queue_drain(u32 equeue_id)
|
||||
error_code sys_event_queue_drain(ppu_thread& ppu, u32 equeue_id)
|
||||
{
|
||||
vm::temporary_unlock(ppu);
|
||||
|
||||
sys_event.trace("sys_event_queue_drain(equeue_id=0x%x)", equeue_id);
|
||||
|
||||
const auto queue = idm::check<lv2_obj, lv2_event_queue>(equeue_id, [&](lv2_event_queue& queue)
|
||||
|
@ -326,6 +334,8 @@ error_code sys_event_queue_drain(u32 equeue_id)
|
|||
|
||||
error_code sys_event_port_create(vm::ptr<u32> eport_id, s32 port_type, u64 name)
|
||||
{
|
||||
vm::temporary_unlock();
|
||||
|
||||
sys_event.warning("sys_event_port_create(eport_id=*0x%x, port_type=%d, name=0x%llx)", eport_id, port_type, name);
|
||||
|
||||
if (port_type != SYS_EVENT_PORT_LOCAL && port_type != 3)
|
||||
|
@ -343,8 +353,10 @@ error_code sys_event_port_create(vm::ptr<u32> eport_id, s32 port_type, u64 name)
|
|||
return CELL_EAGAIN;
|
||||
}
|
||||
|
||||
error_code sys_event_port_destroy(u32 eport_id)
|
||||
error_code sys_event_port_destroy(ppu_thread& ppu, u32 eport_id)
|
||||
{
|
||||
vm::temporary_unlock(ppu);
|
||||
|
||||
sys_event.warning("sys_event_port_destroy(eport_id=0x%x)", eport_id);
|
||||
|
||||
const auto port = idm::withdraw<lv2_obj, lv2_event_port>(eport_id, [](lv2_event_port& port) -> CellError
|
||||
|
@ -372,6 +384,8 @@ error_code sys_event_port_destroy(u32 eport_id)
|
|||
|
||||
error_code sys_event_port_connect_local(u32 eport_id, u32 equeue_id)
|
||||
{
|
||||
vm::temporary_unlock();
|
||||
|
||||
sys_event.warning("sys_event_port_connect_local(eport_id=0x%x, equeue_id=0x%x)", eport_id, equeue_id);
|
||||
|
||||
std::lock_guard lock(id_manager::g_mutex);
|
||||
|
@ -398,8 +412,10 @@ error_code sys_event_port_connect_local(u32 eport_id, u32 equeue_id)
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
error_code sys_event_port_connect_ipc(u32 eport_id, u64 ipc_key)
|
||||
error_code sys_event_port_connect_ipc(ppu_thread& ppu, u32 eport_id, u64 ipc_key)
|
||||
{
|
||||
vm::temporary_unlock(ppu);
|
||||
|
||||
sys_event.warning("sys_event_port_connect_ipc(eport_id=0x%x, ipc_key=0x%x)", eport_id, ipc_key);
|
||||
|
||||
auto queue = lv2_event_queue::find(ipc_key);
|
||||
|
@ -428,8 +444,10 @@ error_code sys_event_port_connect_ipc(u32 eport_id, u64 ipc_key)
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
error_code sys_event_port_disconnect(u32 eport_id)
|
||||
error_code sys_event_port_disconnect(ppu_thread& ppu, u32 eport_id)
|
||||
{
|
||||
vm::temporary_unlock(ppu);
|
||||
|
||||
sys_event.warning("sys_event_port_disconnect(eport_id=0x%x)", eport_id);
|
||||
|
||||
std::lock_guard lock(id_manager::g_mutex);
|
||||
|
@ -455,6 +473,8 @@ error_code sys_event_port_disconnect(u32 eport_id)
|
|||
|
||||
error_code sys_event_port_send(u32 eport_id, u64 data1, u64 data2, u64 data3)
|
||||
{
|
||||
vm::temporary_unlock();
|
||||
|
||||
sys_event.trace("sys_event_port_send(eport_id=0x%x, data1=0x%llx, data2=0x%llx, data3=0x%llx)", eport_id, data1, data2, data3);
|
||||
|
||||
const auto port = idm::get<lv2_obj, lv2_event_port>(eport_id, [&](lv2_event_port& port) -> CellError
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue