Blame view

drivers/input/input-compat.h 2.11 KB
2d56f3a32   Philip Langdale   Input: refactor e...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  #ifndef _INPUT_COMPAT_H
  #define _INPUT_COMPAT_H
  
  /*
   * 32bit compatibility wrappers for the input subsystem.
   *
   * Very heavily based on evdev.c - Copyright (c) 1999-2002 Vojtech Pavlik
   *
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 as published by
   * the Free Software Foundation.
   */
  
  #include <linux/compiler.h>
  #include <linux/compat.h>
  #include <linux/input.h>
  
  #ifdef CONFIG_COMPAT
  
  /* Note to the author of this code: did it ever occur to
     you why the ifdefs are needed? Think about it again. -AK */
18aecc2b6   Chris Metcalf   arch/tile: finish...
22
  #if defined(CONFIG_X86_64) || defined(CONFIG_TILE)
2d56f3a32   Philip Langdale   Input: refactor e...
23
  #  define INPUT_COMPAT_TEST is_compat_task()
2d56f3a32   Philip Langdale   Input: refactor e...
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  #elif defined(CONFIG_S390)
  #  define INPUT_COMPAT_TEST test_thread_flag(TIF_31BIT)
  #elif defined(CONFIG_MIPS)
  #  define INPUT_COMPAT_TEST test_thread_flag(TIF_32BIT_ADDR)
  #else
  #  define INPUT_COMPAT_TEST test_thread_flag(TIF_32BIT)
  #endif
  
  struct input_event_compat {
  	struct compat_timeval time;
  	__u16 type;
  	__u16 code;
  	__s32 value;
  };
  
  struct ff_periodic_effect_compat {
  	__u16 waveform;
  	__u16 period;
  	__s16 magnitude;
  	__s16 offset;
  	__u16 phase;
  
  	struct ff_envelope envelope;
  
  	__u32 custom_len;
  	compat_uptr_t custom_data;
  };
  
  struct ff_effect_compat {
  	__u16 type;
  	__s16 id;
  	__u16 direction;
  	struct ff_trigger trigger;
  	struct ff_replay replay;
  
  	union {
  		struct ff_constant_effect constant;
  		struct ff_ramp_effect ramp;
  		struct ff_periodic_effect_compat periodic;
  		struct ff_condition_effect condition[2]; /* One for each axis */
  		struct ff_rumble_effect rumble;
  	} u;
  };
  
  static inline size_t input_event_size(void)
  {
  	return INPUT_COMPAT_TEST ?
  		sizeof(struct input_event_compat) : sizeof(struct input_event);
  }
  
  #else
  
  static inline size_t input_event_size(void)
  {
  	return sizeof(struct input_event);
  }
  
  #endif /* CONFIG_COMPAT */
  
  int input_event_from_user(const char __user *buffer,
  			 struct input_event *event);
  
  int input_event_to_user(char __user *buffer,
  			const struct input_event *event);
  
  int input_ff_effect_from_user(const char __user *buffer, size_t size,
  			      struct ff_effect *effect);
  
  #endif /* _INPUT_COMPAT_H */