Merge pull request #1239 from Sonicadvance1/fix_ioctl_definition

Linux: Fix V3d and VC4 ioctl definitions
This commit is contained in:
Ryan Houdek authored and GitHub committed 2021-08-30 19:02:46 -07:00
commit 0c484ac49c
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)