#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/gfp.h>
#include <linux/usb.h>
#include <linux/usb/cdc.h>
#include <linux/netdevice.h>
#include <linux/if_arp.h>
#include <linux/if_phonet.h>
#include <linux/phonet.h>
#define PN_MEDIA_USB …
static const unsigned rxq_size = …;
struct usbpn_dev { … };
static void tx_complete(struct urb *req);
static void rx_complete(struct urb *req);
static netdev_tx_t usbpn_xmit(struct sk_buff *skb, struct net_device *dev)
{ … }
static void tx_complete(struct urb *req)
{ … }
static int rx_submit(struct usbpn_dev *pnd, struct urb *req, gfp_t gfp_flags)
{ … }
static void rx_complete(struct urb *req)
{ … }
static int usbpn_close(struct net_device *dev);
static int usbpn_open(struct net_device *dev)
{ … }
static int usbpn_close(struct net_device *dev)
{ … }
static int usbpn_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
void __user *data, int cmd)
{ … }
static const struct net_device_ops usbpn_ops = …;
static void usbpn_setup(struct net_device *dev)
{ … }
static const struct usb_device_id usbpn_ids[] = …;
MODULE_DEVICE_TABLE(usb, usbpn_ids);
static struct usb_driver usbpn_driver;
static int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
{ … }
static void usbpn_disconnect(struct usb_interface *intf)
{ … }
static struct usb_driver usbpn_driver = …;
module_usb_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;