#include <linux/module.h>
#include <linux/virtio.h>
#include <linux/virtio_config.h>
#include <linux/input.h>
#include <linux/slab.h>
#include <uapi/linux/virtio_ids.h>
#include <uapi/linux/virtio_input.h>
#include <linux/input/mt.h>
struct virtio_input { … };
static void virtinput_queue_evtbuf(struct virtio_input *vi,
struct virtio_input_event *evtbuf)
{ … }
static void virtinput_recv_events(struct virtqueue *vq)
{ … }
static int virtinput_send_status(struct virtio_input *vi,
u16 type, u16 code, s32 value)
{ … }
static void virtinput_recv_status(struct virtqueue *vq)
{ … }
static int virtinput_status(struct input_dev *idev, unsigned int type,
unsigned int code, int value)
{ … }
static u8 virtinput_cfg_select(struct virtio_input *vi,
u8 select, u8 subsel)
{ … }
static void virtinput_cfg_bits(struct virtio_input *vi, int select, int subsel,
unsigned long *bits, unsigned int bitcount)
{ … }
static void virtinput_cfg_abs(struct virtio_input *vi, int abs)
{ … }
static int virtinput_init_vqs(struct virtio_input *vi)
{ … }
static void virtinput_fill_evt(struct virtio_input *vi)
{ … }
static int virtinput_probe(struct virtio_device *vdev)
{ … }
static void virtinput_remove(struct virtio_device *vdev)
{ … }
#ifdef CONFIG_PM_SLEEP
static int virtinput_freeze(struct virtio_device *vdev)
{ … }
static int virtinput_restore(struct virtio_device *vdev)
{ … }
#endif
static unsigned int features[] = …;
static const struct virtio_device_id id_table[] = …;
static struct virtio_driver virtio_input_driver = …;
module_virtio_driver(…) …;
MODULE_DEVICE_TABLE(virtio, id_table);
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;