mirror of https://github.com/torvalds/linux.git
net: usb: usbnet: adhere to style
This satisfies the coding style. Signed-off-by: Oliver Neukum <oneukum@suse.com> Link: https://patch.msgid.link/20251112102610.281565-1-oneukum@suse.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
c294432be1
commit
de9c41624c
|
|
@ -142,16 +142,16 @@ int usbnet_get_endpoints(struct usbnet *dev, struct usb_interface *intf)
|
||||||
|
|
||||||
if (alt->desc.bAlternateSetting != 0 ||
|
if (alt->desc.bAlternateSetting != 0 ||
|
||||||
!(dev->driver_info->flags & FLAG_NO_SETINT)) {
|
!(dev->driver_info->flags & FLAG_NO_SETINT)) {
|
||||||
tmp = usb_set_interface (dev->udev, alt->desc.bInterfaceNumber,
|
tmp = usb_set_interface(dev->udev, alt->desc.bInterfaceNumber,
|
||||||
alt->desc.bAlternateSetting);
|
alt->desc.bAlternateSetting);
|
||||||
if (tmp < 0)
|
if (tmp < 0)
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->in = usb_rcvbulkpipe (dev->udev,
|
dev->in = usb_rcvbulkpipe(dev->udev,
|
||||||
in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
|
in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
|
||||||
dev->out = usb_sndbulkpipe (dev->udev,
|
dev->out = usb_sndbulkpipe(dev->udev,
|
||||||
out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
|
out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
|
||||||
dev->status = status;
|
dev->status = status;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -163,7 +163,7 @@ int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
|
||||||
int tmp = -1, ret;
|
int tmp = -1, ret;
|
||||||
unsigned char buf [13];
|
unsigned char buf [13];
|
||||||
|
|
||||||
ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf);
|
ret = usb_string(dev->udev, iMACAddress, buf, sizeof(buf));
|
||||||
if (ret == 12)
|
if (ret == 12)
|
||||||
tmp = hex2bin(addr, buf, 6);
|
tmp = hex2bin(addr, buf, 6);
|
||||||
if (tmp < 0) {
|
if (tmp < 0) {
|
||||||
|
|
@ -215,7 +215,7 @@ static void intr_complete(struct urb *urb)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = usb_submit_urb (urb, GFP_ATOMIC);
|
status = usb_submit_urb(urb, GFP_ATOMIC);
|
||||||
if (status != 0)
|
if (status != 0)
|
||||||
netif_err(dev, timer, dev->net,
|
netif_err(dev, timer, dev->net,
|
||||||
"intr resubmit --> %d\n", status);
|
"intr resubmit --> %d\n", status);
|
||||||
|
|
@ -231,24 +231,24 @@ static int init_status(struct usbnet *dev, struct usb_interface *intf)
|
||||||
if (!dev->driver_info->status)
|
if (!dev->driver_info->status)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
pipe = usb_rcvintpipe (dev->udev,
|
pipe = usb_rcvintpipe(dev->udev,
|
||||||
dev->status->desc.bEndpointAddress
|
dev->status->desc.bEndpointAddress
|
||||||
& USB_ENDPOINT_NUMBER_MASK);
|
& USB_ENDPOINT_NUMBER_MASK);
|
||||||
maxp = usb_maxpacket(dev->udev, pipe);
|
maxp = usb_maxpacket(dev->udev, pipe);
|
||||||
|
|
||||||
/* avoid 1 msec chatter: min 8 msec poll rate */
|
/* avoid 1 msec chatter: min 8 msec poll rate */
|
||||||
period = max ((int) dev->status->desc.bInterval,
|
period = max ((int) dev->status->desc.bInterval,
|
||||||
(dev->udev->speed == USB_SPEED_HIGH) ? 7 : 3);
|
(dev->udev->speed == USB_SPEED_HIGH) ? 7 : 3);
|
||||||
|
|
||||||
buf = kmalloc (maxp, GFP_KERNEL);
|
buf = kmalloc(maxp, GFP_KERNEL);
|
||||||
if (buf) {
|
if (buf) {
|
||||||
dev->interrupt = usb_alloc_urb (0, GFP_KERNEL);
|
dev->interrupt = usb_alloc_urb(0, GFP_KERNEL);
|
||||||
if (!dev->interrupt) {
|
if (!dev->interrupt) {
|
||||||
kfree (buf);
|
kfree(buf);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
} else {
|
} else {
|
||||||
usb_fill_int_urb(dev->interrupt, dev->udev, pipe,
|
usb_fill_int_urb(dev->interrupt, dev->udev, pipe,
|
||||||
buf, maxp, intr_complete, dev, period);
|
buf, maxp, intr_complete, dev, period);
|
||||||
dev->interrupt->transfer_flags |= URB_FREE_BUFFER;
|
dev->interrupt->transfer_flags |= URB_FREE_BUFFER;
|
||||||
dev_dbg(&intf->dev,
|
dev_dbg(&intf->dev,
|
||||||
"status ep%din, %d bytes period %d\n",
|
"status ep%din, %d bytes period %d\n",
|
||||||
|
|
@ -339,7 +339,7 @@ void usbnet_skb_return(struct usbnet *dev, struct sk_buff *skb)
|
||||||
|
|
||||||
/* only update if unset to allow minidriver rx_fixup override */
|
/* only update if unset to allow minidriver rx_fixup override */
|
||||||
if (skb->protocol == 0)
|
if (skb->protocol == 0)
|
||||||
skb->protocol = eth_type_trans (skb, dev->net);
|
skb->protocol = eth_type_trans(skb, dev->net);
|
||||||
|
|
||||||
flags = u64_stats_update_begin_irqsave(&stats64->syncp);
|
flags = u64_stats_update_begin_irqsave(&stats64->syncp);
|
||||||
u64_stats_inc(&stats64->rx_packets);
|
u64_stats_inc(&stats64->rx_packets);
|
||||||
|
|
@ -347,8 +347,8 @@ void usbnet_skb_return(struct usbnet *dev, struct sk_buff *skb)
|
||||||
u64_stats_update_end_irqrestore(&stats64->syncp, flags);
|
u64_stats_update_end_irqrestore(&stats64->syncp, flags);
|
||||||
|
|
||||||
netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
|
netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
|
||||||
skb->len + sizeof (struct ethhdr), skb->protocol);
|
skb->len + sizeof(struct ethhdr), skb->protocol);
|
||||||
memset (skb->cb, 0, sizeof (struct skb_data));
|
memset(skb->cb, 0, sizeof(struct skb_data));
|
||||||
|
|
||||||
if (skb_defer_rx_timestamp(skb))
|
if (skb_defer_rx_timestamp(skb))
|
||||||
return;
|
return;
|
||||||
|
|
@ -511,8 +511,8 @@ static int rx_submit(struct usbnet *dev, struct urb *urb, gfp_t flags)
|
||||||
skb = __netdev_alloc_skb_ip_align(dev->net, size, flags);
|
skb = __netdev_alloc_skb_ip_align(dev->net, size, flags);
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
netif_dbg(dev, rx_err, dev->net, "no rx skb\n");
|
netif_dbg(dev, rx_err, dev->net, "no rx skb\n");
|
||||||
usbnet_defer_kevent (dev, EVENT_RX_MEMORY);
|
usbnet_defer_kevent(dev, EVENT_RX_MEMORY);
|
||||||
usb_free_urb (urb);
|
usb_free_urb(urb);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -521,27 +521,27 @@ static int rx_submit(struct usbnet *dev, struct urb *urb, gfp_t flags)
|
||||||
entry->dev = dev;
|
entry->dev = dev;
|
||||||
entry->length = 0;
|
entry->length = 0;
|
||||||
|
|
||||||
usb_fill_bulk_urb (urb, dev->udev, dev->in,
|
usb_fill_bulk_urb(urb, dev->udev, dev->in,
|
||||||
skb->data, size, rx_complete, skb);
|
skb->data, size, rx_complete, skb);
|
||||||
|
|
||||||
spin_lock_irqsave (&dev->rxq.lock, lockflags);
|
spin_lock_irqsave(&dev->rxq.lock, lockflags);
|
||||||
|
|
||||||
if (netif_running (dev->net) &&
|
if (netif_running(dev->net) &&
|
||||||
netif_device_present (dev->net) &&
|
netif_device_present(dev->net) &&
|
||||||
test_bit(EVENT_DEV_OPEN, &dev->flags) &&
|
test_bit(EVENT_DEV_OPEN, &dev->flags) &&
|
||||||
!test_bit (EVENT_RX_HALT, &dev->flags) &&
|
!test_bit(EVENT_RX_HALT, &dev->flags) &&
|
||||||
!test_bit (EVENT_DEV_ASLEEP, &dev->flags) &&
|
!test_bit(EVENT_DEV_ASLEEP, &dev->flags) &&
|
||||||
!usbnet_going_away(dev)) {
|
!usbnet_going_away(dev)) {
|
||||||
switch (retval = usb_submit_urb (urb, GFP_ATOMIC)) {
|
switch (retval = usb_submit_urb(urb, GFP_ATOMIC)) {
|
||||||
case -EPIPE:
|
case -EPIPE:
|
||||||
usbnet_defer_kevent (dev, EVENT_RX_HALT);
|
usbnet_defer_kevent(dev, EVENT_RX_HALT);
|
||||||
break;
|
break;
|
||||||
case -ENOMEM:
|
case -ENOMEM:
|
||||||
usbnet_defer_kevent (dev, EVENT_RX_MEMORY);
|
usbnet_defer_kevent(dev, EVENT_RX_MEMORY);
|
||||||
break;
|
break;
|
||||||
case -ENODEV:
|
case -ENODEV:
|
||||||
netif_dbg(dev, ifdown, dev->net, "device gone\n");
|
netif_dbg(dev, ifdown, dev->net, "device gone\n");
|
||||||
netif_device_detach (dev->net);
|
netif_device_detach(dev->net);
|
||||||
break;
|
break;
|
||||||
case -EHOSTUNREACH:
|
case -EHOSTUNREACH:
|
||||||
retval = -ENOLINK;
|
retval = -ENOLINK;
|
||||||
|
|
@ -558,10 +558,10 @@ static int rx_submit(struct usbnet *dev, struct urb *urb, gfp_t flags)
|
||||||
netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
|
netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
|
||||||
retval = -ENOLINK;
|
retval = -ENOLINK;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore (&dev->rxq.lock, lockflags);
|
spin_unlock_irqrestore(&dev->rxq.lock, lockflags);
|
||||||
if (retval) {
|
if (retval) {
|
||||||
dev_kfree_skb_any (skb);
|
dev_kfree_skb_any(skb);
|
||||||
usb_free_urb (urb);
|
usb_free_urb(urb);
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
@ -572,7 +572,7 @@ static int rx_submit(struct usbnet *dev, struct urb *urb, gfp_t flags)
|
||||||
static inline int rx_process(struct usbnet *dev, struct sk_buff *skb)
|
static inline int rx_process(struct usbnet *dev, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
if (dev->driver_info->rx_fixup &&
|
if (dev->driver_info->rx_fixup &&
|
||||||
!dev->driver_info->rx_fixup (dev, skb)) {
|
!dev->driver_info->rx_fixup(dev, skb)) {
|
||||||
/* With RX_ASSEMBLE, rx_fixup() must update counters */
|
/* With RX_ASSEMBLE, rx_fixup() must update counters */
|
||||||
if (!(dev->driver_info->flags & FLAG_RX_ASSEMBLE))
|
if (!(dev->driver_info->flags & FLAG_RX_ASSEMBLE))
|
||||||
dev->net->stats.rx_errors++;
|
dev->net->stats.rx_errors++;
|
||||||
|
|
@ -605,7 +605,7 @@ static void rx_complete(struct urb *urb)
|
||||||
int urb_status = urb->status;
|
int urb_status = urb->status;
|
||||||
enum skb_state state;
|
enum skb_state state;
|
||||||
|
|
||||||
skb_put (skb, urb->actual_length);
|
skb_put(skb, urb->actual_length);
|
||||||
state = rx_done;
|
state = rx_done;
|
||||||
entry->urb = NULL;
|
entry->urb = NULL;
|
||||||
|
|
||||||
|
|
@ -621,7 +621,7 @@ static void rx_complete(struct urb *urb)
|
||||||
*/
|
*/
|
||||||
case -EPIPE:
|
case -EPIPE:
|
||||||
dev->net->stats.rx_errors++;
|
dev->net->stats.rx_errors++;
|
||||||
usbnet_defer_kevent (dev, EVENT_RX_HALT);
|
usbnet_defer_kevent(dev, EVENT_RX_HALT);
|
||||||
fallthrough;
|
fallthrough;
|
||||||
|
|
||||||
/* software-driven interface shutdown */
|
/* software-driven interface shutdown */
|
||||||
|
|
@ -639,8 +639,8 @@ static void rx_complete(struct urb *urb)
|
||||||
case -ETIME:
|
case -ETIME:
|
||||||
case -EILSEQ:
|
case -EILSEQ:
|
||||||
dev->net->stats.rx_errors++;
|
dev->net->stats.rx_errors++;
|
||||||
if (!timer_pending (&dev->delay)) {
|
if (!timer_pending(&dev->delay)) {
|
||||||
mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);
|
mod_timer(&dev->delay, jiffies + THROTTLE_JIFFIES);
|
||||||
netif_dbg(dev, link, dev->net,
|
netif_dbg(dev, link, dev->net,
|
||||||
"rx throttle %d\n", urb_status);
|
"rx throttle %d\n", urb_status);
|
||||||
}
|
}
|
||||||
|
|
@ -676,14 +676,14 @@ static void rx_complete(struct urb *urb)
|
||||||
state = defer_bh(dev, skb, &dev->rxq, state);
|
state = defer_bh(dev, skb, &dev->rxq, state);
|
||||||
|
|
||||||
if (urb) {
|
if (urb) {
|
||||||
if (netif_running (dev->net) &&
|
if (netif_running(dev->net) &&
|
||||||
!test_bit (EVENT_RX_HALT, &dev->flags) &&
|
!test_bit(EVENT_RX_HALT, &dev->flags) &&
|
||||||
state != unlink_start) {
|
state != unlink_start) {
|
||||||
rx_submit (dev, urb, GFP_ATOMIC);
|
rx_submit(dev, urb, GFP_ATOMIC);
|
||||||
usb_mark_last_busy(dev->udev);
|
usb_mark_last_busy(dev->udev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
usb_free_urb (urb);
|
usb_free_urb(urb);
|
||||||
}
|
}
|
||||||
netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n");
|
netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n");
|
||||||
}
|
}
|
||||||
|
|
@ -761,7 +761,7 @@ static int unlink_urbs(struct usbnet *dev, struct sk_buff_head *q)
|
||||||
spin_unlock_irqrestore(&q->lock, flags);
|
spin_unlock_irqrestore(&q->lock, flags);
|
||||||
// during some PM-driven resume scenarios,
|
// during some PM-driven resume scenarios,
|
||||||
// these (async) unlinks complete immediately
|
// these (async) unlinks complete immediately
|
||||||
retval = usb_unlink_urb (urb);
|
retval = usb_unlink_urb(urb);
|
||||||
if (retval != -EINPROGRESS && retval != 0)
|
if (retval != -EINPROGRESS && retval != 0)
|
||||||
netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
|
netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
|
||||||
else
|
else
|
||||||
|
|
@ -769,7 +769,7 @@ static int unlink_urbs(struct usbnet *dev, struct sk_buff_head *q)
|
||||||
usb_put_urb(urb);
|
usb_put_urb(urb);
|
||||||
spin_lock_irqsave(&q->lock, flags);
|
spin_lock_irqsave(&q->lock, flags);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore (&q->lock, flags);
|
spin_unlock_irqrestore(&q->lock, flags);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -830,7 +830,7 @@ int usbnet_stop(struct net_device *net)
|
||||||
int retval, pm, mpn;
|
int retval, pm, mpn;
|
||||||
|
|
||||||
clear_bit(EVENT_DEV_OPEN, &dev->flags);
|
clear_bit(EVENT_DEV_OPEN, &dev->flags);
|
||||||
netif_stop_queue (net);
|
netif_stop_queue(net);
|
||||||
netdev_reset_queue(net);
|
netdev_reset_queue(net);
|
||||||
|
|
||||||
netif_info(dev, ifdown, dev->net,
|
netif_info(dev, ifdown, dev->net,
|
||||||
|
|
@ -910,23 +910,29 @@ int usbnet_open(struct net_device *net)
|
||||||
}
|
}
|
||||||
|
|
||||||
// put into "known safe" state
|
// put into "known safe" state
|
||||||
if (info->reset && (retval = info->reset (dev)) < 0) {
|
if (info->reset) {
|
||||||
netif_info(dev, ifup, dev->net,
|
retval = info->reset(dev);
|
||||||
"open reset fail (%d) usbnet usb-%s-%s, %s\n",
|
if (retval < 0) {
|
||||||
retval,
|
netif_info(dev, ifup, dev->net,
|
||||||
dev->udev->bus->bus_name,
|
"open reset fail (%d) usbnet usb-%s-%s, %s\n",
|
||||||
dev->udev->devpath,
|
retval,
|
||||||
info->description);
|
dev->udev->bus->bus_name,
|
||||||
goto done;
|
dev->udev->devpath,
|
||||||
|
info->description);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hard_mtu or rx_urb_size may change in reset() */
|
/* hard_mtu or rx_urb_size may change in reset() */
|
||||||
usbnet_update_max_qlen(dev);
|
usbnet_update_max_qlen(dev);
|
||||||
|
|
||||||
// insist peer be connected
|
// insist peer be connected
|
||||||
if (info->check_connect && (retval = info->check_connect (dev)) < 0) {
|
if (info->check_connect) {
|
||||||
netif_err(dev, ifup, dev->net, "can't open; %d\n", retval);
|
retval = info->check_connect(dev);
|
||||||
goto done;
|
if (retval < 0) {
|
||||||
|
netif_err(dev, ifup, dev->net, "can't open; %d\n", retval);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start any status interrupt transfer */
|
/* start any status interrupt transfer */
|
||||||
|
|
@ -1056,7 +1062,7 @@ u32 usbnet_get_link(struct net_device *net)
|
||||||
|
|
||||||
/* If a check_connect is defined, return its result */
|
/* If a check_connect is defined, return its result */
|
||||||
if (dev->driver_info->check_connect)
|
if (dev->driver_info->check_connect)
|
||||||
return dev->driver_info->check_connect (dev) == 0;
|
return dev->driver_info->check_connect(dev) == 0;
|
||||||
|
|
||||||
/* if the device has mii operations, use those */
|
/* if the device has mii operations, use those */
|
||||||
if (dev->mii.mdio_read)
|
if (dev->mii.mdio_read)
|
||||||
|
|
@ -1085,7 +1091,7 @@ void usbnet_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *info)
|
||||||
strscpy(info->driver, dev->driver_name, sizeof(info->driver));
|
strscpy(info->driver, dev->driver_name, sizeof(info->driver));
|
||||||
strscpy(info->fw_version, dev->driver_info->description,
|
strscpy(info->fw_version, dev->driver_info->description,
|
||||||
sizeof(info->fw_version));
|
sizeof(info->fw_version));
|
||||||
usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info);
|
usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info));
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usbnet_get_drvinfo);
|
EXPORT_SYMBOL_GPL(usbnet_get_drvinfo);
|
||||||
|
|
||||||
|
|
@ -1175,64 +1181,64 @@ usbnet_deferred_kevent(struct work_struct *work)
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
/* usb_clear_halt() needs a thread context */
|
/* usb_clear_halt() needs a thread context */
|
||||||
if (test_bit (EVENT_TX_HALT, &dev->flags)) {
|
if (test_bit(EVENT_TX_HALT, &dev->flags)) {
|
||||||
unlink_urbs (dev, &dev->txq);
|
unlink_urbs(dev, &dev->txq);
|
||||||
status = usb_autopm_get_interface(dev->intf);
|
status = usb_autopm_get_interface(dev->intf);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto fail_pipe;
|
goto fail_pipe;
|
||||||
status = usb_clear_halt (dev->udev, dev->out);
|
status = usb_clear_halt(dev->udev, dev->out);
|
||||||
usb_autopm_put_interface(dev->intf);
|
usb_autopm_put_interface(dev->intf);
|
||||||
if (status < 0 &&
|
if (status < 0 &&
|
||||||
status != -EPIPE &&
|
status != -EPIPE &&
|
||||||
status != -ESHUTDOWN) {
|
status != -ESHUTDOWN) {
|
||||||
if (netif_msg_tx_err (dev))
|
if (netif_msg_tx_err(dev))
|
||||||
fail_pipe:
|
fail_pipe:
|
||||||
netdev_err(dev->net, "can't clear tx halt, status %d\n",
|
netdev_err(dev->net, "can't clear tx halt, status %d\n",
|
||||||
status);
|
status);
|
||||||
} else {
|
} else {
|
||||||
clear_bit (EVENT_TX_HALT, &dev->flags);
|
clear_bit(EVENT_TX_HALT, &dev->flags);
|
||||||
if (status != -ESHUTDOWN)
|
if (status != -ESHUTDOWN)
|
||||||
netif_wake_queue (dev->net);
|
netif_wake_queue(dev->net);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (test_bit (EVENT_RX_HALT, &dev->flags)) {
|
if (test_bit(EVENT_RX_HALT, &dev->flags)) {
|
||||||
unlink_urbs (dev, &dev->rxq);
|
unlink_urbs(dev, &dev->rxq);
|
||||||
status = usb_autopm_get_interface(dev->intf);
|
status = usb_autopm_get_interface(dev->intf);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto fail_halt;
|
goto fail_halt;
|
||||||
status = usb_clear_halt (dev->udev, dev->in);
|
status = usb_clear_halt(dev->udev, dev->in);
|
||||||
usb_autopm_put_interface(dev->intf);
|
usb_autopm_put_interface(dev->intf);
|
||||||
if (status < 0 &&
|
if (status < 0 &&
|
||||||
status != -EPIPE &&
|
status != -EPIPE &&
|
||||||
status != -ESHUTDOWN) {
|
status != -ESHUTDOWN) {
|
||||||
if (netif_msg_rx_err (dev))
|
if (netif_msg_rx_err(dev))
|
||||||
fail_halt:
|
fail_halt:
|
||||||
netdev_err(dev->net, "can't clear rx halt, status %d\n",
|
netdev_err(dev->net, "can't clear rx halt, status %d\n",
|
||||||
status);
|
status);
|
||||||
} else {
|
} else {
|
||||||
clear_bit (EVENT_RX_HALT, &dev->flags);
|
clear_bit(EVENT_RX_HALT, &dev->flags);
|
||||||
if (!usbnet_going_away(dev))
|
if (!usbnet_going_away(dev))
|
||||||
queue_work(system_bh_wq, &dev->bh_work);
|
queue_work(system_bh_wq, &dev->bh_work);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* work could resubmit itself forever if memory is tight */
|
/* work could resubmit itself forever if memory is tight */
|
||||||
if (test_bit (EVENT_RX_MEMORY, &dev->flags)) {
|
if (test_bit(EVENT_RX_MEMORY, &dev->flags)) {
|
||||||
struct urb *urb = NULL;
|
struct urb *urb = NULL;
|
||||||
int resched = 1;
|
int resched = 1;
|
||||||
|
|
||||||
if (netif_running (dev->net))
|
if (netif_running(dev->net))
|
||||||
urb = usb_alloc_urb (0, GFP_KERNEL);
|
urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||||
else
|
else
|
||||||
clear_bit (EVENT_RX_MEMORY, &dev->flags);
|
clear_bit(EVENT_RX_MEMORY, &dev->flags);
|
||||||
if (urb != NULL) {
|
if (urb != NULL) {
|
||||||
clear_bit (EVENT_RX_MEMORY, &dev->flags);
|
clear_bit(EVENT_RX_MEMORY, &dev->flags);
|
||||||
status = usb_autopm_get_interface(dev->intf);
|
status = usb_autopm_get_interface(dev->intf);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
goto fail_lowmem;
|
goto fail_lowmem;
|
||||||
}
|
}
|
||||||
if (rx_submit (dev, urb, GFP_KERNEL) == -ENOLINK)
|
if (rx_submit(dev, urb, GFP_KERNEL) == -ENOLINK)
|
||||||
resched = 0;
|
resched = 0;
|
||||||
usb_autopm_put_interface(dev->intf);
|
usb_autopm_put_interface(dev->intf);
|
||||||
fail_lowmem:
|
fail_lowmem:
|
||||||
|
|
@ -1246,7 +1252,7 @@ usbnet_deferred_kevent(struct work_struct *work)
|
||||||
const struct driver_info *info = dev->driver_info;
|
const struct driver_info *info = dev->driver_info;
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
|
|
||||||
clear_bit (EVENT_LINK_RESET, &dev->flags);
|
clear_bit(EVENT_LINK_RESET, &dev->flags);
|
||||||
status = usb_autopm_get_interface(dev->intf);
|
status = usb_autopm_get_interface(dev->intf);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto skip_reset;
|
goto skip_reset;
|
||||||
|
|
@ -1266,10 +1272,10 @@ usbnet_deferred_kevent(struct work_struct *work)
|
||||||
__handle_link_change(dev);
|
__handle_link_change(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (test_bit (EVENT_LINK_CHANGE, &dev->flags))
|
if (test_bit(EVENT_LINK_CHANGE, &dev->flags))
|
||||||
__handle_link_change(dev);
|
__handle_link_change(dev);
|
||||||
|
|
||||||
if (test_bit (EVENT_SET_RX_MODE, &dev->flags))
|
if (test_bit(EVENT_SET_RX_MODE, &dev->flags))
|
||||||
__handle_set_rx_mode(dev);
|
__handle_set_rx_mode(dev);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1298,7 +1304,7 @@ static void tx_complete(struct urb *urb)
|
||||||
|
|
||||||
switch (urb->status) {
|
switch (urb->status) {
|
||||||
case -EPIPE:
|
case -EPIPE:
|
||||||
usbnet_defer_kevent (dev, EVENT_TX_HALT);
|
usbnet_defer_kevent(dev, EVENT_TX_HALT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* software-driven interface shutdown */
|
/* software-driven interface shutdown */
|
||||||
|
|
@ -1313,13 +1319,13 @@ static void tx_complete(struct urb *urb)
|
||||||
case -ETIME:
|
case -ETIME:
|
||||||
case -EILSEQ:
|
case -EILSEQ:
|
||||||
usb_mark_last_busy(dev->udev);
|
usb_mark_last_busy(dev->udev);
|
||||||
if (!timer_pending (&dev->delay)) {
|
if (!timer_pending(&dev->delay)) {
|
||||||
mod_timer (&dev->delay,
|
mod_timer(&dev->delay,
|
||||||
jiffies + THROTTLE_JIFFIES);
|
jiffies + THROTTLE_JIFFIES);
|
||||||
netif_dbg(dev, link, dev->net,
|
netif_dbg(dev, link, dev->net,
|
||||||
"tx throttle %d\n", urb->status);
|
"tx throttle %d\n", urb->status);
|
||||||
}
|
}
|
||||||
netif_stop_queue (dev->net);
|
netif_stop_queue(dev->net);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
netif_dbg(dev, tx_err, dev->net,
|
netif_dbg(dev, tx_err, dev->net,
|
||||||
|
|
@ -1338,7 +1344,7 @@ void usbnet_tx_timeout(struct net_device *net, unsigned int txqueue)
|
||||||
{
|
{
|
||||||
struct usbnet *dev = netdev_priv(net);
|
struct usbnet *dev = netdev_priv(net);
|
||||||
|
|
||||||
unlink_urbs (dev, &dev->txq);
|
unlink_urbs(dev, &dev->txq);
|
||||||
queue_work(system_bh_wq, &dev->bh_work);
|
queue_work(system_bh_wq, &dev->bh_work);
|
||||||
/* this needs to be handled individually because the generic layer
|
/* this needs to be handled individually because the generic layer
|
||||||
* doesn't know what is sufficient and could not restore private
|
* doesn't know what is sufficient and could not restore private
|
||||||
|
|
@ -1400,7 +1406,7 @@ netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, struct net_device *net)
|
||||||
// some devices want funky USB-level framing, for
|
// some devices want funky USB-level framing, for
|
||||||
// win32 driver (usually) and/or hardware quirks
|
// win32 driver (usually) and/or hardware quirks
|
||||||
if (info->tx_fixup) {
|
if (info->tx_fixup) {
|
||||||
skb = info->tx_fixup (dev, skb, GFP_ATOMIC);
|
skb = info->tx_fixup(dev, skb, GFP_ATOMIC);
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
/* packet collected; minidriver waiting for more */
|
/* packet collected; minidriver waiting for more */
|
||||||
if (info->flags & FLAG_MULTI_PACKET)
|
if (info->flags & FLAG_MULTI_PACKET)
|
||||||
|
|
@ -1410,7 +1416,8 @@ netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, struct net_device *net)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(urb = usb_alloc_urb (0, GFP_ATOMIC))) {
|
urb = usb_alloc_urb(0, GFP_ATOMIC);
|
||||||
|
if (!urb) {
|
||||||
netif_dbg(dev, tx_err, dev->net, "no urb\n");
|
netif_dbg(dev, tx_err, dev->net, "no urb\n");
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
|
|
@ -1419,8 +1426,8 @@ netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, struct net_device *net)
|
||||||
entry->urb = urb;
|
entry->urb = urb;
|
||||||
entry->dev = dev;
|
entry->dev = dev;
|
||||||
|
|
||||||
usb_fill_bulk_urb (urb, dev->udev, dev->out,
|
usb_fill_bulk_urb(urb, dev->udev, dev->out,
|
||||||
skb->data, skb->len, tx_complete, skb);
|
skb->data, skb->len, tx_complete, skb);
|
||||||
if (dev->can_dma_sg) {
|
if (dev->can_dma_sg) {
|
||||||
if (build_dma_sg(skb, urb) < 0)
|
if (build_dma_sg(skb, urb) < 0)
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
@ -1490,8 +1497,8 @@ netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, struct net_device *net)
|
||||||
|
|
||||||
switch ((retval = usb_submit_urb (urb, GFP_ATOMIC))) {
|
switch ((retval = usb_submit_urb (urb, GFP_ATOMIC))) {
|
||||||
case -EPIPE:
|
case -EPIPE:
|
||||||
netif_stop_queue (net);
|
netif_stop_queue(net);
|
||||||
usbnet_defer_kevent (dev, EVENT_TX_HALT);
|
usbnet_defer_kevent(dev, EVENT_TX_HALT);
|
||||||
usb_autopm_put_interface_async(dev->intf);
|
usb_autopm_put_interface_async(dev->intf);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -1506,7 +1513,7 @@ netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, struct net_device *net)
|
||||||
if (dev->txq.qlen >= TX_QLEN (dev))
|
if (dev->txq.qlen >= TX_QLEN (dev))
|
||||||
netif_stop_queue (net);
|
netif_stop_queue (net);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore (&dev->txq.lock, flags);
|
spin_unlock_irqrestore(&dev->txq.lock, flags);
|
||||||
|
|
||||||
if (retval) {
|
if (retval) {
|
||||||
netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", retval);
|
netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", retval);
|
||||||
|
|
@ -1514,7 +1521,7 @@ netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, struct net_device *net)
|
||||||
dev->net->stats.tx_dropped++;
|
dev->net->stats.tx_dropped++;
|
||||||
not_drop:
|
not_drop:
|
||||||
if (skb)
|
if (skb)
|
||||||
dev_kfree_skb_any (skb);
|
dev_kfree_skb_any(skb);
|
||||||
if (urb) {
|
if (urb) {
|
||||||
kfree(urb->sg);
|
kfree(urb->sg);
|
||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
|
|
@ -1625,7 +1632,7 @@ static void usbnet_bh(struct timer_list *t)
|
||||||
queue_work(system_bh_wq, &dev->bh_work);
|
queue_work(system_bh_wq, &dev->bh_work);
|
||||||
}
|
}
|
||||||
if (dev->txq.qlen < TX_QLEN (dev))
|
if (dev->txq.qlen < TX_QLEN (dev))
|
||||||
netif_wake_queue (dev->net);
|
netif_wake_queue(dev->net);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1658,7 +1665,7 @@ void usbnet_disconnect(struct usb_interface *intf)
|
||||||
return;
|
return;
|
||||||
usbnet_mark_going_away(dev);
|
usbnet_mark_going_away(dev);
|
||||||
|
|
||||||
xdev = interface_to_usbdev (intf);
|
xdev = interface_to_usbdev(intf);
|
||||||
|
|
||||||
netif_info(dev, probe, dev->net, "unregister '%s' usb-%s-%s, %s\n",
|
netif_info(dev, probe, dev->net, "unregister '%s' usb-%s-%s, %s\n",
|
||||||
intf->dev.driver->name,
|
intf->dev.driver->name,
|
||||||
|
|
@ -1666,7 +1673,7 @@ void usbnet_disconnect(struct usb_interface *intf)
|
||||||
dev->driver_info->description);
|
dev->driver_info->description);
|
||||||
|
|
||||||
net = dev->net;
|
net = dev->net;
|
||||||
unregister_netdev (net);
|
unregister_netdev(net);
|
||||||
|
|
||||||
cancel_work_sync(&dev->kevent);
|
cancel_work_sync(&dev->kevent);
|
||||||
|
|
||||||
|
|
@ -1737,7 +1744,7 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
dev_dbg (&udev->dev, "blacklisted by %s\n", name);
|
dev_dbg (&udev->dev, "blacklisted by %s\n", name);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
xdev = interface_to_usbdev (udev);
|
xdev = interface_to_usbdev(udev);
|
||||||
interface = udev->cur_altsetting;
|
interface = udev->cur_altsetting;
|
||||||
|
|
||||||
status = -ENOMEM;
|
status = -ENOMEM;
|
||||||
|
|
@ -1767,10 +1774,10 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
skb_queue_head_init(&dev->rxq_pause);
|
skb_queue_head_init(&dev->rxq_pause);
|
||||||
spin_lock_init(&dev->bql_spinlock);
|
spin_lock_init(&dev->bql_spinlock);
|
||||||
INIT_WORK(&dev->bh_work, usbnet_bh_work);
|
INIT_WORK(&dev->bh_work, usbnet_bh_work);
|
||||||
INIT_WORK (&dev->kevent, usbnet_deferred_kevent);
|
INIT_WORK(&dev->kevent, usbnet_deferred_kevent);
|
||||||
init_usb_anchor(&dev->deferred);
|
init_usb_anchor(&dev->deferred);
|
||||||
timer_setup(&dev->delay, usbnet_bh, 0);
|
timer_setup(&dev->delay, usbnet_bh, 0);
|
||||||
mutex_init (&dev->phy_mutex);
|
mutex_init(&dev->phy_mutex);
|
||||||
mutex_init(&dev->interrupt_mutex);
|
mutex_init(&dev->interrupt_mutex);
|
||||||
dev->interrupt_count = 0;
|
dev->interrupt_count = 0;
|
||||||
|
|
||||||
|
|
@ -1792,7 +1799,7 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
// allow device-specific bind/init procedures
|
// allow device-specific bind/init procedures
|
||||||
// NOTE net->name still not usable ...
|
// NOTE net->name still not usable ...
|
||||||
if (info->bind) {
|
if (info->bind) {
|
||||||
status = info->bind (dev, udev);
|
status = info->bind(dev, udev);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto out1;
|
goto out1;
|
||||||
|
|
||||||
|
|
@ -1817,18 +1824,18 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
if (net->mtu > (dev->hard_mtu - net->hard_header_len))
|
if (net->mtu > (dev->hard_mtu - net->hard_header_len))
|
||||||
net->mtu = dev->hard_mtu - net->hard_header_len;
|
net->mtu = dev->hard_mtu - net->hard_header_len;
|
||||||
} else if (!info->in || !info->out)
|
} else if (!info->in || !info->out)
|
||||||
status = usbnet_get_endpoints (dev, udev);
|
status = usbnet_get_endpoints(dev, udev);
|
||||||
else {
|
else {
|
||||||
u8 ep_addrs[3] = {
|
u8 ep_addrs[3] = {
|
||||||
info->in + USB_DIR_IN, info->out + USB_DIR_OUT, 0
|
info->in + USB_DIR_IN, info->out + USB_DIR_OUT, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
dev->in = usb_rcvbulkpipe (xdev, info->in);
|
dev->in = usb_rcvbulkpipe(xdev, info->in);
|
||||||
dev->out = usb_sndbulkpipe (xdev, info->out);
|
dev->out = usb_sndbulkpipe(xdev, info->out);
|
||||||
if (!(info->flags & FLAG_NO_SETINT))
|
if (!(info->flags & FLAG_NO_SETINT))
|
||||||
status = usb_set_interface (xdev,
|
status = usb_set_interface(xdev,
|
||||||
interface->desc.bInterfaceNumber,
|
interface->desc.bInterfaceNumber,
|
||||||
interface->desc.bAlternateSetting);
|
interface->desc.bAlternateSetting);
|
||||||
else
|
else
|
||||||
status = 0;
|
status = 0;
|
||||||
|
|
||||||
|
|
@ -1836,7 +1843,7 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
status = -EINVAL;
|
status = -EINVAL;
|
||||||
}
|
}
|
||||||
if (status >= 0 && dev->status)
|
if (status >= 0 && dev->status)
|
||||||
status = init_status (dev, udev);
|
status = init_status(dev, udev);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto out3;
|
goto out3;
|
||||||
|
|
||||||
|
|
@ -1870,7 +1877,7 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
status = register_netdev (net);
|
status = register_netdev(net);
|
||||||
if (status)
|
if (status)
|
||||||
goto out5;
|
goto out5;
|
||||||
netif_info(dev, probe, dev->net,
|
netif_info(dev, probe, dev->net,
|
||||||
|
|
@ -1881,9 +1888,9 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
net->dev_addr);
|
net->dev_addr);
|
||||||
|
|
||||||
// ok, it's ready to go.
|
// ok, it's ready to go.
|
||||||
usb_set_intfdata (udev, dev);
|
usb_set_intfdata(udev, dev);
|
||||||
|
|
||||||
netif_device_attach (net);
|
netif_device_attach(net);
|
||||||
|
|
||||||
if (dev->driver_info->flags & FLAG_LINK_INTR)
|
if (dev->driver_info->flags & FLAG_LINK_INTR)
|
||||||
usbnet_link_change(dev, 0, 0);
|
usbnet_link_change(dev, 0, 0);
|
||||||
|
|
@ -1896,7 +1903,7 @@ usbnet_probe(struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
usb_free_urb(dev->interrupt);
|
usb_free_urb(dev->interrupt);
|
||||||
out3:
|
out3:
|
||||||
if (info->unbind)
|
if (info->unbind)
|
||||||
info->unbind (dev, udev);
|
info->unbind(dev, udev);
|
||||||
out1:
|
out1:
|
||||||
/* subdrivers must undo all they did in bind() if they
|
/* subdrivers must undo all they did in bind() if they
|
||||||
* fail it, but we may fail later and a deferred kevent
|
* fail it, but we may fail later and a deferred kevent
|
||||||
|
|
@ -1938,7 +1945,7 @@ int usbnet_suspend(struct usb_interface *intf, pm_message_t message)
|
||||||
* accelerate emptying of the rx and queues, to avoid
|
* accelerate emptying of the rx and queues, to avoid
|
||||||
* having everything error out.
|
* having everything error out.
|
||||||
*/
|
*/
|
||||||
netif_device_detach (dev->net);
|
netif_device_detach(dev->net);
|
||||||
usbnet_terminate_urbs(dev);
|
usbnet_terminate_urbs(dev);
|
||||||
__usbnet_status_stop_force(dev);
|
__usbnet_status_stop_force(dev);
|
||||||
|
|
||||||
|
|
@ -1946,7 +1953,7 @@ int usbnet_suspend(struct usb_interface *intf, pm_message_t message)
|
||||||
* reattach so runtime management can use and
|
* reattach so runtime management can use and
|
||||||
* wake the device
|
* wake the device
|
||||||
*/
|
*/
|
||||||
netif_device_attach (dev->net);
|
netif_device_attach(dev->net);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue