wl1271: Fix RX data path frame lengths
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>
Fri, 14 May 2010 07:46:24 +0000 (10:46 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 21 May 2010 18:40:00 +0000 (14:40 -0400)
The current frame length used by the driver for RX frames is the SPI bus
transfer length. This length has padding bytes, which do not belong to the
WLAN frame.

As there is no other length information in the WLAN frame except the skb
length this problem caused for instance extra ESSID's to be listed at the
end of scan results (IE id 0) with zero length.

Fix the frame length by removing padding.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/wl12xx/wl1271_rx.c

index 57f4bfd959c8d46519fbe375901d3d2f3de2864f..b98fb643fab0cd674fd33e9b3969e95cab4ea0ef 100644 (file)
@@ -113,6 +113,8 @@ static void wl1271_rx_handle_data(struct wl1271 *wl, u32 length)
        wl1271_debug(DEBUG_RX, "rx skb 0x%p: %d B %s", skb, skb->len,
                     beacon ? "beacon" : "");
 
+       skb_trim(skb, skb->len - desc->pad_len);
+
        memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status));
        ieee80211_rx_ni(wl->hw, skb);
 }