更新usb ethernet:

解决ax88772待机唤醒无法连接上问题.
解决dm9620上网时间稍长后导致内存不足使机器卡死问题.
This commit is contained in:
胡卫国 2011-08-10 11:01:23 +08:00
parent 8540a6d3d9
commit e8c05e1f0d
4 changed files with 17 additions and 31 deletions

View File

@ -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:

View File

@ -496,7 +496,7 @@ static void rx_complete (struct urb *urb)
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

View File

@ -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)

View File

@ -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;