rtlwifi: rtl8192cu: Calculate descriptor checksum correctly for BE
authorLarry Finger <Larry.Finger@lwfinger.net>
Thu, 19 Jan 2017 20:28:07 +0000 (14:28 -0600)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 20 Jan 2017 10:06:09 +0000 (12:06 +0200)
This driver requires a checksum for the descriptors so that the wifi
chip is assured that the USB transmission was correct. These entries
are little-endian, but the driver was always using cpu order in the
calculation. As a result, the driver failed on BE hardware.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c

index 6da6e2acfbecde515d44ab69a398cf70638c1273..1611e42479d97eb9b5f8322f36af119c2747cac5 100644 (file)
@@ -477,14 +477,14 @@ static void _rtl_fill_usb_tx_desc(u8 *txdesc)
  */
 static void _rtl_tx_desc_checksum(u8 *txdesc)
 {
-       u16 *ptr = (u16 *)txdesc;
+       __le16 *ptr = (__le16 *)txdesc;
        u16     checksum = 0;
        u32 index;
 
        /* Clear first */
        SET_TX_DESC_TX_DESC_CHECKSUM(txdesc, 0);
        for (index = 0; index < 16; index++)
-               checksum = checksum ^ (*(ptr + index));
+               checksum = checksum ^ le16_to_cpu(*(ptr + index));
        SET_TX_DESC_TX_DESC_CHECKSUM(txdesc, checksum);
 }