#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/completion.h>
#include <linux/input.h>
#include <linux/hid.h>
#include <linux/hiddev.h>
#include <linux/hyperv.h>
struct hv_input_dev_info { … };
#define SYNTHHID_INPUT_VERSION_MAJOR …
#define SYNTHHID_INPUT_VERSION_MINOR …
#define SYNTHHID_INPUT_VERSION …
#pragma pack(push, 1)
enum synthhid_msg_type { … };
struct synthhid_msg_hdr { … };
synthhid_version;
struct synthhid_protocol_request { … };
struct synthhid_protocol_response { … };
struct synthhid_device_info { … };
struct synthhid_device_info_ack { … };
struct synthhid_input_report { … };
#pragma pack(pop)
#define INPUTVSC_SEND_RING_BUFFER_SIZE …
#define INPUTVSC_RECV_RING_BUFFER_SIZE …
enum pipe_prot_msg_type { … };
struct pipe_prt_msg { … };
struct mousevsc_prt_msg { … };
struct mousevsc_dev { … };
static struct mousevsc_dev *mousevsc_alloc_device(struct hv_device *device)
{ … }
static void mousevsc_free_device(struct mousevsc_dev *device)
{ … }
static void mousevsc_on_receive_device_info(struct mousevsc_dev *input_device,
struct synthhid_device_info *device_info)
{ … }
static void mousevsc_on_receive(struct hv_device *device,
struct vmpacket_descriptor *packet)
{ … }
static void mousevsc_on_channel_callback(void *context)
{ … }
static int mousevsc_connect_to_vsp(struct hv_device *device)
{ … }
static int mousevsc_hid_parse(struct hid_device *hid)
{ … }
static int mousevsc_hid_open(struct hid_device *hid)
{ … }
static int mousevsc_hid_start(struct hid_device *hid)
{ … }
static void mousevsc_hid_close(struct hid_device *hid)
{ … }
static void mousevsc_hid_stop(struct hid_device *hid)
{ … }
static int mousevsc_hid_raw_request(struct hid_device *hid,
unsigned char report_num,
__u8 *buf, size_t len,
unsigned char rtype,
int reqtype)
{ … }
static const struct hid_ll_driver mousevsc_ll_driver = …;
static struct hid_driver mousevsc_hid_driver;
static int mousevsc_probe(struct hv_device *device,
const struct hv_vmbus_device_id *dev_id)
{ … }
static void mousevsc_remove(struct hv_device *dev)
{ … }
static int mousevsc_suspend(struct hv_device *dev)
{ … }
static int mousevsc_resume(struct hv_device *dev)
{ … }
static const struct hv_vmbus_device_id id_table[] = …;
MODULE_DEVICE_TABLE(vmbus, id_table);
static struct hv_driver mousevsc_drv = …;
static int __init mousevsc_init(void)
{ … }
static void __exit mousevsc_exit(void)
{ … }
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;
module_init(…) …;
module_exit(mousevsc_exit);