From: 胡卫国 Date: Wed, 10 Aug 2011 03:01:23 +0000 (+0800) Subject: 更新usb ethernet: X-Git-Tag: firefly_0821_release~9772^2~18^2~20 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e8c05e1f0ddcb9ea55a0bbca52d833951be399cc;p=firefly-linux-kernel-4.4.55.git 更新usb ethernet: 解决ax88772待机唤醒无法连接上问题. 解决dm9620上网时间稍长后导致内存不足使机器卡死问题. --- diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index f8ebbc07d9e5..55d770773f28 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c @@ -592,11 +592,8 @@ static int ax88772_suspend (struct usb_interface *intf, { struct usbnet *dev = usb_get_intfdata(intf); u16 *medium; - printk("----> %s %d\n",__FUNCTION__,__LINE__); - - dev->asix_suspend = 1; - wait_event_interruptible_timeout(dev->intr_wait, dev->intr_complete == 1, HZ); // wait for intr_complete, then got to otg suspend +#if 0 medium = kmalloc (2, GFP_ATOMIC); if (!medium) return axusbnet_suspend (intf, message); @@ -606,6 +603,8 @@ static int ax88772_suspend (struct usb_interface *intf, (*medium & ~AX88772_MEDIUM_RX_ENABLE), 0, 0, NULL); kfree (medium); +#endif + return axusbnet_suspend (intf, message); } @@ -621,6 +620,7 @@ 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); @@ -655,6 +655,8 @@ static int ax88772b_suspend (struct usb_interface *intf, } kfree (tmp16); +#endif + return axusbnet_suspend (intf, message); } @@ -662,7 +664,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); } @@ -674,6 +676,7 @@ static int ax88772b_resume (struct usb_interface *intf) int ret; void *buf; +#if 0 buf = kmalloc (6, GFP_KERNEL); /* Initialize MII structure */ @@ -745,6 +748,8 @@ static int ax88772b_resume (struct usb_interface *intf) */ kfree (buf); netif_carrier_off (dev->net); +#endif + return axusbnet_resume (intf); err_out: diff --git a/drivers/net/usb/axusbnet.c b/drivers/net/usb/axusbnet.c index bc930c0834df..2b559c1fe40c 100755 --- a/drivers/net/usb/axusbnet.c +++ b/drivers/net/usb/axusbnet.c @@ -496,7 +496,7 @@ block: if (netif_msg_rx_err (dev)) devdbg (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 @@ -505,10 +505,6 @@ static void intr_complete (struct urb *urb) { struct usbnet *dev = urb->context; int status = urb->status; - //devdbg(dev, "status %d running? %d\n", status,netif_running (dev->net)); - - dev->intr_complete = 1; - wake_up_interruptible(&dev->intr_wait); switch (status) { /* success */ @@ -521,28 +517,19 @@ static void intr_complete (struct urb *urb) case -ESHUTDOWN: /* hardware gone */ if (netif_msg_ifdown (dev)) devdbg (dev, "intr shutdown, code %d", status); - dwc_otg_clear_halt(urb); - break; - - // return; + 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; } - if (!netif_running (dev->net) || dev->asix_suspend) { - dev->asix_suspend = 0; - devdbg (dev, "netif_running is false"); + if (!netif_running (dev->net)) return; - } - dev->intr_complete = 0; memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); status = usb_submit_urb (urb, GFP_ATOMIC); if (status != 0 && netif_msg_timer (dev)) @@ -873,8 +860,6 @@ printk ("EVENT_TX_HALT\n"); if (status != -ESHUTDOWN) netif_wake_queue (dev->net); } - - //dwc_otg_clear_halt(urb); } if (test_bit (EVENT_RX_HALT, &dev->flags)) { printk ("EVENT_RX_HALT\n"); @@ -1258,10 +1243,6 @@ axusbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod) */ dev->hard_mtu = net->mtu + net->hard_header_len; - dev->asix_suspend = 0; - dev->intr_complete = 1; - init_waitqueue_head(&dev->intr_wait); - #if 0 // dma_supported() is deeply broken on almost all architectures // possible with some EHCI controllers diff --git a/drivers/net/usb/axusbnet.h b/drivers/net/usb/axusbnet.h index a644763b1589..ae4f4fa27457 100755 --- a/drivers/net/usb/axusbnet.h +++ b/drivers/net/usb/axusbnet.h @@ -73,9 +73,9 @@ 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; + //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/dm9620.c b/drivers/net/usb/dm9620.c index 1c735e76b8c2..34019e8927c7 100755 --- a/drivers/net/usb/dm9620.c +++ b/drivers/net/usb/dm9620.c @@ -624,7 +624,7 @@ static int dm9620_bind(struct usbnet *dev, struct usb_interface *intf) #ifdef RK2818 //harris 2010.12.27 dev->rx_urb_size = 8912; // ftp fail fixed #else - dev->rx_urb_size = dev->net->mtu + ETH_HLEN + DM_RX_OVERHEAD+1; // ftp fail fixed + dev->rx_urb_size = 2048;//dev->net->mtu + ETH_HLEN + DM_RX_OVERHEAD+1; // ftp fail fixed #endif dev->mii.dev = dev->net;