[rt2x00-users] [PATCH] rt2800usb: Let rt2x00usb handle USB padding
Helmut Schaa
helmut.schaa at googlemail.com
Thu Dec 22 19:44:39 EST 2011
Hi,
2011/12/21 Jakub Kiciński <kubakici at wp.pl>:
> 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 at wp.pl>
> ---
> 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 3778763..3c4b88c 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;
So, you're returning a len that is bigger then the actual size of the skb?
Helmut
More information about the users
mailing list