mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-05 06:26:49 +00:00
sys_rsx: add cpu_flag::wait
This commit is contained in:
parent
605d57c541
commit
95aeebe4b5
4 changed files with 64 additions and 40 deletions
|
|
@ -87,15 +87,19 @@ void lv2_rsx_config::send_event(u64 data1, u64 event_flags, u64 data3) const
|
|||
}
|
||||
}
|
||||
|
||||
error_code sys_rsx_device_open()
|
||||
error_code sys_rsx_device_open(cpu_thread& cpu)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.todo("sys_rsx_device_open()");
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
error_code sys_rsx_device_close()
|
||||
error_code sys_rsx_device_close(cpu_thread& cpu)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.todo("sys_rsx_device_close()");
|
||||
|
||||
return CELL_OK;
|
||||
|
|
@ -111,8 +115,10 @@ error_code sys_rsx_device_close()
|
|||
* @param a6 (IN): E.g. Immediate value passed in cellGcmSys is 16.
|
||||
* @param a7 (IN): E.g. Immediate value passed in cellGcmSys is 8.
|
||||
*/
|
||||
error_code sys_rsx_memory_allocate(vm::ptr<u32> mem_handle, vm::ptr<u64> mem_addr, u32 size, u64 flags, u64 a5, u64 a6, u64 a7)
|
||||
error_code sys_rsx_memory_allocate(cpu_thread& cpu, vm::ptr<u32> mem_handle, vm::ptr<u64> mem_addr, u32 size, u64 flags, u64 a5, u64 a6, u64 a7)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.warning("sys_rsx_memory_allocate(mem_handle=*0x%x, mem_addr=*0x%x, size=0x%x, flags=0x%llx, a5=0x%llx, a6=0x%llx, a7=0x%llx)", mem_handle, mem_addr, size, flags, a5, a6, a7);
|
||||
|
||||
if (u32 addr = vm::falloc(rsx::constants::local_mem_base, size, vm::video))
|
||||
|
|
@ -130,8 +136,10 @@ error_code sys_rsx_memory_allocate(vm::ptr<u32> mem_handle, vm::ptr<u64> mem_add
|
|||
* lv2 SysCall 669 (0x29D): sys_rsx_memory_free
|
||||
* @param mem_handle (OUT): Context / ID, for allocated local memory generated by sys_rsx_memory_allocate
|
||||
*/
|
||||
error_code sys_rsx_memory_free(u32 mem_handle)
|
||||
error_code sys_rsx_memory_free(cpu_thread& cpu, u32 mem_handle)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.warning("sys_rsx_memory_free(mem_handle=0x%x)", mem_handle);
|
||||
|
||||
if (!vm::check_addr(rsx::constants::local_mem_base))
|
||||
|
|
@ -275,8 +283,10 @@ error_code sys_rsx_context_allocate(cpu_thread& cpu, vm::ptr<u32> context_id, vm
|
|||
* lv2 SysCall 671 (0x29F): sys_rsx_context_free
|
||||
* @param context_id (IN): RSX context generated by sys_rsx_context_allocate to free the context.
|
||||
*/
|
||||
error_code sys_rsx_context_free(u32 context_id)
|
||||
error_code sys_rsx_context_free(cpu_thread& cpu, u32 context_id)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.todo("sys_rsx_context_free(context_id=0x%x)", context_id);
|
||||
|
||||
auto rsx_cfg = g_fxo->get<lv2_rsx_config>();
|
||||
|
|
@ -299,8 +309,10 @@ error_code sys_rsx_context_free(u32 context_id)
|
|||
* @param size (IN): Size of mapping area in bytes. E.g. 0x00200000
|
||||
* @param flags (IN):
|
||||
*/
|
||||
error_code sys_rsx_context_iomap(u32 context_id, u32 io, u32 ea, u32 size, u64 flags)
|
||||
error_code sys_rsx_context_iomap(cpu_thread& cpu, u32 context_id, u32 io, u32 ea, u32 size, u64 flags)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.warning("sys_rsx_context_iomap(context_id=0x%x, io=0x%x, ea=0x%x, size=0x%x, flags=0x%llx)", context_id, io, ea, size, flags);
|
||||
|
||||
const auto render = rsx::get_current_renderer();
|
||||
|
|
@ -317,7 +329,6 @@ error_code sys_rsx_context_iomap(u32 context_id, u32 io, u32 ea, u32 size, u64 f
|
|||
}
|
||||
|
||||
// Wait until we have no active RSX locks and reserve iomap for use. Must do so before acquiring vm lock to avoid deadlocks
|
||||
vm::temporary_unlock(*get_current_cpu_thread());
|
||||
rsx::reservation_lock<true> rsx_lock(ea, size);
|
||||
|
||||
vm::reader_lock rlock;
|
||||
|
|
@ -356,8 +367,10 @@ error_code sys_rsx_context_iomap(u32 context_id, u32 io, u32 ea, u32 size, u64 f
|
|||
* @param io (IN): IO address. E.g. 0x00600000 (Start page 6)
|
||||
* @param size (IN): Size to unmap in byte. E.g. 0x00200000
|
||||
*/
|
||||
error_code sys_rsx_context_iounmap(u32 context_id, u32 io, u32 size)
|
||||
error_code sys_rsx_context_iounmap(cpu_thread& cpu, u32 context_id, u32 io, u32 size)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.warning("sys_rsx_context_iounmap(context_id=0x%x, io=0x%x, size=0x%x)", context_id, io, size);
|
||||
|
||||
const auto render = rsx::get_current_renderer();
|
||||
|
|
@ -400,6 +413,11 @@ error_code sys_rsx_context_iounmap(u32 context_id, u32 io, u32 size)
|
|||
*/
|
||||
error_code sys_rsx_context_attribute(u32 context_id, u32 package_id, u64 a3, u64 a4, u64 a5, u64 a6)
|
||||
{
|
||||
if (auto cpu = get_current_cpu_thread())
|
||||
{
|
||||
cpu->state += cpu_flag::wait;
|
||||
}
|
||||
|
||||
// Flip/queue/reset flip/flip event/user command/vblank as trace to help with log spam
|
||||
if (package_id == 0x102 || package_id == 0x103 || package_id == 0x10a || package_id == 0xFEC || package_id == 0xFED || package_id == 0xFEF)
|
||||
sys_rsx.trace("sys_rsx_context_attribute(context_id=0x%x, package_id=0x%x, a3=0x%llx, a4=0x%llx, a5=0x%llx, a6=0x%llx)", context_id, package_id, a3, a4, a5, a6);
|
||||
|
|
@ -779,8 +797,10 @@ error_code sys_rsx_context_attribute(u32 context_id, u32 package_id, u64 a3, u64
|
|||
* @param a2 (OUT): Unused
|
||||
* @param dev_id (IN): An immediate value and always 8. (cellGcmInitPerfMon uses 11, 10, 9, 7, 12 successively).
|
||||
*/
|
||||
error_code sys_rsx_device_map(vm::ptr<u64> dev_addr, vm::ptr<u64> a2, u32 dev_id)
|
||||
error_code sys_rsx_device_map(cpu_thread& cpu, vm::ptr<u64> dev_addr, vm::ptr<u64> a2, u32 dev_id)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.warning("sys_rsx_device_map(dev_addr=*0x%x, a2=*0x%x, dev_id=0x%x)", dev_addr, a2, dev_id);
|
||||
|
||||
if (dev_id != 8) {
|
||||
|
|
@ -816,8 +836,10 @@ error_code sys_rsx_device_map(vm::ptr<u64> dev_addr, vm::ptr<u64> a2, u32 dev_id
|
|||
* lv2 SysCall 676 (0x2A4): sys_rsx_device_unmap
|
||||
* @param dev_id (IN): An immediate value and always 8.
|
||||
*/
|
||||
error_code sys_rsx_device_unmap(u32 dev_id)
|
||||
error_code sys_rsx_device_unmap(cpu_thread& cpu, u32 dev_id)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.todo("sys_rsx_device_unmap(dev_id=0x%x)", dev_id);
|
||||
|
||||
return CELL_OK;
|
||||
|
|
@ -826,8 +848,10 @@ error_code sys_rsx_device_unmap(u32 dev_id)
|
|||
/*
|
||||
* lv2 SysCall 677 (0x2A5): sys_rsx_attribute
|
||||
*/
|
||||
error_code sys_rsx_attribute(u32 packageId, u32 a2, u32 a3, u32 a4, u32 a5)
|
||||
error_code sys_rsx_attribute(cpu_thread& cpu, u32 packageId, u32 a2, u32 a3, u32 a4, u32 a5)
|
||||
{
|
||||
cpu.state += cpu_flag::wait;
|
||||
|
||||
sys_rsx.warning("sys_rsx_attribute(packageId=0x%x, a2=0x%x, a3=0x%x, a4=0x%x, a5=0x%x)", packageId, a2, a3, a4, a5);
|
||||
|
||||
return CELL_OK;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue