cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

input.h (20487B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 1999-2002 Vojtech Pavlik
      4 */
      5#ifndef _INPUT_H
      6#define _INPUT_H
      7
      8#include <linux/time.h>
      9#include <linux/list.h>
     10#include <uapi/linux/input.h>
     11/* Implementation details, userspace should not care about these */
     12#define ABS_MT_FIRST		ABS_MT_TOUCH_MAJOR
     13#define ABS_MT_LAST		ABS_MT_TOOL_Y
     14
     15/*
     16 * In-kernel definitions.
     17 */
     18
     19#include <linux/device.h>
     20#include <linux/fs.h>
     21#include <linux/timer.h>
     22#include <linux/mod_devicetable.h>
     23
     24struct input_dev_poller;
     25
     26/**
     27 * struct input_value - input value representation
     28 * @type: type of value (EV_KEY, EV_ABS, etc)
     29 * @code: the value code
     30 * @value: the value
     31 */
     32struct input_value {
     33	__u16 type;
     34	__u16 code;
     35	__s32 value;
     36};
     37
     38enum input_clock_type {
     39	INPUT_CLK_REAL = 0,
     40	INPUT_CLK_MONO,
     41	INPUT_CLK_BOOT,
     42	INPUT_CLK_MAX
     43};
     44
     45/**
     46 * struct input_dev - represents an input device
     47 * @name: name of the device
     48 * @phys: physical path to the device in the system hierarchy
     49 * @uniq: unique identification code for the device (if device has it)
     50 * @id: id of the device (struct input_id)
     51 * @propbit: bitmap of device properties and quirks
     52 * @evbit: bitmap of types of events supported by the device (EV_KEY,
     53 *	EV_REL, etc.)
     54 * @keybit: bitmap of keys/buttons this device has
     55 * @relbit: bitmap of relative axes for the device
     56 * @absbit: bitmap of absolute axes for the device
     57 * @mscbit: bitmap of miscellaneous events supported by the device
     58 * @ledbit: bitmap of leds present on the device
     59 * @sndbit: bitmap of sound effects supported by the device
     60 * @ffbit: bitmap of force feedback effects supported by the device
     61 * @swbit: bitmap of switches present on the device
     62 * @hint_events_per_packet: average number of events generated by the
     63 *	device in a packet (between EV_SYN/SYN_REPORT events). Used by
     64 *	event handlers to estimate size of the buffer needed to hold
     65 *	events.
     66 * @keycodemax: size of keycode table
     67 * @keycodesize: size of elements in keycode table
     68 * @keycode: map of scancodes to keycodes for this device
     69 * @getkeycode: optional legacy method to retrieve current keymap.
     70 * @setkeycode: optional method to alter current keymap, used to implement
     71 *	sparse keymaps. If not supplied default mechanism will be used.
     72 *	The method is being called while holding event_lock and thus must
     73 *	not sleep
     74 * @ff: force feedback structure associated with the device if device
     75 *	supports force feedback effects
     76 * @poller: poller structure associated with the device if device is
     77 *	set up to use polling mode
     78 * @repeat_key: stores key code of the last key pressed; used to implement
     79 *	software autorepeat
     80 * @timer: timer for software autorepeat
     81 * @rep: current values for autorepeat parameters (delay, rate)
     82 * @mt: pointer to multitouch state
     83 * @absinfo: array of &struct input_absinfo elements holding information
     84 *	about absolute axes (current value, min, max, flat, fuzz,
     85 *	resolution)
     86 * @key: reflects current state of device's keys/buttons
     87 * @led: reflects current state of device's LEDs
     88 * @snd: reflects current state of sound effects
     89 * @sw: reflects current state of device's switches
     90 * @open: this method is called when the very first user calls
     91 *	input_open_device(). The driver must prepare the device
     92 *	to start generating events (start polling thread,
     93 *	request an IRQ, submit URB, etc.). The meaning of open() is
     94 *	to start providing events to the input core.
     95 * @close: this method is called when the very last user calls
     96 *	input_close_device(). The meaning of close() is to stop
     97 *	providing events to the input core.
     98 * @flush: purges the device. Most commonly used to get rid of force
     99 *	feedback effects loaded into the device when disconnecting
    100 *	from it
    101 * @event: event handler for events sent _to_ the device, like EV_LED
    102 *	or EV_SND. The device is expected to carry out the requested
    103 *	action (turn on a LED, play sound, etc.) The call is protected
    104 *	by @event_lock and must not sleep
    105 * @grab: input handle that currently has the device grabbed (via
    106 *	EVIOCGRAB ioctl). When a handle grabs a device it becomes sole
    107 *	recipient for all input events coming from the device
    108 * @event_lock: this spinlock is taken when input core receives
    109 *	and processes a new event for the device (in input_event()).
    110 *	Code that accesses and/or modifies parameters of a device
    111 *	(such as keymap or absmin, absmax, absfuzz, etc.) after device
    112 *	has been registered with input core must take this lock.
    113 * @mutex: serializes calls to open(), close() and flush() methods
    114 * @users: stores number of users (input handlers) that opened this
    115 *	device. It is used by input_open_device() and input_close_device()
    116 *	to make sure that dev->open() is only called when the first
    117 *	user opens device and dev->close() is called when the very
    118 *	last user closes the device
    119 * @going_away: marks devices that are in a middle of unregistering and
    120 *	causes input_open_device*() fail with -ENODEV.
    121 * @dev: driver model's view of this device
    122 * @h_list: list of input handles associated with the device. When
    123 *	accessing the list dev->mutex must be held
    124 * @node: used to place the device onto input_dev_list
    125 * @num_vals: number of values queued in the current frame
    126 * @max_vals: maximum number of values queued in a frame
    127 * @vals: array of values queued in the current frame
    128 * @devres_managed: indicates that devices is managed with devres framework
    129 *	and needs not be explicitly unregistered or freed.
    130 * @timestamp: storage for a timestamp set by input_set_timestamp called
    131 *  by a driver
    132 * @inhibited: indicates that the input device is inhibited. If that is
    133 * the case then input core ignores any events generated by the device.
    134 * Device's close() is called when it is being inhibited and its open()
    135 * is called when it is being uninhibited.
    136 */
    137struct input_dev {
    138	const char *name;
    139	const char *phys;
    140	const char *uniq;
    141	struct input_id id;
    142
    143	unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];
    144
    145	unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
    146	unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
    147	unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
    148	unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
    149	unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
    150	unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
    151	unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
    152	unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
    153	unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
    154
    155	unsigned int hint_events_per_packet;
    156
    157	unsigned int keycodemax;
    158	unsigned int keycodesize;
    159	void *keycode;
    160
    161	int (*setkeycode)(struct input_dev *dev,
    162			  const struct input_keymap_entry *ke,
    163			  unsigned int *old_keycode);
    164	int (*getkeycode)(struct input_dev *dev,
    165			  struct input_keymap_entry *ke);
    166
    167	struct ff_device *ff;
    168
    169	struct input_dev_poller *poller;
    170
    171	unsigned int repeat_key;
    172	struct timer_list timer;
    173
    174	int rep[REP_CNT];
    175
    176	struct input_mt *mt;
    177
    178	struct input_absinfo *absinfo;
    179
    180	unsigned long key[BITS_TO_LONGS(KEY_CNT)];
    181	unsigned long led[BITS_TO_LONGS(LED_CNT)];
    182	unsigned long snd[BITS_TO_LONGS(SND_CNT)];
    183	unsigned long sw[BITS_TO_LONGS(SW_CNT)];
    184
    185	int (*open)(struct input_dev *dev);
    186	void (*close)(struct input_dev *dev);
    187	int (*flush)(struct input_dev *dev, struct file *file);
    188	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
    189
    190	struct input_handle __rcu *grab;
    191
    192	spinlock_t event_lock;
    193	struct mutex mutex;
    194
    195	unsigned int users;
    196	bool going_away;
    197
    198	struct device dev;
    199
    200	struct list_head	h_list;
    201	struct list_head	node;
    202
    203	unsigned int num_vals;
    204	unsigned int max_vals;
    205	struct input_value *vals;
    206
    207	bool devres_managed;
    208
    209	ktime_t timestamp[INPUT_CLK_MAX];
    210
    211	bool inhibited;
    212};
    213#define to_input_dev(d) container_of(d, struct input_dev, dev)
    214
    215/*
    216 * Verify that we are in sync with input_device_id mod_devicetable.h #defines
    217 */
    218
    219#if EV_MAX != INPUT_DEVICE_ID_EV_MAX
    220#error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match"
    221#endif
    222
    223#if KEY_MIN_INTERESTING != INPUT_DEVICE_ID_KEY_MIN_INTERESTING
    224#error "KEY_MIN_INTERESTING and INPUT_DEVICE_ID_KEY_MIN_INTERESTING do not match"
    225#endif
    226
    227#if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX
    228#error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match"
    229#endif
    230
    231#if REL_MAX != INPUT_DEVICE_ID_REL_MAX
    232#error "REL_MAX and INPUT_DEVICE_ID_REL_MAX do not match"
    233#endif
    234
    235#if ABS_MAX != INPUT_DEVICE_ID_ABS_MAX
    236#error "ABS_MAX and INPUT_DEVICE_ID_ABS_MAX do not match"
    237#endif
    238
    239#if MSC_MAX != INPUT_DEVICE_ID_MSC_MAX
    240#error "MSC_MAX and INPUT_DEVICE_ID_MSC_MAX do not match"
    241#endif
    242
    243#if LED_MAX != INPUT_DEVICE_ID_LED_MAX
    244#error "LED_MAX and INPUT_DEVICE_ID_LED_MAX do not match"
    245#endif
    246
    247#if SND_MAX != INPUT_DEVICE_ID_SND_MAX
    248#error "SND_MAX and INPUT_DEVICE_ID_SND_MAX do not match"
    249#endif
    250
    251#if FF_MAX != INPUT_DEVICE_ID_FF_MAX
    252#error "FF_MAX and INPUT_DEVICE_ID_FF_MAX do not match"
    253#endif
    254
    255#if SW_MAX != INPUT_DEVICE_ID_SW_MAX
    256#error "SW_MAX and INPUT_DEVICE_ID_SW_MAX do not match"
    257#endif
    258
    259#if INPUT_PROP_MAX != INPUT_DEVICE_ID_PROP_MAX
    260#error "INPUT_PROP_MAX and INPUT_DEVICE_ID_PROP_MAX do not match"
    261#endif
    262
    263#define INPUT_DEVICE_ID_MATCH_DEVICE \
    264	(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
    265#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION \
    266	(INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
    267
    268struct input_handle;
    269
    270/**
    271 * struct input_handler - implements one of interfaces for input devices
    272 * @private: driver-specific data
    273 * @event: event handler. This method is being called by input core with
    274 *	interrupts disabled and dev->event_lock spinlock held and so
    275 *	it may not sleep
    276 * @events: event sequence handler. This method is being called by
    277 *	input core with interrupts disabled and dev->event_lock
    278 *	spinlock held and so it may not sleep
    279 * @filter: similar to @event; separates normal event handlers from
    280 *	"filters".
    281 * @match: called after comparing device's id with handler's id_table
    282 *	to perform fine-grained matching between device and handler
    283 * @connect: called when attaching a handler to an input device
    284 * @disconnect: disconnects a handler from input device
    285 * @start: starts handler for given handle. This function is called by
    286 *	input core right after connect() method and also when a process
    287 *	that "grabbed" a device releases it
    288 * @legacy_minors: set to %true by drivers using legacy minor ranges
    289 * @minor: beginning of range of 32 legacy minors for devices this driver
    290 *	can provide
    291 * @name: name of the handler, to be shown in /proc/bus/input/handlers
    292 * @id_table: pointer to a table of input_device_ids this driver can
    293 *	handle
    294 * @h_list: list of input handles associated with the handler
    295 * @node: for placing the driver onto input_handler_list
    296 *
    297 * Input handlers attach to input devices and create input handles. There
    298 * are likely several handlers attached to any given input device at the
    299 * same time. All of them will get their copy of input event generated by
    300 * the device.
    301 *
    302 * The very same structure is used to implement input filters. Input core
    303 * allows filters to run first and will not pass event to regular handlers
    304 * if any of the filters indicate that the event should be filtered (by
    305 * returning %true from their filter() method).
    306 *
    307 * Note that input core serializes calls to connect() and disconnect()
    308 * methods.
    309 */
    310struct input_handler {
    311
    312	void *private;
    313
    314	void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
    315	void (*events)(struct input_handle *handle,
    316		       const struct input_value *vals, unsigned int count);
    317	bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
    318	bool (*match)(struct input_handler *handler, struct input_dev *dev);
    319	int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
    320	void (*disconnect)(struct input_handle *handle);
    321	void (*start)(struct input_handle *handle);
    322
    323	bool legacy_minors;
    324	int minor;
    325	const char *name;
    326
    327	const struct input_device_id *id_table;
    328
    329	struct list_head	h_list;
    330	struct list_head	node;
    331};
    332
    333/**
    334 * struct input_handle - links input device with an input handler
    335 * @private: handler-specific data
    336 * @open: counter showing whether the handle is 'open', i.e. should deliver
    337 *	events from its device
    338 * @name: name given to the handle by handler that created it
    339 * @dev: input device the handle is attached to
    340 * @handler: handler that works with the device through this handle
    341 * @d_node: used to put the handle on device's list of attached handles
    342 * @h_node: used to put the handle on handler's list of handles from which
    343 *	it gets events
    344 */
    345struct input_handle {
    346
    347	void *private;
    348
    349	int open;
    350	const char *name;
    351
    352	struct input_dev *dev;
    353	struct input_handler *handler;
    354
    355	struct list_head	d_node;
    356	struct list_head	h_node;
    357};
    358
    359struct input_dev __must_check *input_allocate_device(void);
    360struct input_dev __must_check *devm_input_allocate_device(struct device *);
    361void input_free_device(struct input_dev *dev);
    362
    363static inline struct input_dev *input_get_device(struct input_dev *dev)
    364{
    365	return dev ? to_input_dev(get_device(&dev->dev)) : NULL;
    366}
    367
    368static inline void input_put_device(struct input_dev *dev)
    369{
    370	if (dev)
    371		put_device(&dev->dev);
    372}
    373
    374static inline void *input_get_drvdata(struct input_dev *dev)
    375{
    376	return dev_get_drvdata(&dev->dev);
    377}
    378
    379static inline void input_set_drvdata(struct input_dev *dev, void *data)
    380{
    381	dev_set_drvdata(&dev->dev, data);
    382}
    383
    384int __must_check input_register_device(struct input_dev *);
    385void input_unregister_device(struct input_dev *);
    386
    387void input_reset_device(struct input_dev *);
    388
    389int input_setup_polling(struct input_dev *dev,
    390			void (*poll_fn)(struct input_dev *dev));
    391void input_set_poll_interval(struct input_dev *dev, unsigned int interval);
    392void input_set_min_poll_interval(struct input_dev *dev, unsigned int interval);
    393void input_set_max_poll_interval(struct input_dev *dev, unsigned int interval);
    394int input_get_poll_interval(struct input_dev *dev);
    395
    396int __must_check input_register_handler(struct input_handler *);
    397void input_unregister_handler(struct input_handler *);
    398
    399int __must_check input_get_new_minor(int legacy_base, unsigned int legacy_num,
    400				     bool allow_dynamic);
    401void input_free_minor(unsigned int minor);
    402
    403int input_handler_for_each_handle(struct input_handler *, void *data,
    404				  int (*fn)(struct input_handle *, void *));
    405
    406int input_register_handle(struct input_handle *);
    407void input_unregister_handle(struct input_handle *);
    408
    409int input_grab_device(struct input_handle *);
    410void input_release_device(struct input_handle *);
    411
    412int input_open_device(struct input_handle *);
    413void input_close_device(struct input_handle *);
    414
    415int input_flush_device(struct input_handle *handle, struct file *file);
    416
    417void input_set_timestamp(struct input_dev *dev, ktime_t timestamp);
    418ktime_t *input_get_timestamp(struct input_dev *dev);
    419
    420void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
    421void input_inject_event(struct input_handle *handle, unsigned int type, unsigned int code, int value);
    422
    423static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
    424{
    425	input_event(dev, EV_KEY, code, !!value);
    426}
    427
    428static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value)
    429{
    430	input_event(dev, EV_REL, code, value);
    431}
    432
    433static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value)
    434{
    435	input_event(dev, EV_ABS, code, value);
    436}
    437
    438static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
    439{
    440	input_event(dev, EV_FF_STATUS, code, value);
    441}
    442
    443static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value)
    444{
    445	input_event(dev, EV_SW, code, !!value);
    446}
    447
    448static inline void input_sync(struct input_dev *dev)
    449{
    450	input_event(dev, EV_SYN, SYN_REPORT, 0);
    451}
    452
    453static inline void input_mt_sync(struct input_dev *dev)
    454{
    455	input_event(dev, EV_SYN, SYN_MT_REPORT, 0);
    456}
    457
    458void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code);
    459
    460/**
    461 * input_set_events_per_packet - tell handlers about the driver event rate
    462 * @dev: the input device used by the driver
    463 * @n_events: the average number of events between calls to input_sync()
    464 *
    465 * If the event rate sent from a device is unusually large, use this
    466 * function to set the expected event rate. This will allow handlers
    467 * to set up an appropriate buffer size for the event stream, in order
    468 * to minimize information loss.
    469 */
    470static inline void input_set_events_per_packet(struct input_dev *dev, int n_events)
    471{
    472	dev->hint_events_per_packet = n_events;
    473}
    474
    475void input_alloc_absinfo(struct input_dev *dev);
    476void input_set_abs_params(struct input_dev *dev, unsigned int axis,
    477			  int min, int max, int fuzz, int flat);
    478void input_copy_abs(struct input_dev *dst, unsigned int dst_axis,
    479		    const struct input_dev *src, unsigned int src_axis);
    480
    481#define INPUT_GENERATE_ABS_ACCESSORS(_suffix, _item)			\
    482static inline int input_abs_get_##_suffix(struct input_dev *dev,	\
    483					  unsigned int axis)		\
    484{									\
    485	return dev->absinfo ? dev->absinfo[axis]._item : 0;		\
    486}									\
    487									\
    488static inline void input_abs_set_##_suffix(struct input_dev *dev,	\
    489					   unsigned int axis, int val)	\
    490{									\
    491	input_alloc_absinfo(dev);					\
    492	if (dev->absinfo)						\
    493		dev->absinfo[axis]._item = val;				\
    494}
    495
    496INPUT_GENERATE_ABS_ACCESSORS(val, value)
    497INPUT_GENERATE_ABS_ACCESSORS(min, minimum)
    498INPUT_GENERATE_ABS_ACCESSORS(max, maximum)
    499INPUT_GENERATE_ABS_ACCESSORS(fuzz, fuzz)
    500INPUT_GENERATE_ABS_ACCESSORS(flat, flat)
    501INPUT_GENERATE_ABS_ACCESSORS(res, resolution)
    502
    503int input_scancode_to_scalar(const struct input_keymap_entry *ke,
    504			     unsigned int *scancode);
    505
    506int input_get_keycode(struct input_dev *dev, struct input_keymap_entry *ke);
    507int input_set_keycode(struct input_dev *dev,
    508		      const struct input_keymap_entry *ke);
    509
    510bool input_match_device_id(const struct input_dev *dev,
    511			   const struct input_device_id *id);
    512
    513void input_enable_softrepeat(struct input_dev *dev, int delay, int period);
    514
    515bool input_device_enabled(struct input_dev *dev);
    516
    517extern struct class input_class;
    518
    519/**
    520 * struct ff_device - force-feedback part of an input device
    521 * @upload: Called to upload an new effect into device
    522 * @erase: Called to erase an effect from device
    523 * @playback: Called to request device to start playing specified effect
    524 * @set_gain: Called to set specified gain
    525 * @set_autocenter: Called to auto-center device
    526 * @destroy: called by input core when parent input device is being
    527 *	destroyed
    528 * @private: driver-specific data, will be freed automatically
    529 * @ffbit: bitmap of force feedback capabilities truly supported by
    530 *	device (not emulated like ones in input_dev->ffbit)
    531 * @mutex: mutex for serializing access to the device
    532 * @max_effects: maximum number of effects supported by device
    533 * @effects: pointer to an array of effects currently loaded into device
    534 * @effect_owners: array of effect owners; when file handle owning
    535 *	an effect gets closed the effect is automatically erased
    536 *
    537 * Every force-feedback device must implement upload() and playback()
    538 * methods; erase() is optional. set_gain() and set_autocenter() need
    539 * only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER
    540 * bits.
    541 *
    542 * Note that playback(), set_gain() and set_autocenter() are called with
    543 * dev->event_lock spinlock held and interrupts off and thus may not
    544 * sleep.
    545 */
    546struct ff_device {
    547	int (*upload)(struct input_dev *dev, struct ff_effect *effect,
    548		      struct ff_effect *old);
    549	int (*erase)(struct input_dev *dev, int effect_id);
    550
    551	int (*playback)(struct input_dev *dev, int effect_id, int value);
    552	void (*set_gain)(struct input_dev *dev, u16 gain);
    553	void (*set_autocenter)(struct input_dev *dev, u16 magnitude);
    554
    555	void (*destroy)(struct ff_device *);
    556
    557	void *private;
    558
    559	unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
    560
    561	struct mutex mutex;
    562
    563	int max_effects;
    564	struct ff_effect *effects;
    565	struct file *effect_owners[];
    566};
    567
    568int input_ff_create(struct input_dev *dev, unsigned int max_effects);
    569void input_ff_destroy(struct input_dev *dev);
    570
    571int input_ff_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
    572
    573int input_ff_upload(struct input_dev *dev, struct ff_effect *effect, struct file *file);
    574int input_ff_erase(struct input_dev *dev, int effect_id, struct file *file);
    575int input_ff_flush(struct input_dev *dev, struct file *file);
    576
    577int input_ff_create_memless(struct input_dev *dev, void *data,
    578		int (*play_effect)(struct input_dev *, void *, struct ff_effect *));
    579
    580#endif