diff options
Diffstat (limited to 'drivers/usb/gadget/ether.c')
-rw-r--r-- | drivers/usb/gadget/ether.c | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 71d9252f74d..16edeead65a 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -141,9 +141,14 @@ struct eth_dev { */ /*-------------------------------------------------------------------------*/ -static struct eth_dev l_ethdev; -static struct eth_device l_netdev; -static struct usb_gadget_driver eth_driver; +struct ether_priv { + struct eth_dev ethdev; + struct eth_device netdev; + struct usb_gadget_driver eth_driver; +}; + +struct ether_priv eth_priv; +struct ether_priv *l_priv = ð_priv; /*-------------------------------------------------------------------------*/ @@ -1848,7 +1853,7 @@ static char rndis_resp_buf[8] __attribute__((aligned(sizeof(__le32)))); static int rndis_control_ack(struct eth_device *net) { - struct eth_dev *dev = &l_ethdev; + struct eth_dev *dev = &l_priv->ethdev; int length; struct usb_request *resp = dev->stat_req; @@ -1989,7 +1994,7 @@ static int get_ether_addr(const char *str, u8 *dev_addr) static int eth_bind(struct usb_gadget *gadget) { - struct eth_dev *dev = &l_ethdev; + struct eth_dev *dev = &l_priv->ethdev; u8 cdc = 1, zlp = 1, rndis = 1; struct usb_ep *in_ep, *out_ep, *status_ep = NULL; int status = -ENOMEM; @@ -2182,7 +2187,7 @@ autoconf_fail: /* network device setup */ - dev->net = &l_netdev; + dev->net = &l_priv->netdev; dev->cdc = cdc; dev->zlp = zlp; @@ -2330,7 +2335,7 @@ int dm_usb_init(struct eth_dev *e_dev) static int usb_eth_init(struct eth_device *netdev, bd_t *bd) { - struct eth_dev *dev = &l_ethdev; + struct eth_dev *dev = &l_priv->ethdev; struct usb_gadget *gadget; unsigned long ts; unsigned long timeout = USB_CONNECT_TIMEOUT; @@ -2374,7 +2379,15 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd) goto fail; } - if (usb_gadget_register_driver(ð_driver) < 0) + l_priv->eth_driver.speed = DEVSPEED; + l_priv->eth_driver.bind = eth_bind; + l_priv->eth_driver.unbind = eth_unbind; + l_priv->eth_driver.setup = eth_setup; + l_priv->eth_driver.reset = eth_disconnect; + l_priv->eth_driver.disconnect = eth_disconnect; + l_priv->eth_driver.suspend = eth_suspend; + l_priv->eth_driver.resume = eth_resume; + if (usb_gadget_register_driver(&l_priv->eth_driver) < 0) goto fail; dev->network_started = 0; @@ -2409,7 +2422,7 @@ static int usb_eth_send(struct eth_device *netdev, void *packet, int length) { int retval; void *rndis_pkt = NULL; - struct eth_dev *dev = &l_ethdev; + struct eth_dev *dev = &l_priv->ethdev; struct usb_request *req = dev->tx_req; unsigned long ts; unsigned long timeout = USB_CONNECT_TIMEOUT; @@ -2476,7 +2489,7 @@ drop: static int usb_eth_recv(struct eth_device *netdev) { - struct eth_dev *dev = &l_ethdev; + struct eth_dev *dev = &l_priv->ethdev; usb_gadget_handle_interrupts(0); @@ -2496,7 +2509,7 @@ static int usb_eth_recv(struct eth_device *netdev) void usb_eth_halt(struct eth_device *netdev) { - struct eth_dev *dev = &l_ethdev; + struct eth_dev *dev = &l_priv->ethdev; if (!netdev) { error("received NULL ptr"); @@ -2528,7 +2541,7 @@ void usb_eth_halt(struct eth_device *netdev) dev->network_started = 0; } - usb_gadget_unregister_driver(ð_driver); + usb_gadget_unregister_driver(&l_priv->eth_driver); #ifdef CONFIG_DM_USB device_remove(dev->usb_udev); #else @@ -2536,23 +2549,9 @@ void usb_eth_halt(struct eth_device *netdev) #endif } -static struct usb_gadget_driver eth_driver = { - .speed = DEVSPEED, - - .bind = eth_bind, - .unbind = eth_unbind, - - .setup = eth_setup, - .reset = eth_disconnect, - .disconnect = eth_disconnect, - - .suspend = eth_suspend, - .resume = eth_resume, -}; - int usb_eth_initialize(bd_t *bi) { - struct eth_device *netdev = &l_netdev; + struct eth_device *netdev = &l_priv->netdev; strlcpy(netdev->name, USB_NET_NAME, sizeof(netdev->name)); |