drivers: usb: gadget: ether: consolidate global devices to single struct
authorMugunthan V N <mugunthanvnm@ti.com>
Fri, 18 Nov 2016 05:36:13 +0000 (11:06 +0530)
committerSimon Glass <sjg@chromium.org>
Sat, 3 Dec 2016 03:53:19 +0000 (20:53 -0700)
Consolidate the net device, usb eth device and gadget device
struct to single struct and a single global variable so that the
same can be passed as priv of ethernet driver.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/usb/gadget/ether.c

index 71d9252f74da76225028de952189bb6b5a94886a..16edeead65af028d456b27cbdd3d800b630821f0 100644 (file)
@@ -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 = &eth_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(&eth_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(&eth_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));