mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-19 05:15:17 +00:00
ID manager simplified
ID manager refactoring, redundant "type" information removed
This commit is contained in:
parent
da8883d5d3
commit
dd665e7363
67 changed files with 762 additions and 941 deletions
|
|
@ -7,7 +7,21 @@
|
|||
#include "Emu/FS/VFS.h"
|
||||
#include "Emu/FS/vfsFile.h"
|
||||
#include "Loader/PSF.h"
|
||||
#include "sys_lwmutex.h"
|
||||
#include "sys_lwcond.h"
|
||||
#include "sys_mutex.h"
|
||||
#include "sys_cond.h"
|
||||
#include "sys_event.h"
|
||||
#include "sys_event_flag.h"
|
||||
#include "sys_interrupt.h"
|
||||
#include "sys_memory.h"
|
||||
#include "sys_mmapper.h"
|
||||
#include "sys_prx.h"
|
||||
#include "sys_rwlock.h"
|
||||
#include "sys_semaphore.h"
|
||||
#include "sys_timer.h"
|
||||
#include "sys_trace.h"
|
||||
#include "sys_fs.h"
|
||||
#include "sys_process.h"
|
||||
|
||||
SysCallBase sys_process("sys_process");
|
||||
|
|
@ -61,74 +75,77 @@ s32 sys_process_get_number_of_object(u32 object, vm::ptr<u32> nump)
|
|||
|
||||
switch(object)
|
||||
{
|
||||
case SYS_MEM_OBJECT:
|
||||
case SYS_MUTEX_OBJECT:
|
||||
case SYS_COND_OBJECT:
|
||||
case SYS_RWLOCK_OBJECT:
|
||||
case SYS_INTR_TAG_OBJECT:
|
||||
case SYS_INTR_SERVICE_HANDLE_OBJECT:
|
||||
case SYS_EVENT_QUEUE_OBJECT:
|
||||
case SYS_EVENT_PORT_OBJECT:
|
||||
case SYS_TRACE_OBJECT:
|
||||
case SYS_SPUIMAGE_OBJECT:
|
||||
case SYS_PRX_OBJECT:
|
||||
case SYS_SPUPORT_OBJECT:
|
||||
case SYS_LWMUTEX_OBJECT:
|
||||
case SYS_TIMER_OBJECT:
|
||||
case SYS_SEMAPHORE_OBJECT:
|
||||
case SYS_FS_FD_OBJECT:
|
||||
case SYS_LWCOND_OBJECT:
|
||||
case SYS_EVENT_FLAG_OBJECT:
|
||||
case SYS_MEM_OBJECT: *nump = idm::get_count<lv2_memory_t>(); break;
|
||||
case SYS_MUTEX_OBJECT: *nump = idm::get_count<lv2_mutex_t>(); break;
|
||||
case SYS_COND_OBJECT: *nump = idm::get_count<lv2_cond_t>(); break;
|
||||
case SYS_RWLOCK_OBJECT: *nump = idm::get_count<lv2_rwlock_t>(); break;
|
||||
case SYS_INTR_TAG_OBJECT: *nump = idm::get_count<lv2_int_tag_t>(); break;
|
||||
case SYS_INTR_SERVICE_HANDLE_OBJECT: *nump = idm::get_count<lv2_int_serv_t>(); break;
|
||||
case SYS_EVENT_QUEUE_OBJECT: *nump = idm::get_count<lv2_event_queue_t>(); break;
|
||||
case SYS_EVENT_PORT_OBJECT: *nump = idm::get_count<lv2_event_port_t>(); break;
|
||||
case SYS_TRACE_OBJECT: throw EXCEPTION("SYS_TRACE_OBJECT");
|
||||
case SYS_SPUIMAGE_OBJECT: throw EXCEPTION("SYS_SPUIMAGE_OBJECT");
|
||||
case SYS_PRX_OBJECT: *nump = idm::get_count<lv2_prx_t>(); break;
|
||||
case SYS_SPUPORT_OBJECT: throw EXCEPTION("SYS_SPUPORT_OBJECT");
|
||||
case SYS_LWMUTEX_OBJECT: *nump = idm::get_count<lv2_lwmutex_t>(); break;
|
||||
case SYS_TIMER_OBJECT: *nump = idm::get_count<lv2_timer_t>(); break;
|
||||
case SYS_SEMAPHORE_OBJECT: *nump = idm::get_count<lv2_sema_t>(); break;
|
||||
case SYS_FS_FD_OBJECT: throw EXCEPTION("SYS_FS_FD_OBJECT");
|
||||
case SYS_LWCOND_OBJECT: *nump = idm::get_count<lv2_lwcond_t>(); break;
|
||||
case SYS_EVENT_FLAG_OBJECT: *nump = idm::get_count<lv2_event_flag_t>(); break;
|
||||
|
||||
default:
|
||||
{
|
||||
*nump = Emu.GetIdManager().get_count(object);
|
||||
return CELL_OK;
|
||||
}
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
return CELL_EINVAL;
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
s32 sys_process_get_id(u32 object, vm::ptr<u32> buffer, u32 size, vm::ptr<u32> set_size)
|
||||
{
|
||||
sys_process.Error("sys_process_get_id(object=0x%x, buffer=*0x%x, size=%d, set_size=*0x%x)", object, buffer, size, set_size);
|
||||
|
||||
std::set<u32> objects;
|
||||
|
||||
switch (object)
|
||||
{
|
||||
case SYS_MEM_OBJECT:
|
||||
case SYS_MUTEX_OBJECT:
|
||||
case SYS_COND_OBJECT:
|
||||
case SYS_RWLOCK_OBJECT:
|
||||
case SYS_INTR_TAG_OBJECT:
|
||||
case SYS_INTR_SERVICE_HANDLE_OBJECT:
|
||||
case SYS_EVENT_QUEUE_OBJECT:
|
||||
case SYS_EVENT_PORT_OBJECT:
|
||||
case SYS_TRACE_OBJECT:
|
||||
case SYS_SPUIMAGE_OBJECT:
|
||||
case SYS_PRX_OBJECT:
|
||||
case SYS_SPUPORT_OBJECT:
|
||||
case SYS_LWMUTEX_OBJECT:
|
||||
case SYS_TIMER_OBJECT:
|
||||
case SYS_SEMAPHORE_OBJECT:
|
||||
case SYS_FS_FD_OBJECT:
|
||||
case SYS_LWCOND_OBJECT:
|
||||
case SYS_EVENT_FLAG_OBJECT:
|
||||
case SYS_MEM_OBJECT: objects = idm::get_set<lv2_memory_t>(); break;
|
||||
case SYS_MUTEX_OBJECT: objects = idm::get_set<lv2_mutex_t>(); break;
|
||||
case SYS_COND_OBJECT: objects = idm::get_set<lv2_cond_t>(); break;
|
||||
case SYS_RWLOCK_OBJECT: objects = idm::get_set<lv2_rwlock_t>(); break;
|
||||
case SYS_INTR_TAG_OBJECT: objects = idm::get_set<lv2_int_tag_t>(); break;
|
||||
case SYS_INTR_SERVICE_HANDLE_OBJECT: objects = idm::get_set<lv2_int_serv_t>(); break;
|
||||
case SYS_EVENT_QUEUE_OBJECT: objects = idm::get_set<lv2_event_queue_t>(); break;
|
||||
case SYS_EVENT_PORT_OBJECT: objects = idm::get_set<lv2_event_port_t>(); break;
|
||||
case SYS_TRACE_OBJECT: throw EXCEPTION("SYS_TRACE_OBJECT");
|
||||
case SYS_SPUIMAGE_OBJECT: throw EXCEPTION("SYS_SPUIMAGE_OBJECT");
|
||||
case SYS_PRX_OBJECT: objects = idm::get_set<lv2_prx_t>(); break;
|
||||
case SYS_SPUPORT_OBJECT: throw EXCEPTION("SYS_SPUPORT_OBJECT");
|
||||
case SYS_LWMUTEX_OBJECT: objects = idm::get_set<lv2_lwmutex_t>(); break;
|
||||
case SYS_TIMER_OBJECT: objects = idm::get_set<lv2_timer_t>(); break;
|
||||
case SYS_SEMAPHORE_OBJECT: objects = idm::get_set<lv2_sema_t>(); break;
|
||||
case SYS_FS_FD_OBJECT: throw EXCEPTION("SYS_FS_FD_OBJECT");
|
||||
case SYS_LWCOND_OBJECT: objects = idm::get_set<lv2_lwcond_t>(); break;
|
||||
case SYS_EVENT_FLAG_OBJECT: objects = idm::get_set<lv2_event_flag_t>(); break;
|
||||
|
||||
default:
|
||||
{
|
||||
const auto objects = Emu.GetIdManager().get_set(object);
|
||||
|
||||
u32 i = 0;
|
||||
|
||||
for (auto id = objects.begin(); i < size && id != objects.end(); id++, i++)
|
||||
{
|
||||
buffer[i] = *id;
|
||||
}
|
||||
|
||||
*set_size = i;
|
||||
|
||||
return CELL_OK;
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
return CELL_EINVAL;
|
||||
u32 i = 0;
|
||||
|
||||
for (auto id = objects.begin(); i < size && id != objects.end(); id++, i++)
|
||||
{
|
||||
buffer[i] = *id;
|
||||
}
|
||||
|
||||
*set_size = i;
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
s32 process_is_spu_lock_line_reservation_address(u32 addr, u64 flags)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue