rpcsx/rpcs3/Emu/Cell/Modules/sys_io_.cpp

118 lines
2.3 KiB
C++
Raw Normal View History

2020-12-05 13:08:24 +01:00
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/IdManager.h"
2016-03-21 20:42:14 +01:00
#include "Emu/Cell/PPUModule.h"
LOG_CHANNEL(sys_io);
2014-09-03 18:33:30 +02:00
extern void cellPad_init();
extern void cellKb_init();
extern void cellMouse_init();
struct libio_sys_config
{
shared_mutex mtx;
s32 init_ctr = 0;
u32 stack_addr = 0;
~libio_sys_config() noexcept
{
if (stack_addr)
{
vm::dealloc_verbose_nothrow(stack_addr, vm::stack);
}
}
};
// Only exists internally (has no name)
extern void libio_sys_config_init()
{
auto cfg = g_fxo->get<libio_sys_config>();
std::lock_guard lock(cfg->mtx);
if (cfg->init_ctr++ == 0)
{
// Belongs to "_cfg_evt_hndlr" thread (8k stack)
cfg->stack_addr = (ensure(vm::alloc(0x2000, vm::stack, 4096)));
}
}
extern void libio_sys_config_end()
{
auto cfg = g_fxo->get<libio_sys_config>();
std::lock_guard lock(cfg->mtx);
if (cfg->init_ctr-- == 1)
{
ensure(vm::dealloc(std::exchange(cfg->stack_addr, 0), vm::stack));
}
}
2015-08-01 03:46:42 +02:00
2020-07-16 12:14:57 +02:00
error_code sys_config_start()
2015-08-01 03:46:42 +02:00
{
sys_io.todo("sys_config_start()");
return CELL_OK;
2015-08-01 03:46:42 +02:00
}
2020-07-16 12:14:57 +02:00
error_code sys_config_stop()
2015-08-01 03:46:42 +02:00
{
sys_io.todo("sys_config_stop()");
return CELL_OK;
2015-08-01 03:46:42 +02:00
}
2020-07-16 12:14:57 +02:00
error_code sys_config_add_service_listener()
2015-08-01 03:46:42 +02:00
{
sys_io.todo("sys_config_add_service_listener()");
return CELL_OK;
2015-08-01 03:46:42 +02:00
}
2020-07-16 12:14:57 +02:00
error_code sys_config_remove_service_listener()
2015-08-01 03:46:42 +02:00
{
sys_io.todo("sys_config_remove_service_listener()");
return CELL_OK;
2015-08-01 03:46:42 +02:00
}
2020-07-16 12:14:57 +02:00
error_code sys_config_register_io_error_handler()
{
sys_io.todo("sys_config_register_io_error_handler()");
return CELL_OK;
}
2020-07-16 12:14:57 +02:00
error_code sys_config_register_service()
2015-08-01 03:46:42 +02:00
{
sys_io.todo("sys_config_register_service()");
return CELL_OK;
2015-08-01 03:46:42 +02:00
}
2020-07-16 12:14:57 +02:00
error_code sys_config_unregister_io_error_handler()
{
sys_io.todo("sys_config_unregister_io_error_handler()");
return CELL_OK;
}
2020-07-16 12:14:57 +02:00
error_code sys_config_unregister_service()
2015-08-01 03:46:42 +02:00
{
sys_io.todo("sys_config_unregister_service()");
return CELL_OK;
2015-08-01 03:46:42 +02:00
}
2016-03-21 20:42:14 +01:00
DECLARE(ppu_module_manager::sys_io)("sys_io", []()
{
2014-09-03 18:33:30 +02:00
cellPad_init();
cellKb_init();
cellMouse_init();
2015-08-01 03:46:42 +02:00
REG_FUNC(sys_io, sys_config_start);
REG_FUNC(sys_io, sys_config_stop);
REG_FUNC(sys_io, sys_config_add_service_listener);
REG_FUNC(sys_io, sys_config_remove_service_listener);
REG_FUNC(sys_io, sys_config_register_io_error_handler);
2015-08-01 03:46:42 +02:00
REG_FUNC(sys_io, sys_config_register_service);
REG_FUNC(sys_io, sys_config_unregister_io_error_handler);
2015-08-01 03:46:42 +02:00
REG_FUNC(sys_io, sys_config_unregister_service);
});