From 8160a258506230d1683e1427005878176959d6f5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=83=A1=E5=8D=AB=E5=9B=BD?= Date: Mon, 15 Aug 2011 10:58:55 +0800 Subject: [PATCH] =?utf8?q?=E6=9B=B4=E6=96=B0usb=20ethernet=E9=A9=B1?= =?utf8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- drivers/net/usb/asix.c | 53 +++++++++++++++++++++----------------- drivers/net/usb/axusbnet.c | 23 ++++++++++------- drivers/net/usb/axusbnet.h | 3 --- drivers/net/usb/usbnet.c | 7 +++-- 4 files changed, 48 insertions(+), 38 deletions(-) diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index 55d770773f28..52adcc5cb5a5 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c @@ -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;inet->dev_addr, buf, ETH_ALEN); + //for(i=0;imii.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"); - diff --git a/drivers/net/usb/axusbnet.c b/drivers/net/usb/axusbnet.c index 2b559c1fe40c..ac80d39bcc6a 100755 --- a/drivers/net/usb/axusbnet.c +++ b/drivers/net/usb/axusbnet.c @@ -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) { diff --git a/drivers/net/usb/axusbnet.h b/drivers/net/usb/axusbnet.h index ae4f4fa27457..d492de3b80e1 100755 --- a/drivers/net/usb/axusbnet.h +++ b/drivers/net/usb/axusbnet.h @@ -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) diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index ca5ca5ae061d..07a03c95af29 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -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); - + /*------------------------------------------------------------------------- * * 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; -- 2.34.1