#ifndef __USBIP_VUDC_H
#define __USBIP_VUDC_H
#include <linux/platform_device.h>
#include <linux/usb.h>
#include <linux/usb/gadget.h>
#include <linux/usb/ch9.h>
#include <linux/list.h>
#include <linux/timer.h>
#include <linux/time.h>
#include <linux/sysfs.h>
#include "usbip_common.h"
#define GADGET_NAME …
struct vep { … };
struct vrequest { … };
struct urbp { … };
struct v_unlink { … };
enum tx_type { … };
struct tx_item { … };
enum tr_state { … };
struct transfer_timer { … };
struct vudc { … };
struct vudc_device { … };
extern const struct attribute_group *vudc_groups[];
static inline struct vep *to_vep(struct usb_ep *_ep)
{ … }
static inline struct vrequest *to_vrequest(
struct usb_request *_req)
{ … }
static inline struct vudc *usb_gadget_to_vudc(
struct usb_gadget *_gadget)
{ … }
static inline struct vudc *ep_to_vudc(struct vep *ep)
{ … }
int get_gadget_descs(struct vudc *udc);
int v_tx_loop(void *data);
void v_enqueue_ret_unlink(struct vudc *udc, __u32 seqnum, __u32 status);
void v_enqueue_ret_submit(struct vudc *udc, struct urbp *urb_p);
int v_rx_loop(void *data);
void v_init_timer(struct vudc *udc);
void v_start_timer(struct vudc *udc);
void v_kick_timer(struct vudc *udc, unsigned long time);
void v_stop_timer(struct vudc *udc);
struct urbp *alloc_urbp(void);
void free_urbp_and_urb(struct urbp *urb_p);
struct vep *vudc_find_endpoint(struct vudc *udc, u8 address);
struct vudc_device *alloc_vudc_device(int devid);
void put_vudc_device(struct vudc_device *udc_dev);
int vudc_probe(struct platform_device *pdev);
void vudc_remove(struct platform_device *pdev);
#endif