diff --git a/rpcs3/Emu/Cell/lv2/sys_gpio.cpp b/rpcs3/Emu/Cell/lv2/sys_gpio.cpp index 29ec805787..bef798c5ae 100644 --- a/rpcs3/Emu/Cell/lv2/sys_gpio.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_gpio.cpp @@ -1,20 +1,21 @@ -#include "stdafx.h" +#include "stdafx.h" #include "sys_gpio.h" #include "Emu/System.h" -#include "Emu/IdManager.h" - #include "Emu/Cell/ErrorCodes.h" +LOG_CHANNEL(sys_gpio); error_code sys_gpio_get(u64 device_id, vm::ptr value) { + sys_gpio.trace("sys_gpio_get(device_id=0x%llx, value=*0x%x)", device_id, value); + if (device_id != SYS_GPIO_LED_DEVICE_ID && device_id != SYS_GPIO_DIP_SWITCH_DEVICE_ID) { return CELL_ESRCH; } - if (!vm::check_addr(value.addr(), sizeof(u64), vm::page_writable)) + if (!vm::check_addr(value.addr(), value.size(), vm::page_writable)) { return CELL_EFAULT; } @@ -27,6 +28,8 @@ error_code sys_gpio_get(u64 device_id, vm::ptr value) error_code sys_gpio_set(u64 device_id, u64 mask, u64 value) { + sys_gpio.trace("sys_gpio_set(device_id=0x%llx, mask=0x%llx, value=0x%llx)", device_id, mask, value); + // Retail consoles dont have LEDs or DIPs switches, hence the syscall can't modify devices's value switch (device_id) { diff --git a/rpcs3/Emu/Cell/lv2/sys_gpio.h b/rpcs3/Emu/Cell/lv2/sys_gpio.h index cd49166780..36490c8c88 100644 --- a/rpcs3/Emu/Cell/lv2/sys_gpio.h +++ b/rpcs3/Emu/Cell/lv2/sys_gpio.h @@ -1,12 +1,12 @@ -#pragma once +#pragma once #include "Emu/Memory/vm_ptr.h" enum : u64 { - SYS_GPIO_UNKNOWN_DEVICE_ID, - SYS_GPIO_LED_DEVICE_ID, - SYS_GPIO_DIP_SWITCH_DEVICE_ID, + SYS_GPIO_UNKNOWN_DEVICE_ID = 0x0, + SYS_GPIO_LED_DEVICE_ID = 0x1, + SYS_GPIO_DIP_SWITCH_DEVICE_ID = 0x2, }; error_code sys_gpio_get(u64 device_id, vm::ptr value);