更新usb ethernet驱动
author胡卫国 <hwg@rk29.(none)>
Mon, 15 Aug 2011 02:58:55 +0000 (10:58 +0800)
committer胡卫国 <hwg@rk29.(none)>
Mon, 15 Aug 2011 02:58:55 +0000 (10:58 +0800)
drivers/net/usb/asix.c
drivers/net/usb/axusbnet.c
drivers/net/usb/axusbnet.h
drivers/net/usb/usbnet.c

index 55d770773f28f05934b24a00aaf3e2e672f52671..52adcc5cb5a5496adf01a98170df1e4e576e1027 100644 (file)
@@ -49,7 +49,7 @@ KERN_INFO "ASIX USB Ethernet Adapter:v" DRV_VERSION
 KERN_INFO "    http://www.asix.com.tw\n";
 
 /* configuration of maximum bulk in size */
-static int bsize = AX88772B_MAX_BULKIN_16K;
+static int bsize = AX88772B_MAX_BULKIN_2K;
 module_param (bsize, int, 0);
 MODULE_PARM_DESC (bsize, "Maximum transfer size per bulk");
 
@@ -63,7 +63,6 @@ static void ax88772a_link_reset (struct work_struct *work);
 static void ax88772_link_reset (struct work_struct *work);
 #endif
 static int ax88772a_phy_powerup (struct usbnet *dev);
-
 #define  TAG "AX88xx------>"
 
 /* ASIX AX8817X based USB 2.0 Ethernet Devices */
@@ -230,7 +229,6 @@ static void ax88772a_status(struct usbnet *dev, struct urb *urb)
                        netif_carrier_off(dev->net);
                        ax772a_data->Event = AX_NOP;
                }
-               devdbg(dev, "link is %d PowSave %d ax772a_data->Event %d \n",link, PowSave,ax772a_data->Event);
 
                devwarn(dev, "ax88772a - Link status is: %d", link);
        }
@@ -593,18 +591,15 @@ static int ax88772_suspend (struct usb_interface *intf,
        struct usbnet *dev = usb_get_intfdata(intf);
        u16 *medium;
 
-#if 0
        medium = kmalloc (2, GFP_ATOMIC);
        if (!medium)
                return axusbnet_suspend (intf, message);
-
+/*
        ax8817x_read_cmd (dev, AX_CMD_READ_MEDIUM_MODE, 0, 0, 2, medium);
        ax8817x_write_cmd (dev, AX_CMD_WRITE_MEDIUM_MODE,
-                       (*medium & ~AX88772_MEDIUM_RX_ENABLE), 0, 0, NULL);
+                       (*medium & ~AX88772_MEDIUM_RX_ENABLE), 0, 0, NULL);*/
 
        kfree (medium);
-#endif
-
        return axusbnet_suspend (intf, message);
 }
 
@@ -620,12 +615,11 @@ static int ax88772b_suspend (struct usb_interface *intf,
        u16 *tmp16;
        u8 *opt;
 
-#if 0
        tmp16 = kmalloc (2, GFP_ATOMIC);
        if (!tmp16)
                return axusbnet_suspend (intf, message);
        opt = (u8 *)tmp16;
-
+       #if 0
        ax8817x_read_cmd (dev, AX_CMD_READ_MEDIUM_MODE, 0, 0, 2, tmp16);
        ax8817x_write_cmd (dev, AX_CMD_WRITE_MEDIUM_MODE,
                        (*tmp16 & ~AX88772_MEDIUM_RX_ENABLE), 0, 0, NULL);
@@ -653,10 +647,8 @@ static int ax88772b_suspend (struct usb_interface *intf,
                                        *opt, 0, 0, NULL);
                }
        }
-
-       kfree (tmp16);
 #endif
-
+       kfree (tmp16);
        return axusbnet_suspend (intf, message);
 }
 
@@ -664,7 +656,7 @@ static int ax88772_resume (struct usb_interface *intf)
 {
        struct usbnet *dev = usb_get_intfdata(intf);
 
-       //netif_carrier_off (dev->net);
+       netif_carrier_off (dev->net);
 
        return axusbnet_resume (intf);
 }
@@ -676,7 +668,6 @@ static int ax88772b_resume (struct usb_interface *intf)
        int ret;
        void *buf;
 
-#if 0
        buf = kmalloc (6, GFP_KERNEL);
 
        /* Initialize MII structure */
@@ -685,7 +676,7 @@ static int ax88772b_resume (struct usb_interface *intf)
        dev->mii.mdio_write = ax88772b_mdio_write_le;
        dev->mii.phy_id_mask = 0xff;
        dev->mii.reg_num_mask = 0xff;
-
+       #if 0
        /* Get the PHY id */
        if ((ret = ax8817x_read_cmd(dev, AX_CMD_READ_PHY_ID,
                        0, 0, 2, buf)) < 0) {
@@ -705,7 +696,7 @@ static int ax88772b_resume (struct usb_interface *intf)
                ret = -EIO;
                goto err_out;
        }
-
+       #endif
        /* select the embedded 10/100 Ethernet PHY */
        if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_PHY_SELECT,
                        AX_PHYSEL_SSEN | AX_PHYSEL_PSEL | AX_PHYSEL_SSMII,
@@ -716,7 +707,7 @@ static int ax88772b_resume (struct usb_interface *intf)
 
        if ((ret = ax88772a_phy_powerup (dev)) < 0)
                goto err_out;
-
+      #if 0
        /* stop MAC operation */
        if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL,
                        AX_RX_CTL_STOP, 0, 0, NULL)) < 0) {
@@ -730,6 +721,7 @@ static int ax88772b_resume (struct usb_interface *intf)
                deverr(dev, "Enabling software MII failed: %d", ret);
                goto err_out;
        }
+       #endif
        /* Get the PHY id */
 /*     ret = ax8817x_read_cmd(dev, AX_CMD_READ_PHY_ID,0, 0, 2, buf);
        devwarn(dev, "reading PHY ID: %02x", ret);
@@ -748,8 +740,6 @@ static int ax88772b_resume (struct usb_interface *intf)
 */
        kfree (buf);
        netif_carrier_off (dev->net);
-#endif
-       
        return axusbnet_resume (intf);
 
 err_out:
@@ -1662,6 +1652,7 @@ static int ax88772b_bind(struct usbnet *dev, struct usb_interface *intf)
        /* End of get EEPROM data */
 
        /* Get the MAC address from EEPROM */
+       #if 0
        memset(buf, 0, ETH_ALEN);
        for (i = 0; i < (ETH_ALEN >> 1); i++) {
                if ((ret = ax8817x_read_cmd (dev, AX_CMD_READ_EEPROM,
@@ -1670,15 +1661,32 @@ static int ax88772b_bind(struct usbnet *dev, struct usb_interface *intf)
                        goto err_out;
                }
        }
+       memcpy(dev->net->dev_addr, buf, ETH_ALEN);
+               for(i=0;i<ETH_ALEN;i++){
+           deverr(dev, "yyz________________read mac addr0: 0x%x", *((char *)buf+i));
+       }
+       #endif
+               /* Get the MAC address */
+       memset(buf, 0, ETH_ALEN);
+       if ((ret = ax8817x_read_cmd(dev, AX88772_CMD_READ_NODE_ID,
+                               0, 0, ETH_ALEN, buf)) < 0) {
+               deverr(dev, "Failed to read MAC address: %d", ret);
+               goto err_out;
+       }
        memcpy(dev->net->dev_addr, buf, ETH_ALEN);
 
+       //for(i=0;i<ETH_ALEN;i++){
+           //deverr(dev, "yyz________________read mac addr1: 0x%x", *((char *)buf+i));
+       //}
+       
+       #if 0
        /* Set the MAC address */
        if ((ret = ax8817x_write_cmd (dev, AX88772_CMD_WRITE_NODE_ID,
                        0, 0, ETH_ALEN, buf)) < 0) {
                deverr(dev, "set MAC address failed: %d", ret);
                goto err_out;
        }
-
+       #endif
        /* Initialize MII structure */
        dev->mii.dev = dev->net;
        dev->mii.mdio_read = ax8817x_mdio_read_le;
@@ -3509,7 +3517,7 @@ static struct usb_driver asix_driver = {
        .id_table =     products,
        .probe =        axusbnet_probe,
        .suspend =      ax_suspend,
-       .resume =       ax_resume,
+       .resume =       ax_resume,
        .disconnect =   axusbnet_disconnect,
 };
 
@@ -3529,4 +3537,3 @@ MODULE_AUTHOR("David Hollis");
 MODULE_DESCRIPTION("ASIX AX8817X based USB 2.0 Ethernet Devices");
 MODULE_LICENSE("GPL");
 
-
index 2b559c1fe40c384f3fbef739270f11162b2b3214..ac80d39bcc6ad844a92ddc154952babe4e008ba1 100755 (executable)
@@ -374,7 +374,7 @@ static void rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
                }
        } else {
                if (netif_msg_ifdown (dev))
-                       devdbg (dev, "rx: stopped");
+                       deverr (dev, "rx: stopped");
                retval = -ENOLINK;
        }
        spin_unlock_irqrestore (&dev->rxq.lock, lockflags);
@@ -430,7 +430,7 @@ static void rx_complete (struct urb *urb)
                        dev->stats.rx_errors++;
                        dev->stats.rx_length_errors++;
                        if (netif_msg_rx_err (dev))
-                               devdbg (dev, "rx length %d", skb->len);
+                      ;//      deverr (dev, "rx length %d", skb->len);
                }
                break;
 
@@ -448,7 +448,7 @@ static void rx_complete (struct urb *urb)
        case -ECONNRESET:               /* async unlink */
        case -ESHUTDOWN:                /* hardware gone */
                if (netif_msg_ifdown (dev))
-                       devdbg (dev, "rx shutdown, code %d", urb_status);
+               ;//     deverr (dev, "rx shutdown, code %d", urb_status);
                goto block;
 
        /* we get controller i/o faults during khubd disconnect() delays.
@@ -462,7 +462,7 @@ static void rx_complete (struct urb *urb)
                if (!timer_pending (&dev->delay)) {
                        mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);
                        if (netif_msg_link (dev))
-                               devdbg (dev, "rx throttle %d", urb_status);
+                       ;//     deverr (dev, "rx throttle %d", urb_status);
                }
 block:
                entry->state = rx_cleanup;
@@ -479,7 +479,7 @@ block:
                entry->state = rx_cleanup;
                dev->stats.rx_errors++;
                if (netif_msg_rx_err (dev))
-                       devdbg (dev, "rx status %d", urb_status);
+       ;//             deverr (dev, "rx status %d", urb_status);
                break;
        }
 
@@ -494,9 +494,9 @@ block:
                usb_free_urb (urb);
        }
        if (netif_msg_rx_err (dev))
-               devdbg (dev, "no read resubmitted");
+               deverr (dev, "no read resubmitted");
 }
-
+extern void dwc_otg_clear_halt(struct urb *_urb);
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
 static void intr_complete (struct urb *urb, struct pt_regs *regs)
 #else
@@ -517,13 +517,16 @@ static void intr_complete (struct urb *urb)
        case -ESHUTDOWN:        /* hardware gone */
                if (netif_msg_ifdown (dev))
                        devdbg (dev, "intr shutdown, code %d", status);
-               return;
+               break;
+       //      return;
 
        /* NOTE:  not throttling like RX/TX, since this endpoint
         * already polls infrequently
         */
        default:
                devdbg (dev, "intr status %d", status);
+               if(status < 0)
+                       dwc_otg_clear_halt(urb);
                break;
        }
 
@@ -597,7 +600,6 @@ int axusbnet_stop (struct net_device *net)
 #endif
        DECLARE_WAITQUEUE (wait, current);
 
-       devdbg(dev," %s %d\n",__FUNCTION__,__LINE__);
        netif_stop_queue (net);
 
        if (netif_msg_ifdown (dev))
@@ -663,7 +665,7 @@ int axusbnet_open (struct net_device *net)
        struct usbnet           *dev = netdev_priv(net);
        int                     retval = 0;
        struct driver_info      *info = dev->driver_info;
-       devdbg(dev, " %s %d\n",__FUNCTION__,__LINE__);
+
        // put into "known safe" state
        if (info->reset && (retval = info->reset (dev)) < 0) {
                if (netif_msg_ifup (dev))
@@ -1080,6 +1082,7 @@ static void axusbnet_bh (unsigned long param)
        struct usbnet           *dev = (struct usbnet *) param;
        struct sk_buff          *skb;
        struct skb_data         *entry;
+
        while ((skb = skb_dequeue (&dev->done))) {
                entry = (struct skb_data *) skb->cb;
                switch (entry->state) {
index ae4f4fa27457e5d048fdaf1b5e68274468b3312d..d492de3b80e1d6463b49ddd668aeba28e4060f22 100755 (executable)
@@ -73,9 +73,6 @@ struct usbnet {
 
        void                    *priv;  /* point to minidriver private data */
        unsigned char           rx_size;
-       //int                   asix_suspend;
-       //int                           intr_complete;
-       //wait_queue_head_t intr_wait;
 };
 
 static inline struct usb_driver *driver_of(struct usb_interface *intf)
index ca5ca5ae061d755ba2ec97f4d8285d7c079680ee..07a03c95af29b81e6c712bad4b37680260212581 100644 (file)
@@ -46,6 +46,9 @@
 
 #define DRIVER_VERSION         "22-Aug-2005"
 
+static char version[] =
+KERN_INFO "USBNET Framwork for ASIX USB Ethernet Adapter:3.2.101 Beta6"
+       " " __TIME__ " " __DATE__ "\n";
 
 /*-------------------------------------------------------------------------*/
 
@@ -252,7 +255,7 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
 }
 EXPORT_SYMBOL_GPL(usbnet_skb_return);
 
-\f
+
 /*-------------------------------------------------------------------------
  *
  * Network Device Driver (peer link to "Host Device", from USB host)
@@ -338,7 +341,7 @@ static void rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
                usb_free_urb (urb);
                return;
        }
-       skb_reserve (skb, NET_IP_ALIGN);
+       //skb_reserve (skb, NET_IP_ALIGN);  //ylz++
 
        entry = (struct skb_data *) skb->cb;
        entry->urb = urb;