mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 14:00:16 +02:00
Merge pull request #1239 from Sonicadvance1/fix_ioctl_definition
Linux: Fix V3d and VC4 ioctl definitions
This commit is contained in:
4 files changed
+109
-23
No files matched your search
@@ -918,6 +918,70 @@ struct drm_i915_gem_mmap_offset {
|
||||
#endif
|
||||
}
|
||||
|
||||
namespace VC4 {
|
||||
struct
|
||||
FEX_ANNOTATE("alias-x86_32-drm_vc4_perfmon_get_values")
|
||||
FEX_ANNOTATE("fex-match")
|
||||
fex_drm_vc4_perfmon_get_values {
|
||||
uint32_t id;
|
||||
compat_uint64_t values_ptr;
|
||||
|
||||
fex_drm_vc4_perfmon_get_values() = delete;
|
||||
|
||||
operator drm_vc4_perfmon_get_values() const {
|
||||
drm_vc4_perfmon_get_values val{};
|
||||
val.id = id;
|
||||
val.values_ptr = values_ptr;
|
||||
return val;
|
||||
}
|
||||
fex_drm_vc4_perfmon_get_values(drm_vc4_perfmon_get_values val) {
|
||||
id = val.id;
|
||||
values_ptr = val.values_ptr;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
namespace V3D {
|
||||
struct
|
||||
FEX_ANNOTATE("alias-x86_32-drm_v3d_submit_csd")
|
||||
FEX_ANNOTATE("fex-match")
|
||||
fex_drm_v3d_submit_csd {
|
||||
uint32_t cfg[7];
|
||||
uint32_t coef[4];
|
||||
|
||||
compat_uint64_t bo_handles;
|
||||
|
||||
uint32_t bo_handle_count;
|
||||
|
||||
uint32_t in_sync;
|
||||
|
||||
uint32_t out_sync;
|
||||
|
||||
fex_drm_v3d_submit_csd() = delete;
|
||||
|
||||
operator drm_v3d_submit_csd() const {
|
||||
drm_v3d_submit_csd val{};
|
||||
memcpy(val.cfg, cfg, sizeof(cfg));
|
||||
memcpy(val.coef, coef, sizeof(coef));
|
||||
val.bo_handles = bo_handles;
|
||||
val.bo_handle_count = bo_handle_count;
|
||||
val.in_sync = in_sync;
|
||||
val.out_sync = out_sync;
|
||||
return val;
|
||||
}
|
||||
fex_drm_v3d_submit_csd(drm_v3d_submit_csd val) {
|
||||
memcpy(cfg, val.cfg, sizeof(cfg));
|
||||
memcpy(coef, val.coef, sizeof(coef));
|
||||
bo_handles = val.bo_handles;
|
||||
bo_handle_count = val.bo_handle_count;
|
||||
in_sync = val.in_sync;
|
||||
out_sync = val.out_sync;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#include "Tests/LinuxSyscalls/x32/Ioctl/drm.inl"
|
||||
#include "Tests/LinuxSyscalls/x32/Ioctl/amdgpu_drm.inl"
|
||||
#include "Tests/LinuxSyscalls/x32/Ioctl/msm_drm.inl"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
_BASIC_META(DRM_V3D_SUBMIT_CL)
|
||||
_BASIC_META(DRM_V3D_WAIT_BO)
|
||||
_BASIC_META(DRM_V3D_CREATE_BO)
|
||||
_BASIC_META(DRM_V3D_MMAP_BO)
|
||||
_BASIC_META(DRM_V3D_GET_PARAM)
|
||||
_BASIC_META(DRM_V3D_GET_BO_OFFSET)
|
||||
_BASIC_META(DRM_V3D_SUBMIT_TFU)
|
||||
_BASIC_META(DRM_V3D_SUBMIT_CSD)
|
||||
_BASIC_META(DRM_IOCTL_V3D_SUBMIT_CL)
|
||||
_BASIC_META(DRM_IOCTL_V3D_WAIT_BO)
|
||||
_BASIC_META(DRM_IOCTL_V3D_CREATE_BO)
|
||||
_BASIC_META(DRM_IOCTL_V3D_MMAP_BO)
|
||||
_BASIC_META(DRM_IOCTL_V3D_GET_PARAM)
|
||||
_BASIC_META(DRM_IOCTL_V3D_GET_BO_OFFSET)
|
||||
_BASIC_META(DRM_IOCTL_V3D_SUBMIT_TFU)
|
||||
_CUSTOM_META(DRM_IOCTL_V3D_SUBMIT_CSD, DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CSD, FEX::HLE::x32::V3D::fex_drm_v3d_submit_csd)) // XXX: This will still be incorrect on x86-64
|
||||
@@ -1,15 +1,15 @@
|
||||
_BASIC_META(DRM_VC4_SUBMIT_CL)
|
||||
_BASIC_META(DRM_VC4_WAIT_SEQNO)
|
||||
_BASIC_META(DRM_VC4_WAIT_BO)
|
||||
_BASIC_META(DRM_VC4_CREATE_BO)
|
||||
_BASIC_META(DRM_VC4_MMAP_BO)
|
||||
_BASIC_META(DRM_VC4_CREATE_SHADER_BO)
|
||||
_BASIC_META(DRM_VC4_GET_HANG_STATE)
|
||||
_BASIC_META(DRM_VC4_GET_PARAM)
|
||||
_BASIC_META(DRM_VC4_SET_TILING)
|
||||
_BASIC_META(DRM_VC4_GET_TILING)
|
||||
_BASIC_META(DRM_VC4_LABEL_BO)
|
||||
_BASIC_META(DRM_VC4_GEM_MADVISE)
|
||||
_BASIC_META(DRM_VC4_PERFMON_CREATE)
|
||||
_BASIC_META(DRM_VC4_PERFMON_DESTROY)
|
||||
_BASIC_META(DRM_VC4_PERFMON_GET_VALUES)
|
||||
_BASIC_META(DRM_IOCTL_VC4_SUBMIT_CL)
|
||||
_BASIC_META(DRM_IOCTL_VC4_WAIT_SEQNO)
|
||||
_BASIC_META(DRM_IOCTL_VC4_WAIT_BO)
|
||||
_BASIC_META(DRM_IOCTL_VC4_CREATE_BO)
|
||||
_BASIC_META(DRM_IOCTL_VC4_MMAP_BO)
|
||||
_BASIC_META(DRM_IOCTL_VC4_CREATE_SHADER_BO)
|
||||
_BASIC_META(DRM_IOCTL_VC4_GET_HANG_STATE)
|
||||
_BASIC_META(DRM_IOCTL_VC4_GET_PARAM)
|
||||
_BASIC_META(DRM_IOCTL_VC4_SET_TILING)
|
||||
_BASIC_META(DRM_IOCTL_VC4_GET_TILING)
|
||||
_BASIC_META(DRM_IOCTL_VC4_LABEL_BO)
|
||||
_BASIC_META(DRM_IOCTL_VC4_GEM_MADVISE)
|
||||
_BASIC_META(DRM_IOCTL_VC4_PERFMON_CREATE)
|
||||
_BASIC_META(DRM_IOCTL_VC4_PERFMON_DESTROY)
|
||||
_CUSTOM_META(DRM_IOCTL_VC4_PERFMON_GET_VALUES, DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, FEX::HLE::x32::VC4::fex_drm_vc4_perfmon_get_values)) // XXX: This will still be incorrect on x86-64
|
||||
@@ -339,6 +339,17 @@ namespace FEX::HLE::x32 {
|
||||
|
||||
uint32_t VC4_Handler(int fd, uint32_t cmd, uint32_t args) {
|
||||
switch (_IOC_NR(cmd)) {
|
||||
case _IOC_NR(FEX_DRM_IOCTL_VC4_PERFMON_GET_VALUES): {
|
||||
FEX::HLE::x32::VC4::fex_drm_vc4_perfmon_get_values *val = reinterpret_cast<FEX::HLE::x32::VC4::fex_drm_vc4_perfmon_get_values*>(args);
|
||||
drm_vc4_perfmon_get_values Host_val = *val;
|
||||
uint64_t Result = ::ioctl(fd, DRM_IOCTL_VC4_PERFMON_GET_VALUES, &Host_val);
|
||||
if (Result != -1) {
|
||||
*val = Host_val;
|
||||
}
|
||||
SYSCALL_ERRNO();
|
||||
break;
|
||||
}
|
||||
|
||||
#define _BASIC_META(x) case _IOC_NR(x):
|
||||
#define _BASIC_META_VAR(x, args...) case _IOC_NR(x):
|
||||
#define _CUSTOM_META(name, ioctl_num)
|
||||
@@ -364,6 +375,17 @@ namespace FEX::HLE::x32 {
|
||||
|
||||
uint32_t V3D_Handler(int fd, uint32_t cmd, uint32_t args) {
|
||||
switch (_IOC_NR(cmd)) {
|
||||
case _IOC_NR(FEX_DRM_IOCTL_V3D_SUBMIT_CSD): {
|
||||
FEX::HLE::x32::V3D::fex_drm_v3d_submit_csd *val = reinterpret_cast<FEX::HLE::x32::V3D::fex_drm_v3d_submit_csd*>(args);
|
||||
drm_v3d_submit_csd Host_val = *val;
|
||||
uint64_t Result = ::ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, &Host_val);
|
||||
if (Result != -1) {
|
||||
*val = Host_val;
|
||||
}
|
||||
SYSCALL_ERRNO();
|
||||
break;
|
||||
}
|
||||
|
||||
#define _BASIC_META(x) case _IOC_NR(x):
|
||||
#define _BASIC_META_VAR(x, args...) case _IOC_NR(x):
|
||||
#define _CUSTOM_META(name, ioctl_num)
|
||||
|
||||
Reference in new issue
Block a user