#include <linux/string.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/scatterlist.h>
#include "usbip_common.h"
#include "stub.h"
#define DRIVER_AUTHOR …
#define DRIVER_DESC …
struct kmem_cache *stub_priv_cache;
#define MAX_BUSID …
static struct bus_id_priv busid_table[MAX_BUSID];
static DEFINE_SPINLOCK(busid_table_lock);
static void init_busid_table(void)
{ … }
static int get_busid_idx(const char *busid)
{ … }
struct bus_id_priv *get_busid_priv(const char *busid)
{ … }
void put_busid_priv(struct bus_id_priv *bid)
{ … }
static int add_match_busid(char *busid)
{ … }
int del_match_busid(char *busid)
{ … }
static ssize_t match_busid_show(struct device_driver *drv, char *buf)
{ … }
static ssize_t match_busid_store(struct device_driver *dev, const char *buf,
size_t count)
{ … }
static DRIVER_ATTR_RW(match_busid);
static int do_rebind(char *busid, struct bus_id_priv *busid_priv)
{ … }
static void stub_device_rebind(void)
{ … }
static ssize_t rebind_store(struct device_driver *dev, const char *buf,
size_t count)
{ … }
static DRIVER_ATTR_WO(rebind);
static struct stub_priv *stub_priv_pop_from_listhead(struct list_head *listhead)
{ … }
void stub_free_priv_and_urb(struct stub_priv *priv)
{ … }
static struct stub_priv *stub_priv_pop(struct stub_device *sdev)
{ … }
void stub_device_cleanup_urbs(struct stub_device *sdev)
{ … }
static int __init usbip_host_init(void)
{ … }
static void __exit usbip_host_exit(void)
{ … }
module_init(…) …;
module_exit(usbip_host_exit);
MODULE_AUTHOR(…);
MODULE_DESCRIPTION(…);
MODULE_LICENSE(…) …;