rtlwifi: rtl888ee: Fix firmware header endian issues
authorLarry Finger <Larry.Finger@lwfinger.net>
Mon, 3 Aug 2015 20:56:15 +0000 (15:56 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 13 Aug 2015 12:31:24 +0000 (15:31 +0300)
This driver is converted to use the common firmware header struct.
Because the old header definition failed to indicate that the multi-byte
entries should be little endian, several problems were thus exposed.
These are fixed.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rtlwifi/rtl8188ee/fw.c
drivers/net/wireless/rtlwifi/rtl8188ee/fw.h

index c8058aa73ecfc1aa8f282cc80aa27b789f657906..629125658b8728678931848504be377e17849ecd 100644 (file)
@@ -200,7 +200,7 @@ int rtl88e_download_fw(struct ieee80211_hw *hw,
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl92c_firmware_header *pfwheader;
+       struct rtlwifi_firmware_header *pfwheader;
        u8 *pfwdata;
        u32 fwsize;
        int err;
@@ -209,7 +209,7 @@ int rtl88e_download_fw(struct ieee80211_hw *hw,
        if (!rtlhal->pfirmware)
                return 1;
 
-       pfwheader = (struct rtl92c_firmware_header *)rtlhal->pfirmware;
+       pfwheader = (struct rtlwifi_firmware_header *)rtlhal->pfirmware;
        pfwdata = rtlhal->pfirmware;
        fwsize = rtlhal->fwsize;
        RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
@@ -219,10 +219,10 @@ int rtl88e_download_fw(struct ieee80211_hw *hw,
                RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
                         "Firmware Version(%d), Signature(%#x), Size(%d)\n",
                          pfwheader->version, pfwheader->signature,
-                         (int)sizeof(struct rtl92c_firmware_header));
+                         (int)sizeof(struct rtlwifi_firmware_header));
 
-               pfwdata = pfwdata + sizeof(struct rtl92c_firmware_header);
-               fwsize = fwsize - sizeof(struct rtl92c_firmware_header);
+               pfwdata = pfwdata + sizeof(struct rtlwifi_firmware_header);
+               fwsize = fwsize - sizeof(struct rtlwifi_firmware_header);
        }
 
        if (rtl_read_byte(rtlpriv, REG_MCUFWDL) & BIT(7)) {
index 05e944e451f442f2d610502348c7e8c2c0e8098f..21bd4a5337abc633686b1d56e749f70a3b42c944 100644 (file)
@@ -37,7 +37,7 @@
 #define FW_8192C_POLLING_TIMEOUT_COUNT         3000
 
 #define IS_FW_HEADER_EXIST(_pfwhdr)            \
-       ((_pfwhdr->signature&0xFFFF) == 0x88E1)
+       ((le16_to_cpu(_pfwhdr->signature) & 0xFFFF) == 0x88E1)
 #define USE_OLD_WOWLAN_DEBUG_FW                        0
 
 #define H2C_88E_RSVDPAGE_LOC_LEN               5
 #define        FW_PWR_STATE_ACTIVE     ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))
 #define        FW_PWR_STATE_RF_OFF             0
 
-struct rtl92c_firmware_header {
-       u16 signature;
-       u8 category;
-       u8 function;
-       u16 version;
-       u8 subversion;
-       u8 rsvd1;
-       u8 month;
-       u8 date;
-       u8 hour;
-       u8 minute;
-       u16 ramcodesize;
-       u16 rsvd2;
-       u32 svnindex;
-       u32 rsvd3;
-       u32 rsvd4;
-       u32 rsvd5;
-};
-
 enum rtl8188e_h2c_cmd {
        H2C_88E_RSVDPAGE = 0,
        H2C_88E_JOINBSSRPT = 1,