linux/drivers/input/input-compat.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2#ifndef _INPUT_COMPAT_H
   3#define _INPUT_COMPAT_H
   4
   5/*
   6 * 32bit compatibility wrappers for the input subsystem.
   7 *
   8 * Very heavily based on evdev.c - Copyright (c) 1999-2002 Vojtech Pavlik
   9 */
  10
  11#include <linux/compiler.h>
  12#include <linux/compat.h>
  13#include <linux/input.h>
  14
  15#ifdef CONFIG_COMPAT
  16
  17struct input_event_compat {
  18        compat_ulong_t sec;
  19        compat_ulong_t usec;
  20        __u16 type;
  21        __u16 code;
  22        __s32 value;
  23};
  24
  25struct ff_periodic_effect_compat {
  26        __u16 waveform;
  27        __u16 period;
  28        __s16 magnitude;
  29        __s16 offset;
  30        __u16 phase;
  31
  32        struct ff_envelope envelope;
  33
  34        __u32 custom_len;
  35        compat_uptr_t custom_data;
  36};
  37
  38struct ff_effect_compat {
  39        __u16 type;
  40        __s16 id;
  41        __u16 direction;
  42        struct ff_trigger trigger;
  43        struct ff_replay replay;
  44
  45        union {
  46                struct ff_constant_effect constant;
  47                struct ff_ramp_effect ramp;
  48                struct ff_periodic_effect_compat periodic;
  49                struct ff_condition_effect condition[2]; /* One for each axis */
  50                struct ff_rumble_effect rumble;
  51        } u;
  52};
  53
  54static inline size_t input_event_size(void)
  55{
  56        return (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) ?
  57                sizeof(struct input_event_compat) : sizeof(struct input_event);
  58}
  59
  60#else
  61
  62static inline size_t input_event_size(void)
  63{
  64        return sizeof(struct input_event);
  65}
  66
  67#endif /* CONFIG_COMPAT */
  68
  69int input_event_from_user(const char __user *buffer,
  70                         struct input_event *event);
  71
  72int input_event_to_user(char __user *buffer,
  73                        const struct input_event *event);
  74
  75int input_ff_effect_from_user(const char __user *buffer, size_t size,
  76                              struct ff_effect *effect);
  77
  78#endif /* _INPUT_COMPAT_H */
  79