On Wed, Dec 28, 2011 at 1:53 AM, Gertjan van Wingerde <gwingerde@xxxxxxxxx> wrote: > From: Jakub Kiciński <kubakici@xxxxx> > > Older USB drivers does not append end padding to skb but instead report > it in size of data to be transmitted to HW. rt2800usb should follow that > behaviour. Custom write_tx_data callback which was adding pad to skb > is not be needed any more. > > Thanks to this patch frames handed back from rt2800usb to mac80211 will > no longer contain end padding. > > Signed-off-by: Jakub Kicinski <kubakici@xxxxx> > Signed-off-by: Gertjan van Wingerde <gwingerde@xxxxxxxxx> Acked-by: Ivo van Doorn <IvDoorn@xxxxxxxxx> > --- > drivers/net/wireless/rt2x00/rt2800usb.c | 37 ++++++++---------------------- > 1 files changed, 10 insertions(+), 27 deletions(-) > > diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c > index 313cc7f..b15c215 100644 > --- a/drivers/net/wireless/rt2x00/rt2800usb.c > +++ b/drivers/net/wireless/rt2x00/rt2800usb.c > @@ -400,10 +400,10 @@ static void rt2800usb_write_tx_desc(struct queue_entry *entry, > /* > * The size of TXINFO_W0_USB_DMA_TX_PKT_LEN is > * TXWI + 802.11 header + L2 pad + payload + pad, > - * so need to decrease size of TXINFO and USB end pad. > + * so need to decrease size of TXINFO. > */ > rt2x00_set_field32(&word, TXINFO_W0_USB_DMA_TX_PKT_LEN, > - entry->skb->len - TXINFO_DESC_SIZE - 4); > + roundup(entry->skb->len, 4) - TXINFO_DESC_SIZE); > rt2x00_set_field32(&word, TXINFO_W0_WIV, > !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc->flags)); > rt2x00_set_field32(&word, TXINFO_W0_QSEL, 2); > @@ -421,37 +421,20 @@ static void rt2800usb_write_tx_desc(struct queue_entry *entry, > skbdesc->desc_len = TXINFO_DESC_SIZE + TXWI_DESC_SIZE; > } > > -static void rt2800usb_write_tx_data(struct queue_entry *entry, > - struct txentry_desc *txdesc) > +/* > + * TX data initialization > + */ > +static int rt2800usb_get_tx_data_len(struct queue_entry *entry) > { > - unsigned int len; > - int err; > - > - rt2800_write_tx_data(entry, txdesc); > - > /* > - * pad(1~3 bytes) is added after each 802.11 payload. > - * USB end pad(4 bytes) is added at each USB bulk out packet end. > + * pad(1~3 bytes) is needed after each 802.11 payload. > + * USB end pad(4 bytes) is needed at each USB bulk out packet end. > * TX frame format is : > * | TXINFO | TXWI | 802.11 header | L2 pad | payload | pad | USB end pad | > * |<------------- tx_pkt_len ------------->| > */ > - len = roundup(entry->skb->len, 4) + 4; > - err = skb_padto(entry->skb, len); > - if (unlikely(err)) { > - WARNING(entry->queue->rt2x00dev, "TX SKB padding error, out of memory\n"); > - return; > - } > > - entry->skb->len = len; > -} > - > -/* > - * TX data initialization > - */ > -static int rt2800usb_get_tx_data_len(struct queue_entry *entry) > -{ > - return entry->skb->len; > + return roundup(entry->skb->len, 4) + 4; > } > > /* > @@ -807,7 +790,7 @@ static const struct rt2x00lib_ops rt2800usb_rt2x00_ops = { > .flush_queue = rt2x00usb_flush_queue, > .tx_dma_done = rt2800usb_tx_dma_done, > .write_tx_desc = rt2800usb_write_tx_desc, > - .write_tx_data = rt2800usb_write_tx_data, > + .write_tx_data = rt2800_write_tx_data, > .write_beacon = rt2800_write_beacon, > .clear_beacon = rt2800_clear_beacon, > .get_tx_data_len = rt2800usb_get_tx_data_len, > -- > 1.7.7.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html