patch-2.4.27 linux-2.4.27/drivers/usb/speedtch.c
Next file: linux-2.4.27/drivers/usb/storage/jumpshot.c
Previous file: linux-2.4.27/drivers/usb/serial/visor.c
Back to the patch index
Back to the overall index
- Lines: 119
- Date:
2004-08-07 16:26:05.811394319 -0700
- Orig file:
linux-2.4.26/drivers/usb/speedtch.c
- Orig date:
2003-11-28 10:26:20.000000000 -0800
diff -urN linux-2.4.26/drivers/usb/speedtch.c linux-2.4.27/drivers/usb/speedtch.c
@@ -83,6 +83,10 @@
#define VERBOSE_DEBUG
*/
+#if !defined (DEBUG) && defined (CONFIG_USB_DEBUG)
+# define DEBUG
+#endif
+
#include <linux/usb.h>
#ifdef DEBUG
@@ -101,8 +105,8 @@
#endif
#define DRIVER_AUTHOR "Johan Verrept, Duncan Sands <duncan.sands@free.fr>"
-#define DRIVER_DESC "Alcatel SpeedTouch USB driver"
-#define DRIVER_VERSION "1.7"
+#define DRIVER_VERSION "1.8"
+#define DRIVER_DESC "Alcatel SpeedTouch USB driver version " DRIVER_VERSION
static const char udsl_driver_name [] = "speedtch";
@@ -294,6 +298,19 @@
};
+/***********
+** misc **
+***********/
+
+static inline void udsl_pop (struct atm_vcc *vcc, struct sk_buff *skb)
+{
+ if (vcc->pop)
+ vcc->pop (vcc, skb);
+ else
+ dev_kfree_skb (skb);
+}
+
+
/*************
** decode **
*************/
@@ -717,10 +734,7 @@
if (!UDSL_SKB (skb)->num_cells) {
struct atm_vcc *vcc = UDSL_SKB (skb)->atm_data.vcc;
- if (vcc->pop)
- vcc->pop (vcc, skb);
- else
- dev_kfree_skb (skb);
+ udsl_pop (vcc, skb);
instance->current_skb = NULL;
atomic_inc (&vcc->stats->tx);
@@ -739,10 +753,7 @@
if (UDSL_SKB (skb)->atm_data.vcc == vcc) {
dbg ("udsl_cancel_send: popping skb 0x%p", skb);
__skb_unlink (skb, &instance->sndqueue);
- if (vcc->pop)
- vcc->pop (vcc, skb);
- else
- dev_kfree_skb (skb);
+ udsl_pop (vcc, skb);
}
spin_unlock_irq (&instance->sndqueue.lock);
@@ -750,10 +761,7 @@
if ((skb = instance->current_skb) && (UDSL_SKB (skb)->atm_data.vcc == vcc)) {
dbg ("udsl_cancel_send: popping current skb (0x%p)", skb);
instance->current_skb = NULL;
- if (vcc->pop)
- vcc->pop (vcc, skb);
- else
- dev_kfree_skb (skb);
+ udsl_pop (vcc, skb);
}
tasklet_enable (&instance->send_tasklet);
dbg ("udsl_cancel_send done");
@@ -762,22 +770,26 @@
static int udsl_atm_send (struct atm_vcc *vcc, struct sk_buff *skb)
{
struct udsl_instance_data *instance = vcc->dev->dev_data;
+ int err;
vdbg ("udsl_atm_send called (skb 0x%p, len %u)", skb, skb->len);
if (!instance || !instance->usb_dev) {
dbg ("udsl_atm_send: NULL data!");
- return -ENODEV;
+ err = -ENODEV;
+ goto fail;
}
if (vcc->qos.aal != ATM_AAL5) {
dbg ("udsl_atm_send: unsupported ATM type %d!", vcc->qos.aal);
- return -EINVAL;
+ err = -EINVAL;
+ goto fail;
}
if (skb->len > ATM_MAX_AAL5_PDU) {
dbg ("udsl_atm_send: packet too long (%d vs %d)!", skb->len, ATM_MAX_AAL5_PDU);
- return -EINVAL;
+ err = -EINVAL;
+ goto fail;
}
PACKETDEBUG (skb->data, skb->len);
@@ -787,6 +799,10 @@
tasklet_schedule (&instance->send_tasklet);
return 0;
+
+fail:
+ udsl_pop (vcc, skb);
+ return err;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)