speedtouch: a pile of cosmetic changes to make me feel happier (no code changes).


 speedtouch.c |  379 +++++++++++++++++++++++++++++------------------------------
 1 files changed, 192 insertions(+), 187 deletions(-)


diff -Nru a/drivers/usb/misc/speedtouch.c b/drivers/usb/misc/speedtouch.c
--- a/drivers/usb/misc/speedtouch.c     Fri Jan 24 17:09:12 2003
+++ b/drivers/usb/misc/speedtouch.c     Fri Jan 24 17:09:12 2003
@@ -119,7 +119,7 @@
 
 /* context declarations */
 
-struct udsl_data_ctx {
+struct udsl_receiver {
        struct list_head list;
        struct sk_buff *skb;
        struct urb *urb;
@@ -142,7 +142,6 @@
 
        /* usb device part */
        struct usb_device *usb_dev;
-       struct udsl_data_ctx rcvbufs [UDSL_NUMBER_RCV_URBS];
        struct sk_buff_head sndqueue;
        struct udsl_usb_send_data_context send_ctx [UDSL_NUMBER_SND_URBS];
        int data_started;
@@ -153,13 +152,15 @@
        struct atmsar_vcc_data *atmsar_vcc_list;
 
        /* receiving */
+       struct udsl_receiver all_receivers [UDSL_NUMBER_RCV_URBS];
+
        spinlock_t spare_receivers_lock;
        struct list_head spare_receivers;
 
        spinlock_t completed_receivers_lock;
        struct list_head completed_receivers;
 
-       struct tasklet_struct recvqueue_tasklet;
+       struct tasklet_struct receive_tasklet;
 };
 
 static const char udsl_driver_name [] = "Alcatel SpeedTouch USB";
@@ -178,8 +179,7 @@
 static void udsl_atm_close (struct atm_vcc *vcc);
 static int udsl_atm_ioctl (struct atm_dev *dev, unsigned int cmd, void *arg);
 static int udsl_atm_send (struct atm_vcc *vcc, struct sk_buff *skb);
-static int udsl_atm_proc_read (struct atm_dev *atm_dev, loff_t * pos, char *page);
-static void udsl_atm_processqueue (unsigned long data);
+static int udsl_atm_proc_read (struct atm_dev *atm_dev, loff_t *pos, char *page);
 
 static struct atmdev_ops udsl_atm_devops = {
        .open =         udsl_atm_open,
@@ -203,7 +203,6 @@
                        struct sk_buff *skb);
 static int udsl_usb_ioctl (struct usb_interface *intf, unsigned int code, void 
*user_data);
 static int udsl_usb_cancelsends (struct udsl_instance_data *instance, struct atm_vcc 
*vcc);
-static void udsl_usb_data_receive (struct urb *urb, struct pt_regs *regs);
 
 static struct usb_driver udsl_usb_driver = {
        .name =         udsl_driver_name,
@@ -214,6 +213,163 @@
 };
 
 
+/**************
+**  receive  **
+**************/
+
+static void udsl_complete_receive (struct urb *urb, struct pt_regs *regs)
+{
+       struct udsl_instance_data *instance;
+       struct udsl_receiver *rcv;
+       unsigned long flags;
+
+       PDEBUG ("udsl_complete_receive entered\n");
+
+       if (!urb || !(rcv = urb->context) || !(instance = rcv->instance)) {
+               PDEBUG ("udsl_complete_receive: bad urb!\n");
+               return;
+       }
+
+       /* may not be in_interrupt() */
+       spin_lock_irqsave (&instance->completed_receivers_lock, flags);
+       list_add_tail (&rcv->list, &instance->completed_receivers);
+       spin_unlock_irqrestore (&instance->completed_receivers_lock, flags);
+       PDEBUG ("udsl_complete_receive: scheduling tasklet\n");
+       tasklet_schedule (&instance->receive_tasklet);
+}
+
+static void udsl_process_receive (unsigned long data)
+{
+       struct udsl_instance_data *instance = (struct udsl_instance_data *) data;
+       struct udsl_receiver *rcv;
+       unsigned long flags;
+       struct sk_buff skb;
+       struct urb *urb;
+       struct atmsar_vcc_data *atmsar_vcc = NULL;
+       struct sk_buff *new = NULL, *tmp = NULL;
+
+       PDEBUG ("udsl_process_receive entered\n");
+
+       spin_lock_irqsave (&instance->completed_receivers_lock, flags);
+       while (!list_empty (&instance->completed_receivers)) {
+               rcv = list_entry (instance->completed_receivers.next, struct 
+udsl_receiver, list);
+               list_del (&rcv->list);
+               spin_unlock_irqrestore (&instance->completed_receivers_lock, flags);
+
+               urb = rcv->urb;
+               PDEBUG ("udsl_process_receive: got packet %p with length %d and status 
+%d\n", urb, urb->actual_length, urb->status);
+
+               switch (urb->status) {
+               case 0:
+                       PDEBUG ("udsl_process_receive: processing urb with rcv %p, urb 
+%p, skb %p\n", rcv, urb, rcv->skb);
+
+                       /* update the skb structure */
+                       skb = *rcv->skb;
+                       skb_put (&skb, urb->actual_length);
+
+                       PDEBUG ("skb->len = %d\n", skb.len);
+                       PACKETDEBUG (skb.data, skb.len);
+
+                       while ((new =
+                               atmsar_decode_rawcell (instance->atmsar_vcc_list, &skb,
+                                                      &atmsar_vcc)) != NULL) {
+                               PDEBUG ("(after cell processing)skb->len = %d\n", 
+new->len);
+
+                               switch (atmsar_vcc->type) {
+                               case ATMSAR_TYPE_AAL5:
+                                       tmp = new;
+                                       new = atmsar_decode_aal5 (atmsar_vcc, new);
+
+                                       /* we can't send NULL skbs upstream, the ATM 
+layer would try to close the vcc... */
+                                       if (new) {
+                                               PDEBUG ("(after aal5 decap) skb->len = 
+%d\n", new->len);
+                                               if (new->len && atm_charge 
+(atmsar_vcc->vcc, new->truesize)) {
+                                                       PACKETDEBUG (new->data, 
+new->len);
+                                                       atmsar_vcc->vcc->push 
+(atmsar_vcc->vcc, new);
+                                               } else {
+                                                       PDEBUG
+                                                           ("dropping incoming packet 
+: rx_inuse = %d, vcc->sk->rcvbuf = %d, skb->true_size = %d\n",
+                                                            atomic_read 
+(&atmsar_vcc->vcc->rx_inuse),
+                                                            
+atmsar_vcc->vcc->sk->rcvbuf, new->truesize);
+                                                       dev_kfree_skb (new);
+                                               }
+                                       } else {
+                                               PDEBUG ("atmsar_decode_aal5 returned 
+NULL!\n");
+                                               dev_kfree_skb (tmp);
+                                       }
+                                       break;
+                               default:
+                                       /* not supported. we delete the skb. */
+                                       printk (KERN_INFO
+                                               "SpeedTouch USB: illegal vcc type. 
+Dropping packet.\n");
+                                       dev_kfree_skb (new);
+                                       break;
+                               }
+                       }
+
+                       usb_fill_bulk_urb (urb,
+                                          instance->usb_dev,
+                                          usb_rcvbulkpipe (instance->usb_dev, 
+UDSL_ENDPOINT_DATA_IN),
+                                          (unsigned char *) rcv->skb->data,
+                                          UDSL_RECEIVE_BUFFER_SIZE,
+                                          udsl_complete_receive,
+                                          rcv);
+                       if (!usb_submit_urb (urb, GFP_ATOMIC))
+                               break;
+                       PDEBUG ("udsl_process_receive: submission failed\n");
+                       /* fall through */
+               default: /* error or urb unlinked */
+                       PDEBUG ("udsl_process_receive: adding to spare_receivers\n");
+                       spin_lock_irqsave (&instance->spare_receivers_lock, flags);
+                       list_add (&rcv->list, &instance->spare_receivers);
+                       spin_unlock_irqrestore (&instance->spare_receivers_lock, 
+flags);
+                       break;
+               } /* switch */
+
+               spin_lock_irqsave (&instance->completed_receivers_lock, flags);
+       } /* while */
+       spin_unlock_irqrestore (&instance->completed_receivers_lock, flags);
+       PDEBUG ("udsl_process_receive successful\n");
+}
+
+static void udsl_fire_receivers (struct udsl_instance_data *instance)
+{
+       struct list_head receivers, *pos, *n;
+       unsigned long flags;
+
+       INIT_LIST_HEAD (&receivers);
+
+       down (&instance->serialize);
+
+       spin_lock_irqsave (&instance->spare_receivers_lock, flags);
+       list_splice_init (&instance->spare_receivers, &receivers);
+       spin_unlock_irqrestore (&instance->spare_receivers_lock, flags);
+
+       list_for_each_safe (pos, n, &receivers) {
+               struct udsl_receiver *rcv = list_entry (pos, struct udsl_receiver, 
+list);
+
+               PDEBUG ("udsl_fire_receivers: firing urb %p\n", rcv->urb);
+
+               usb_fill_bulk_urb (rcv->urb,
+                                  instance->usb_dev,
+                                  usb_rcvbulkpipe (instance->usb_dev, 
+UDSL_ENDPOINT_DATA_IN),
+                                  (unsigned char *) rcv->skb->data,
+                                  UDSL_RECEIVE_BUFFER_SIZE,
+                                  udsl_complete_receive,
+                                  rcv);
+
+               if (usb_submit_urb (rcv->urb, GFP_KERNEL) < 0) {
+                       PDEBUG ("udsl_fire_receivers: submit failed!\n");
+                       spin_lock_irqsave (&instance->spare_receivers_lock, flags);
+                       list_move (pos, &instance->spare_receivers);
+                       spin_unlock_irqrestore (&instance->spare_receivers_lock, 
+flags);
+               }
+       }
+
+       up (&instance->serialize);
+}
+
+
 /************
 **   ATM   **
 ************/
@@ -339,106 +495,13 @@
                break;
        default:
                return -EINVAL;
-       };
+       }
 
        PDEBUG ("udsl_atm_send unsuccessfull\n");
        return 0;
       nomem:
        vcc->pop (vcc, skb);
        return -ENOMEM;
-};
-
-
-static void udsl_atm_processqueue (unsigned long data)
-{
-       struct udsl_instance_data *instance = (struct udsl_instance_data *) data;
-       struct udsl_data_ctx *ctx;
-       unsigned long flags;
-       struct sk_buff skb;
-       struct urb *urb;
-       struct atmsar_vcc_data *atmsar_vcc = NULL;
-       struct sk_buff *new = NULL, *tmp = NULL;
-
-       PDEBUG ("udsl_atm_processqueue entered\n");
-
-       spin_lock_irqsave (&instance->completed_receivers_lock, flags);
-       while (!list_empty (&instance->completed_receivers)) {
-               ctx = list_entry (instance->completed_receivers.next, struct 
udsl_data_ctx, list);
-               list_del (&ctx->list);
-               spin_unlock_irqrestore (&instance->completed_receivers_lock, flags);
-
-               urb = ctx->urb;
-               PDEBUG ("udsl_atm_processqueue: got packet %p with length %d and 
status %d\n", urb, urb->actual_length, urb->status);
-
-               switch (urb->status) {
-               case 0:
-                       PDEBUG ("udsl_atm_processqueue: processing urb with ctx %p, 
urb %p, skb %p\n", ctx, urb, ctx->skb);
-
-                       /* update the skb structure */
-                       skb = *ctx->skb;
-                       skb_put (&skb, urb->actual_length);
-
-                       PDEBUG ("skb->len = %d\n", skb.len);
-                       PACKETDEBUG (skb.data, skb.len);
-
-                       while ((new =
-                               atmsar_decode_rawcell (instance->atmsar_vcc_list, &skb,
-                                                      &atmsar_vcc)) != NULL) {
-                               PDEBUG ("(after cell processing)skb->len = %d\n", 
new->len);
-
-                               switch (atmsar_vcc->type) {
-                               case ATMSAR_TYPE_AAL5:
-                                       tmp = new;
-                                       new = atmsar_decode_aal5 (atmsar_vcc, new);
-
-                                       /* we can't send NULL skbs upstream, the ATM 
layer would try to close the vcc... */
-                                       if (new) {
-                                               PDEBUG ("(after aal5 decap) skb->len = 
%d\n", new->len);
-                                               if (new->len && atm_charge 
(atmsar_vcc->vcc, new->truesize)) {
-                                                       PACKETDEBUG (new->data, 
new->len);
-                                                       atmsar_vcc->vcc->push 
(atmsar_vcc->vcc, new);
-                                               } else {
-                                                       PDEBUG
-                                                           ("dropping incoming packet 
: rx_inuse = %d, vcc->sk->rcvbuf = %d, skb->true_size = %d\n",
-                                                            atomic_read 
(&atmsar_vcc->vcc->rx_inuse),
-                                                            
atmsar_vcc->vcc->sk->rcvbuf, new->truesize);
-                                                       dev_kfree_skb (new);
-                                               }
-                                       } else {
-                                               PDEBUG ("atmsar_decode_aal5 returned 
NULL!\n");
-                                               dev_kfree_skb (tmp);
-                                       }
-                                       break;
-                               default:
-                                       /* not supported. we delete the skb. */
-                                       printk (KERN_INFO
-                                               "SpeedTouch USB: illegal vcc type. 
Dropping packet.\n");
-                                       dev_kfree_skb (new);
-                                       break;
-                               }
-                       }
-
-                       usb_fill_bulk_urb (urb,
-                                          instance->usb_dev,
-                                          usb_rcvbulkpipe (instance->usb_dev, 
UDSL_ENDPOINT_DATA_IN),
-                                          (unsigned char *) ctx->skb->data,
-                                          UDSL_RECEIVE_BUFFER_SIZE, 
udsl_usb_data_receive, ctx);
-                       if (!usb_submit_urb (urb, GFP_ATOMIC))
-                               break;
-                       PDEBUG ("udsl_atm_processqueue: submission failed\n");
-                       /* fall through */
-               default: /* error or urb unlinked */
-                       PDEBUG ("udsl_atm_processqueue: adding to spare_receivers\n");
-                       spin_lock_irqsave (&instance->spare_receivers_lock, flags);
-                       list_add (&ctx->list, &instance->spare_receivers);
-                       spin_unlock_irqrestore (&instance->spare_receivers_lock, 
flags);
-                       break;
-               }
-
-               spin_lock_irqsave (&instance->completed_receivers_lock, flags);
-       }
-       spin_unlock_irqrestore (&instance->completed_receivers_lock, flags);
-       PDEBUG ("udsl_atm_processqueue successful\n");
 }
 
 
@@ -448,42 +511,6 @@
 *
 ****************************************************************************/
 
-static void udsl_fire_receivers (struct udsl_instance_data *instance)
-{
-       struct list_head receivers, *pos, *n;
-       unsigned long flags;
-
-       INIT_LIST_HEAD (&receivers);
-
-       down (&instance->serialize);
-
-       spin_lock_irqsave (&instance->spare_receivers_lock, flags);
-       list_splice_init (&instance->spare_receivers, &receivers);
-       spin_unlock_irqrestore (&instance->spare_receivers_lock, flags);
-
-       list_for_each_safe (pos, n, &receivers) {
-               struct udsl_data_ctx *ctx = list_entry (pos, struct udsl_data_ctx, 
list);
-
-               PDEBUG ("udsl_fire_receivers: firing urb %p\n", ctx->urb);
-
-               usb_fill_bulk_urb (ctx->urb,
-                                  instance->usb_dev,
-                                  usb_rcvbulkpipe (instance->usb_dev, 
UDSL_ENDPOINT_DATA_IN),
-                                  (unsigned char *) ctx->skb->data,
-                                  UDSL_RECEIVE_BUFFER_SIZE,
-                                  udsl_usb_data_receive, ctx);
-
-               if (usb_submit_urb (ctx->urb, GFP_KERNEL) < 0) {
-                       PDEBUG ("udsl_fire_receivers: submit failed!\n");
-                       spin_lock_irqsave (&instance->spare_receivers_lock, flags);
-                       list_move (pos, &instance->spare_receivers);
-                       spin_unlock_irqrestore (&instance->spare_receivers_lock, 
flags);
-               }
-       }
-
-       up (&instance->serialize);
-}
-
 static int udsl_atm_open (struct atm_vcc *vcc, short vpi, int vci)
 {
        struct udsl_atm_dev_data *dev_data;
@@ -560,7 +587,7 @@
 
        PDEBUG ("udsl_atm_close successfull\n");
        return;
-};
+}
 
 static int udsl_atm_ioctl (struct atm_dev *dev, unsigned int cmd, void *arg)
 {
@@ -570,7 +597,7 @@
        default:
                return -ENOIOCTLCMD;
        }
-};
+}
 
 
 /************
@@ -670,7 +697,7 @@
                spin_unlock_irqrestore (&instance->sndqueue.lock, flags);
                PDEBUG ("udsl_usb_send_data: skb (0x%p) queued\n", skb);
                return 0;
-       };
+       }
 
        /* init context */
        urb = instance->send_ctx[i].urb;
@@ -698,28 +725,6 @@
        return err;
 }
 
-/********* receive *******/
-static void udsl_usb_data_receive (struct urb *urb, struct pt_regs *regs)
-{
-       struct udsl_instance_data *instance;
-       struct udsl_data_ctx *ctx;
-       unsigned long flags;
-
-       PDEBUG ("udsl_usb_data_receive entered\n");
-
-       if (!urb || !(ctx = urb->context) || !(instance = ctx->instance)) {
-               PDEBUG ("udsl_usb_data_receive: bad urb!\n");
-               return;
-       }
-
-       /* may not be in_interrupt() */
-       spin_lock_irqsave (&instance->completed_receivers_lock, flags);
-       list_add_tail (&ctx->list, &instance->completed_receivers);
-       spin_unlock_irqrestore (&instance->completed_receivers_lock, flags);
-       PDEBUG ("udsl_complete_receive: scheduling tasklet\n");
-       tasklet_schedule (&instance->recvqueue_tasklet);
-}
-
 static int udsl_usb_data_init (struct udsl_instance_data *instance)
 {
        int i, succes;
@@ -763,7 +768,7 @@
        instance->atm_dev->signal = ATM_PHY_SIG_LOST;
 
        return 0;
-};
+}
 
 
 /***************************************************************************
@@ -831,29 +836,29 @@
        spin_lock_init (&instance->completed_receivers_lock);
        INIT_LIST_HEAD (&instance->completed_receivers);
 
-       tasklet_init (&instance->recvqueue_tasklet, udsl_atm_processqueue, (unsigned 
long) instance);
+       tasklet_init (&instance->receive_tasklet, udsl_process_receive, (unsigned 
+long) instance);
 
        /* receive urb init */
        for (i = 0; i < UDSL_NUMBER_RCV_URBS; i++) {
-               struct udsl_data_ctx *ctx = &(instance->rcvbufs[i]);
+               struct udsl_receiver *rcv = &(instance->all_receivers[i]);
 
-               if (!(ctx->skb = dev_alloc_skb (UDSL_RECEIVE_BUFFER_SIZE))) {
+               if (!(rcv->skb = dev_alloc_skb (UDSL_RECEIVE_BUFFER_SIZE))) {
                        PDEBUG ("No memory for skb %d!\n", i);
                        err = -ENOMEM;
                        goto fail_urbs;
                }
 
-               if (!(ctx->urb = usb_alloc_urb (0, GFP_KERNEL))) {
+               if (!(rcv->urb = usb_alloc_urb (0, GFP_KERNEL))) {
                        PDEBUG ("No memory for receive urb %d!\n", i);
                        err = -ENOMEM;
                        goto fail_urbs;
                }
 
-               ctx->instance = instance;
+               rcv->instance = instance;
 
-               list_add (&ctx->list, &instance->spare_receivers);
+               list_add (&rcv->list, &instance->spare_receivers);
 
-               PDEBUG ("skb->truesize = %d (asked for %d)\n", ctx->skb->truesize, 
UDSL_RECEIVE_BUFFER_SIZE);
+               PDEBUG ("skb->truesize = %d (asked for %d)\n", rcv->skb->truesize, 
+UDSL_RECEIVE_BUFFER_SIZE);
        }
 
        /* atm init */
@@ -890,13 +895,13 @@
 fail_atm:
 fail_urbs:
        for (i = 0; i < UDSL_NUMBER_RCV_URBS; i++) {
-               struct udsl_data_ctx *ctx = &(instance->rcvbufs[i]);
+               struct udsl_receiver *rcv = &(instance->all_receivers[i]);
 
-               if (ctx->skb)
-                       kfree_skb (ctx->skb);
+               if (rcv->skb)
+                       kfree_skb (rcv->skb);
 
-               if (ctx->urb)
-                       usb_free_urb (ctx->urb);
+               if (rcv->urb)
+                       usb_free_urb (rcv->urb);
        }
        kfree (instance);
 fail_instance:
@@ -920,10 +925,10 @@
                return;
        }
 
-       tasklet_disable (&instance->recvqueue_tasklet);
+       tasklet_disable (&instance->receive_tasklet);
 
-       down (&instance->serialize);
-       /* no need to take the spinlock - recvqueue_tasklet is not running */
+       down (&instance->serialize); /* vs udsl_fire_receivers */
+       /* no need to take the spinlock - receive_tasklet is not running */
        list_for_each (pos, &instance->spare_receivers)
                if (++count > UDSL_NUMBER_RCV_URBS)
                        panic (__FILE__ ": memory corruption detected at line %d!\n", 
__LINE__);
@@ -935,7 +940,7 @@
        count = UDSL_NUMBER_RCV_URBS - count;
 
        for (i = 0; i < UDSL_NUMBER_RCV_URBS; i++)
-               usb_unlink_urb (instance->rcvbufs[i].urb);
+               usb_unlink_urb (instance->all_receivers[i].urb);
 
        /* wait for completion handlers to finish */
        do {
@@ -952,7 +957,7 @@
                if (completed == count)
                        break;
 
-               /* not all urbs accounted for */
+               /* not all urbs completed */
                yield ();
        } while (1);
 
@@ -960,15 +965,15 @@
        /* no need to take the spinlock - no completion handlers running */
        INIT_LIST_HEAD (&instance->completed_receivers);
 
-       tasklet_enable (&instance->recvqueue_tasklet);
-       tasklet_kill (&instance->recvqueue_tasklet);
+       tasklet_enable (&instance->receive_tasklet);
+       tasklet_kill (&instance->receive_tasklet);
 
        PDEBUG ("udsl_usb_disconnect: freeing receivers\n");
        for (i = 0; i < UDSL_NUMBER_RCV_URBS; i++) {
-               struct udsl_data_ctx *ctx = &(instance->rcvbufs[i]);
+               struct udsl_receiver *rcv = &(instance->all_receivers[i]);
 
-               usb_free_urb (ctx->urb);
-               kfree_skb (ctx->skb);
+               usb_free_urb (rcv->urb);
+               kfree_skb (rcv->skb);
        }
 
        for (i = 0; i < UDSL_NUMBER_SND_URBS; i++) {
@@ -1013,8 +1018,8 @@
        usb_deregister (&udsl_usb_driver);
 }
 
-module_init(udsl_usb_init);
-module_exit(udsl_usb_cleanup);
+module_init (udsl_usb_init);
+module_exit (udsl_usb_cleanup);
 
 MODULE_AUTHOR (DRIVER_AUTHOR);
 MODULE_DESCRIPTION (DRIVER_DESC);
@@ -1042,6 +1047,6 @@
                PDEBUG ("%s\n", buffer);
        }
        return i;
-};
+}
 
 #endif                         /* PACKETDEBUG */



-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to