#define pr_fmt(fmt) …
#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/uio_driver.h>
#include <linux/netdevice.h>
#include <linux/if_ether.h>
#include <linux/skbuff.h>
#include <linux/hyperv.h>
#include <linux/vmalloc.h>
#include <linux/slab.h>
#include "../hv/hyperv_vmbus.h"
#define DRIVER_VERSION …
#define DRIVER_AUTHOR …
#define DRIVER_DESC …
#define SEND_BUFFER_SIZE …
#define RECV_BUFFER_SIZE …
enum hv_uio_map { … };
struct hv_uio_private_data { … };
static int
hv_uio_irqcontrol(struct uio_info *info, s32 irq_state)
{ … }
static void hv_uio_channel_cb(void *context)
{ … }
static void hv_uio_rescind(struct vmbus_channel *channel)
{ … }
static int hv_uio_ring_mmap(struct file *filp, struct kobject *kobj,
struct bin_attribute *attr,
struct vm_area_struct *vma)
{ … }
static const struct bin_attribute ring_buffer_bin_attr = …;
static void
hv_uio_new_channel(struct vmbus_channel *new_sc)
{ … }
static void
hv_uio_cleanup(struct hv_device *dev, struct hv_uio_private_data *pdata)
{ … }
static int
hv_uio_open(struct uio_info *info, struct inode *inode)
{ … }
static int
hv_uio_release(struct uio_info *info, struct inode *inode)
{ … }
static int
hv_uio_probe(struct hv_device *dev,
const struct hv_vmbus_device_id *dev_id)
{ … }
static void
hv_uio_remove(struct hv_device *dev)
{ … }
static struct hv_driver hv_uio_drv = …;
static int __init
hyperv_module_init(void)
{ … }
static void __exit
hyperv_module_exit(void)
{ … }
module_init(…) …;
module_exit(hyperv_module_exit);
MODULE_VERSION(…);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…);
MODULE_DESCRIPTION(…);