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
|
#ifdef HAVE_DRM_H
|
||||||
IOCTL_SPECIAL(DRM_IOCTL_VERSION, IOC_RW, do_ioctl_drm,
|
IOCTL_SPECIAL(DRM_IOCTL_VERSION, IOC_RW, do_ioctl_drm,
|
||||||
MK_PTR(MK_STRUCT(STRUCT_drm_version)))
|
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
|
#endif
|
||||||
|
|
||||||
#ifdef TARGET_TIOCSTART
|
#ifdef TARGET_TIOCSTART
|
||||||
|
|
|
@ -114,6 +114,7 @@
|
||||||
#include <sound/asound.h>
|
#include <sound/asound.h>
|
||||||
#ifdef HAVE_DRM_H
|
#ifdef HAVE_DRM_H
|
||||||
#include <libdrm/drm.h>
|
#include <libdrm/drm.h>
|
||||||
|
#include <libdrm/i915_drm.h>
|
||||||
#endif
|
#endif
|
||||||
#include "linux_loop.h"
|
#include "linux_loop.h"
|
||||||
#include "uname.h"
|
#include "uname.h"
|
||||||
|
@ -5426,6 +5427,40 @@ static abi_long do_ioctl_drm(const IOCTLEntry *ie, uint8_t *buf_temp,
|
||||||
return -TARGET_ENOSYS;
|
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
|
#endif
|
||||||
|
|
||||||
IOCTLEntry ioctl_entries[] = {
|
IOCTLEntry ioctl_entries[] = {
|
||||||
|
|
|
@ -1177,6 +1177,9 @@ struct target_rtc_pll_info {
|
||||||
/* drm ioctls */
|
/* drm ioctls */
|
||||||
#define TARGET_DRM_IOCTL_VERSION TARGET_IOWRU('d', 0x00)
|
#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 */
|
/* from asm/termbits.h */
|
||||||
|
|
||||||
#define TARGET_NCC 8
|
#define TARGET_NCC 8
|
||||||
|
@ -2620,6 +2623,11 @@ struct target_drm_version {
|
||||||
abi_ulong desc;
|
abi_ulong desc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct target_drm_i915_getparam {
|
||||||
|
int param;
|
||||||
|
abi_ulong value;
|
||||||
|
};
|
||||||
|
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
|
||||||
#include "errno_defs.h"
|
#include "errno_defs.h"
|
||||||
|
|
|
@ -325,6 +325,10 @@ STRUCT(drm_version,
|
||||||
TYPE_ULONG, /* desc_len */
|
TYPE_ULONG, /* desc_len */
|
||||||
TYPE_PTRVOID) /* desc */
|
TYPE_PTRVOID) /* desc */
|
||||||
|
|
||||||
|
STRUCT(drm_i915_getparam,
|
||||||
|
TYPE_INT, /* param */
|
||||||
|
TYPE_PTRVOID) /* value */
|
||||||
|
|
||||||
STRUCT(file_clone_range,
|
STRUCT(file_clone_range,
|
||||||
TYPE_LONGLONG, /* src_fd */
|
TYPE_LONGLONG, /* src_fd */
|
||||||
TYPE_ULONGLONG, /* src_offset */
|
TYPE_ULONGLONG, /* src_offset */
|
||||||
|
|
Loading…
Reference in a new issue