ChangeSet 1.1043.1.9, 2003/02/16 09:40:01-08:00, duncan.sands@math.u-psud.fr [PATCH] USB speedtouch: speedtouch dead code elimination Eliminate a pile of code that isn't used anymore now the new send code is in place, and make some cosmetic changes. diff -Nru a/drivers/usb/misc/atmsar.c b/drivers/usb/misc/atmsar.c --- a/drivers/usb/misc/atmsar.c Tue Feb 18 16:41:30 2003 +++ b/drivers/usb/misc/atmsar.c Tue Feb 18 16:41:30 2003 @@ -213,70 +213,6 @@ } #endif -/* initialization routines. not used at the moment - * I will avoid these as long as possible !! - */ - -int open_atmsar (void) -{ - return 0; -} - -int remove_atmsar (void) -{ - return 0; -} - -/* ATOMIC version of alloc_tx */ -struct sk_buff *atmsar_alloc_skb_wrapper (struct atm_vcc *vcc, unsigned int size) -{ - struct sk_buff *skb; - - if (atomic_read (&vcc->tx_inuse) && !atm_may_send (vcc, size)) { - PDEBUG ("Sorry: tx_inuse = %d, size = %d, sndbuf = %d\n", - atomic_read (&vcc->tx_inuse), size, vcc->sk->sndbuf); - return NULL; - } - skb = alloc_skb (size, GFP_ATOMIC); - if (!skb) - return NULL; - atomic_add (skb->truesize + ATM_PDU_OVHD, &vcc->tx_inuse); - return skb; -} - -struct sk_buff *atmsar_alloc_tx (struct atmsar_vcc_data *vcc, unsigned int size) -{ - struct sk_buff *tmp = NULL; - int bufsize = 0; - - switch (vcc->type) { - case ATMSAR_TYPE_AAL0: - /* reserving adequate headroom */ - bufsize = - size + (((size / 48) + 1) * ((vcc->flags & ATMSAR_USE_53BYTE_CELL) ? 5 : 4)); - break; - case ATMSAR_TYPE_AAL1: - /* reserving adequate headroom */ - bufsize = - size + (((size / 47) + 1) * ((vcc->flags & ATMSAR_USE_53BYTE_CELL) ? 5 : 4)); - break; - case ATMSAR_TYPE_AAL2: - case ATMSAR_TYPE_AAL34: - /* not supported */ - break; - case ATMSAR_TYPE_AAL5: - /* reserving adequate tailroom */ - bufsize = size + (((size + 8 + 47) / 48) * 48); - break; - } - - PDEBUG ("Requested size %d, Allocating size %d\n", size, bufsize); - tmp = vcc->alloc_tx (vcc->vcc, bufsize); - skb_put (tmp, bufsize); - - return tmp; -} - struct atmsar_vcc_data *atmsar_open (struct atmsar_vcc_data **list, struct atm_vcc *vcc, uint type, ushort vpi, ushort vci, unchar pti, unchar gfc, uint flags) { @@ -292,18 +228,6 @@ memset (new, 0, sizeof (struct atmsar_vcc_data)); new->vcc = vcc; -/* - * This gives problems with the ATM layer alloc_tx(). - * It is not usable from interrupt context and for - * some reason this is used in interrupt context - * with br2684.c - * - if (vcc->alloc_tx) - new->alloc_tx = vcc->alloc_tx; - else -*/ - new->alloc_tx = atmsar_alloc_skb_wrapper; - new->stats = vcc->stats; new->type = type; new->next = NULL; @@ -372,216 +296,6 @@ kfree (vcc); } -/*********************** - ** - ** ENCODE FUNCTIONS - ** - ***********************/ - -/* encapsulate in an AAL5 frame, which is then split into ATM cells */ -unsigned int atmsar_encode (struct atmsar_vcc_data *ctx, char *source, char *target, unsigned int pdu_length) -{ - unsigned int num_cells = (pdu_length + ATM_AAL5_TRAILER + ATM_CELL_PAYLOAD - 1) / ATM_CELL_PAYLOAD; - unsigned int num_pdu_cells = pdu_length / ATM_CELL_PAYLOAD + 1; - unsigned int aal5_length = num_cells * ATM_CELL_PAYLOAD; - unsigned int zero_padding = aal5_length - pdu_length - ATM_AAL5_TRAILER; - unsigned int final_length = num_cells * ATM_CELL_SIZE; - unsigned char aal5_trailer [ATM_AAL5_TRAILER]; - unsigned char cell_header [ATM_CELL_HEADER]; - u32 crc; - int i; - - PDEBUG ("atmsar_encode entered\n"); - - PDEBUG ("pdu_length %d, num_cells %d, num_pdu_cells %d, aal5_length %d, zero_padding %d, final_length %d\n", pdu_length, num_cells, num_pdu_cells, aal5_length, zero_padding, final_length); - - PDEBUG ("source 0x=%p, target 0x%p\n", source, target); - - aal5_trailer [0] = 0; /* UU = 0 */ - aal5_trailer [1] = 0; /* CPI = 0 */ - aal5_trailer [2] = pdu_length >> 8; - aal5_trailer [3] = pdu_length; - - crc = crc32 (~0, source, pdu_length); - for (i = 0; i < zero_padding; i++) - crc = CRC32 (0, crc); - crc = crc32 (crc, aal5_trailer, 4); - crc = ~crc; - - aal5_trailer [4] = crc >> 24; - aal5_trailer [5] = crc >> 16; - aal5_trailer [6] = crc >> 8; - aal5_trailer [7] = crc; - - cell_header [0] = ctx->atmHeader >> 24; - cell_header [1] = ctx->atmHeader >> 16; - cell_header [2] = ctx->atmHeader >> 8; - cell_header [3] = ctx->atmHeader; - cell_header [4] = 0xec; - - for (i = 1; i < num_pdu_cells; i++) { - memcpy (target, cell_header, ATM_CELL_HEADER); - target += ATM_CELL_HEADER; - memcpy (target, source, ATM_CELL_PAYLOAD); - target += ATM_CELL_PAYLOAD; - source += ATM_CELL_PAYLOAD; - PDEBUG ("source 0x=%p, target 0x%p\n", source, target); - } - memcpy (target, cell_header, ATM_CELL_HEADER); - target += ATM_CELL_HEADER; - memcpy (target, source, pdu_length % ATM_CELL_PAYLOAD); - target += pdu_length % ATM_CELL_PAYLOAD; - if (num_pdu_cells < num_cells) { - memset (target, 0, zero_padding + ATM_AAL5_TRAILER - ATM_CELL_PAYLOAD); - target += zero_padding + ATM_AAL5_TRAILER - ATM_CELL_PAYLOAD; - memcpy (target, cell_header, ATM_CELL_HEADER); - target += ATM_CELL_HEADER; - zero_padding = ATM_CELL_PAYLOAD - ATM_AAL5_TRAILER; - } - memset (target, 0, zero_padding); - target += zero_padding; - memcpy (target, aal5_trailer, ATM_AAL5_TRAILER); - - /* set pti bit in last cell */ - *(target + ATM_AAL5_TRAILER + 3 - ATM_CELL_SIZE) |= 0x2; - - /* update stats */ - if (ctx->stats) - atomic_inc (&ctx->stats->tx); - - if (ctx->stats && (ctx->type <= ATMSAR_TYPE_AAL1)) - atomic_add (num_cells, &(ctx->stats->tx)); - - return final_length; -} - -struct sk_buff *atmsar_encode_rawcell (struct atmsar_vcc_data *ctx, struct sk_buff *skb) -{ - int number_of_cells = (skb->len) / 48; - int total_length = number_of_cells * (ctx->flags & ATMSAR_USE_53BYTE_CELL ? 53 : 52); - unsigned char *source; - unsigned char *target; - struct sk_buff *out = NULL; - int i; - - PDEBUG ("atmsar_encode_rawcell (0x%p, 0x%p) called\n", ctx, skb); - - if (skb_cloned (skb) - || (skb_headroom (skb) < - (number_of_cells * (ctx->flags & ATMSAR_USE_53BYTE_CELL ? 5 : 4)))) { - PDEBUG - ("atmsar_encode_rawcell allocating new skb. ctx->alloc_tx = 0x%p, ctx->vcc = 0x%p\n", - ctx->alloc_tx, ctx->vcc); - /* get new skb */ - out = ctx->alloc_tx (ctx->vcc, total_length); - if (!out) - return NULL; - - skb_put (out, total_length); - source = skb->data; - target = out->data; - } else { - PDEBUG ("atmsar_encode_rawcell: sufficient headroom\n"); - source = skb->data; - skb_push (skb, number_of_cells * ((ctx->flags & ATMSAR_USE_53BYTE_CELL) ? 5 : 4)); - target = skb->data; - out = skb; - } - - PDEBUG ("source 0x=%p, target 0x%p\n", source, target); - - if (ctx->flags & ATMSAR_USE_53BYTE_CELL) { - for (i = 0; i < number_of_cells; i++) { - ADD_HEADER (target, ctx->atmHeader); - *target++ = (char) 0xEC; - memcpy (target, source, 48); - target += 48; - source += 48; - PDEBUG ("source 0x=%p, target 0x%p\n", source, target); - } - } else { - for (i = 0; i < number_of_cells; i++) { - ADD_HEADER (target, ctx->atmHeader); - memcpy (target, source, 48); - target += 48; - source += 48; - PDEBUG ("source 0x=%p, target 0x%p\n", source, target); - }; - } - - if (ctx->flags & ATMSAR_SET_PTI) { - /* setting pti bit in last cell */ - *(target - (ctx->flags & ATMSAR_USE_53BYTE_CELL ? 50 : 49)) |= 0x2; - } - - /* update stats */ - if (ctx->stats && (ctx->type <= ATMSAR_TYPE_AAL1)) - atomic_add (number_of_cells, &(ctx->stats->tx)); - - PDEBUG ("atmsar_encode_rawcell return 0x%p (length %d)\n", out, out->len); - return out; -} - -struct sk_buff *atmsar_encode_aal5 (struct atmsar_vcc_data *ctx, struct sk_buff *skb) -{ - int length, pdu_length; - unsigned char *trailer; - unsigned char *pad; - uint crc = 0xffffffff; - - PDEBUG ("atmsar_encode_aal5 (0x%p, 0x%p) called\n", ctx, skb); - - /* determine aal5 length */ - pdu_length = skb->len; - length = ((pdu_length + 8 + 47) / 48) * 48; - - if (skb_tailroom (skb) < (length - pdu_length)) { - struct sk_buff *out; - PDEBUG - ("atmsar_encode_aal5 allocating new skb. ctx->alloc_tx = 0x%p, ctx->vcc = 0x%p\n", - ctx->alloc_tx, ctx->vcc); - /* get new skb */ - out = ctx->alloc_tx (ctx->vcc, length); - if (!out) - return NULL; - - PDEBUG ("out->data = 0x%p\n", out->data); - PDEBUG ("atmsar_encode_aal5 pdu length %d, allocated length %d\n", skb->len, - length); - memcpy (out->data, skb->data, skb->len); - skb_put (out, skb->len); - - skb = out; - } - - PDEBUG ("skb->data = 0x%p\n", skb->data); - /* note end of pdu and add length */ - pad = skb_put (skb, length - pdu_length); - trailer = skb->tail - 8; - - PDEBUG ("trailer = 0x%p\n", trailer); - - /* zero padding space */ - memset (pad, 0, length - pdu_length - 8); - - /* add trailer */ - *trailer++ = (unsigned char) 0; /* UU = 0 */ - *trailer++ = (unsigned char) 0; /* CPI = 0 */ - *trailer++ = (unsigned char) (pdu_length >> 8); - *trailer++ = (unsigned char) (pdu_length & 0xff); - crc = ~crc32 (crc, skb->data, length - 4); - *trailer++ = (unsigned char) (crc >> 24); - *trailer++ = (unsigned char) (crc >> 16); - *trailer++ = (unsigned char) (crc >> 8); - *trailer++ = (unsigned char) (crc & 0xff); - - /* update stats */ - if (ctx->stats) - atomic_inc (&ctx->stats->tx); - - PDEBUG ("atmsar_encode_aal5 return 0x%p (length %d)\n", skb, skb->len); - return skb; -} /*********************** ** diff -Nru a/drivers/usb/misc/atmsar.h b/drivers/usb/misc/atmsar.h --- a/drivers/usb/misc/atmsar.h Tue Feb 18 16:41:30 2003 +++ b/drivers/usb/misc/atmsar.h Tue Feb 18 16:41:30 2003 @@ -63,7 +63,6 @@ int type; /* connection specific non-atmsar data */ - struct sk_buff *(*alloc_tx) (struct atm_vcc * vcc, unsigned int size); struct atm_vcc *vcc; struct k_atm_aal_stats *stats; unsigned short mtu; /* max is actually 65k for AAL5... */ @@ -86,16 +85,9 @@ unchar gfc, uint flags); extern void atmsar_close (struct atmsar_vcc_data **list, struct atmsar_vcc_data *vcc); -extern struct sk_buff *atmsar_encode_rawcell (struct atmsar_vcc_data *ctx, struct sk_buff *skb); -extern struct sk_buff *atmsar_encode_aal5 (struct atmsar_vcc_data *ctx, struct sk_buff *skb); - struct sk_buff *atmsar_decode_rawcell (struct atmsar_vcc_data *list, struct sk_buff *skb, struct atmsar_vcc_data **ctx); struct sk_buff *atmsar_decode_aal5 (struct atmsar_vcc_data *ctx, struct sk_buff *skb); - -struct sk_buff *atmsar_alloc_tx (struct atmsar_vcc_data *vcc, unsigned int size); - -unsigned int atmsar_encode (struct atmsar_vcc_data *ctx, char *source, char *target, unsigned int pdu_length); unsigned long calc_crc (char *mem, int len, unsigned initial); diff -Nru a/drivers/usb/misc/speedtouch.c b/drivers/usb/misc/speedtouch.c --- a/drivers/usb/misc/speedtouch.c Tue Feb 18 16:41:30 2003 +++ b/drivers/usb/misc/speedtouch.c Tue Feb 18 16:41:30 2003 @@ -132,7 +132,7 @@ unsigned int free_cells; }; -struct udsl_usb_send_data_context { +struct udsl_sender { struct list_head list; struct udsl_send_buffer *buffer; struct urb *urb; @@ -177,7 +177,7 @@ struct tasklet_struct receive_tasklet; /* sending */ - struct udsl_usb_send_data_context send_ctx [UDSL_NUMBER_SND_URBS]; + struct udsl_sender all_senders [UDSL_NUMBER_SND_URBS]; struct udsl_send_buffer all_buffers [UDSL_NUMBER_SND_BUFS]; struct sk_buff_head sndqueue; @@ -487,7 +487,7 @@ static void udsl_complete_send (struct urb *urb, struct pt_regs *regs) { struct udsl_instance_data *instance; - struct udsl_usb_send_data_context *snd; + struct udsl_sender *snd; unsigned long flags; PDEBUG ("udsl_complete_send entered\n"); @@ -509,7 +509,7 @@ static void udsl_process_send (unsigned long data) { struct udsl_instance_data *instance = (struct udsl_instance_data *) data; - struct udsl_usb_send_data_context *snd; + struct udsl_sender *snd; struct udsl_send_buffer *buf; unsigned int cells_to_write, i; struct sk_buff *skb; @@ -531,7 +531,7 @@ } else /* all buffers empty */ break; - snd = list_entry (instance->spare_senders.next, struct udsl_usb_send_data_context, list); + snd = list_entry (instance->spare_senders.next, struct udsl_sender, list); list_del (&snd->list); spin_unlock_irqrestore (&instance->send_lock, flags); @@ -615,12 +615,12 @@ goto made_progress; } -static void udsl_usb_cancelsends (struct udsl_instance_data *instance, struct atm_vcc *vcc) +static void udsl_cancel_send (struct udsl_instance_data *instance, struct atm_vcc *vcc) { unsigned long flags; struct sk_buff *skb, *n; - PDEBUG ("udsl_usb_cancelsends entered\n"); + PDEBUG ("udsl_cancel_send entered\n"); spin_lock_irqsave (&instance->sndqueue.lock, flags); for (skb = instance->sndqueue.next, n = skb->next; skb != (struct sk_buff *)&instance->sndqueue; skb = n, n = skb->next) if (UDSL_SKB (skb)->atm_data.vcc == vcc) { @@ -643,7 +643,7 @@ kfree_skb (skb); } tasklet_enable (&instance->send_tasklet); - PDEBUG ("udsl_usb_cancelsends done\n"); + PDEBUG ("udsl_cancel_send done\n"); } static int udsl_atm_send (struct atm_vcc *vcc, struct sk_buff *skb) @@ -716,17 +716,6 @@ * ATM helper functions * ****************************************************************************/ -static struct sk_buff *udsl_atm_alloc_tx (struct atm_vcc *vcc, unsigned int size) -{ - struct atmsar_vcc_data *atmsar_vcc = - ((struct udsl_atm_dev_data *) vcc->dev_data)->atmsar_vcc; - if (atmsar_vcc) - return atmsar_alloc_tx (atmsar_vcc, size); - - printk (KERN_INFO - "SpeedTouch USB: udsl_atm_alloc_tx could not find correct alloc_tx function !\n"); - return NULL; -} static int udsl_atm_proc_read (struct atm_dev *atm_dev, loff_t *pos, char *page) { @@ -805,7 +794,6 @@ set_bit (ATM_VF_PARTIAL, &vcc->flags); set_bit (ATM_VF_READY, &vcc->flags); vcc->dev_data = dev_data; - vcc->alloc_tx = udsl_atm_alloc_tx; dev_data->atmsar_vcc->mtu = UDSL_MAX_AAL5_MRU; @@ -830,7 +818,7 @@ /* freeing resources */ /* cancel all sends on this vcc */ - udsl_usb_cancelsends (instance, vcc); + udsl_cancel_send (instance, vcc); atmsar_close (&(instance->atmsar_vcc_list), dev_data->atmsar_vcc); kfree (dev_data); @@ -964,7 +952,7 @@ /* send init */ for (i = 0; i < UDSL_NUMBER_SND_URBS; i++) { - struct udsl_usb_send_data_context *snd = &(instance->send_ctx[i]); + struct udsl_sender *snd = &(instance->all_senders[i]); if (!(snd->urb = usb_alloc_urb (0, GFP_KERNEL))) { PDEBUG ("No memory for send urb %d!\n", i); @@ -1022,15 +1010,15 @@ kfree (instance->all_buffers[i].base); for (i = 0; i < UDSL_NUMBER_SND_URBS; i++) - usb_free_urb (instance->send_ctx[i].urb); + usb_free_urb (instance->all_senders[i].urb); for (i = 0; i < UDSL_NUMBER_RCV_URBS; i++) { struct udsl_receiver *rcv = &(instance->all_receivers[i]); + usb_free_urb (rcv->urb); + if (rcv->skb) kfree_skb (rcv->skb); - - usb_free_urb (rcv->urb); } kfree (instance); @@ -1112,7 +1100,7 @@ tasklet_disable (&instance->send_tasklet); for (i = 0; i < UDSL_NUMBER_SND_URBS; i++) - if ((result = usb_unlink_urb (instance->send_ctx[i].urb)) < 0) + if ((result = usb_unlink_urb (instance->all_senders[i].urb)) < 0) PDEBUG ("udsl_usb_disconnect: usb_unlink_urb on send urb %d returned %d\n", i, result); /* wait for completion handlers to finish */ @@ -1143,7 +1131,7 @@ PDEBUG ("udsl_usb_disconnect: freeing senders\n"); for (i = 0; i < UDSL_NUMBER_SND_URBS; i++) - usb_free_urb (instance->send_ctx[i].urb); + usb_free_urb (instance->all_senders[i].urb); PDEBUG ("udsl_usb_disconnect: freeing buffers\n"); for (i = 0; i < UDSL_NUMBER_SND_BUFS; i++)