mirror of https://github.com/xemu-project/xemu.git
linux-user: syscall: ioctls: support DRM_IOCTL_I915_GETPARAM
Another DRM_IOCTL_I915 patches will be sent next. Signed-off-by: Chen Gang <chengang@emindsoft.com.cn> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20200802133938.12055-1-chengang@emindsoft.com.cn> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
b09d64064b
commit
913b03c264
|
@ -581,6 +581,9 @@
|
|||
#ifdef HAVE_DRM_H
|
||||
IOCTL_SPECIAL(DRM_IOCTL_VERSION, IOC_RW, do_ioctl_drm,
|
||||
MK_PTR(MK_STRUCT(STRUCT_drm_version)))
|
||||
|
||||
IOCTL_SPECIAL(DRM_IOCTL_I915_GETPARAM, IOC_RW, do_ioctl_drm_i915,
|
||||
MK_PTR(MK_STRUCT(STRUCT_drm_i915_getparam)))
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_TIOCSTART
|
||||
|
|
|
@ -114,6 +114,7 @@
|
|||
#include <sound/asound.h>
|
||||
#ifdef HAVE_DRM_H
|
||||
#include <libdrm/drm.h>
|
||||
#include <libdrm/i915_drm.h>
|
||||
#endif
|
||||
#include "linux_loop.h"
|
||||
#include "uname.h"
|
||||
|
@ -5426,6 +5427,40 @@ static abi_long do_ioctl_drm(const IOCTLEntry *ie, uint8_t *buf_temp,
|
|||
return -TARGET_ENOSYS;
|
||||
}
|
||||
|
||||
static abi_long do_ioctl_drm_i915_getparam(const IOCTLEntry *ie,
|
||||
struct drm_i915_getparam *gparam,
|
||||
int fd, abi_long arg)
|
||||
{
|
||||
abi_long ret;
|
||||
int value;
|
||||
struct target_drm_i915_getparam *target_gparam;
|
||||
|
||||
if (!lock_user_struct(VERIFY_READ, target_gparam, arg, 0)) {
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
|
||||
__get_user(gparam->param, &target_gparam->param);
|
||||
gparam->value = &value;
|
||||
ret = get_errno(safe_ioctl(fd, ie->host_cmd, gparam));
|
||||
put_user_s32(value, target_gparam->value);
|
||||
|
||||
unlock_user_struct(target_gparam, arg, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static abi_long do_ioctl_drm_i915(const IOCTLEntry *ie, uint8_t *buf_temp,
|
||||
int fd, int cmd, abi_long arg)
|
||||
{
|
||||
switch (ie->host_cmd) {
|
||||
case DRM_IOCTL_I915_GETPARAM:
|
||||
return do_ioctl_drm_i915_getparam(ie,
|
||||
(struct drm_i915_getparam *)buf_temp,
|
||||
fd, arg);
|
||||
default:
|
||||
return -TARGET_ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
IOCTLEntry ioctl_entries[] = {
|
||||
|
|
|
@ -1177,6 +1177,9 @@ struct target_rtc_pll_info {
|
|||
/* drm ioctls */
|
||||
#define TARGET_DRM_IOCTL_VERSION TARGET_IOWRU('d', 0x00)
|
||||
|
||||
/* drm i915 ioctls */
|
||||
#define TARGET_DRM_IOCTL_I915_GETPARAM TARGET_IOWRU('d', 0x46)
|
||||
|
||||
/* from asm/termbits.h */
|
||||
|
||||
#define TARGET_NCC 8
|
||||
|
@ -2620,6 +2623,11 @@ struct target_drm_version {
|
|||
abi_ulong desc;
|
||||
};
|
||||
|
||||
struct target_drm_i915_getparam {
|
||||
int param;
|
||||
abi_ulong value;
|
||||
};
|
||||
|
||||
#include "socket.h"
|
||||
|
||||
#include "errno_defs.h"
|
||||
|
|
|
@ -325,6 +325,10 @@ STRUCT(drm_version,
|
|||
TYPE_ULONG, /* desc_len */
|
||||
TYPE_PTRVOID) /* desc */
|
||||
|
||||
STRUCT(drm_i915_getparam,
|
||||
TYPE_INT, /* param */
|
||||
TYPE_PTRVOID) /* value */
|
||||
|
||||
STRUCT(file_clone_range,
|
||||
TYPE_LONGLONG, /* src_fd */
|
||||
TYPE_ULONGLONG, /* src_offset */
|
||||
|
|
Loading…
Reference in New Issue