diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2014-02-28 16:16:48 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-03-04 13:19:37 -0500 |
commit | cbd0c8512f3b06c86849c554eb092862c46885d5 (patch) | |
tree | d48a9d4dd30e74418e7c841c74aba7f43eeb619b /drivers/net/wireless/rtlwifi/rtl8723ae | |
parent | 0a168b48cdf7c22cf0250f62df4dde20adebf74b (diff) |
rtlwifi: rtl8723ae: rtl8723-common: Copy common firmware code
The drivers for RTL8723AE and RTL8723BE have some code in common.
This commit copies the common firmware routines into the shared
code.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8723ae')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/def.h | 5 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/fw.c | 260 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/fw.h | 18 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/hw.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/sw.c | 8 |
7 files changed, 37 insertions, 260 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/def.h b/drivers/net/wireless/rtlwifi/rtl8723ae/def.h index 8c110356dff9..debe261a7eeb 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/def.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/def.h | |||
@@ -46,11 +46,6 @@ | |||
46 | #define E_CUT_VERSION BIT(14) | 46 | #define E_CUT_VERSION BIT(14) |
47 | #define RF_RL_ID (BIT(31)|BIT(30)|BIT(29)|BIT(28)) | 47 | #define RF_RL_ID (BIT(31)|BIT(30)|BIT(29)|BIT(28)) |
48 | 48 | ||
49 | enum version_8723e { | ||
50 | VERSION_TEST_UMC_CHIP_8723 = 0x0081, | ||
51 | VERSION_NORMAL_UMC_CHIP_8723_1T1R_A_CUT = 0x0089, | ||
52 | VERSION_NORMAL_UMC_CHIP_8723_1T1R_B_CUT = 0x1089, | ||
53 | }; | ||
54 | 49 | ||
55 | /* MASK */ | 50 | /* MASK */ |
56 | #define IC_TYPE_MASK (BIT(0)|BIT(1)|BIT(2)) | 51 | #define IC_TYPE_MASK (BIT(0)|BIT(1)|BIT(2)) |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c index ba1502b172a6..728b7563ad36 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c | |||
@@ -34,199 +34,7 @@ | |||
34 | #include "reg.h" | 34 | #include "reg.h" |
35 | #include "def.h" | 35 | #include "def.h" |
36 | #include "fw.h" | 36 | #include "fw.h" |
37 | 37 | #include "../rtl8723com/fw_common.h" | |
38 | static void _rtl8723ae_enable_fw_download(struct ieee80211_hw *hw, bool enable) | ||
39 | { | ||
40 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
41 | u8 tmp; | ||
42 | if (enable) { | ||
43 | tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); | ||
44 | rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp | 0x04); | ||
45 | |||
46 | tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL); | ||
47 | rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp | 0x01); | ||
48 | |||
49 | tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL + 2); | ||
50 | rtl_write_byte(rtlpriv, REG_MCUFWDL + 2, tmp & 0xf7); | ||
51 | } else { | ||
52 | tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL); | ||
53 | rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp & 0xfe); | ||
54 | |||
55 | rtl_write_byte(rtlpriv, REG_MCUFWDL + 1, 0x00); | ||
56 | } | ||
57 | } | ||
58 | |||
59 | static void _rtl8723ae_fw_block_write(struct ieee80211_hw *hw, | ||
60 | const u8 *buffer, u32 size) | ||
61 | { | ||
62 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
63 | u32 blockSize = sizeof(u32); | ||
64 | u8 *bufferPtr = (u8 *) buffer; | ||
65 | u32 *pu4BytePtr = (u32 *) buffer; | ||
66 | u32 i, offset, blockCount, remainSize; | ||
67 | |||
68 | blockCount = size / blockSize; | ||
69 | remainSize = size % blockSize; | ||
70 | |||
71 | for (i = 0; i < blockCount; i++) { | ||
72 | offset = i * blockSize; | ||
73 | rtl_write_dword(rtlpriv, (FW_8192C_START_ADDRESS + offset), | ||
74 | *(pu4BytePtr + i)); | ||
75 | } | ||
76 | |||
77 | if (remainSize) { | ||
78 | offset = blockCount * blockSize; | ||
79 | bufferPtr += offset; | ||
80 | for (i = 0; i < remainSize; i++) { | ||
81 | rtl_write_byte(rtlpriv, (FW_8192C_START_ADDRESS + | ||
82 | offset + i), *(bufferPtr + i)); | ||
83 | } | ||
84 | } | ||
85 | } | ||
86 | |||
87 | static void _rtl8723ae_fw_page_write(struct ieee80211_hw *hw, | ||
88 | u32 page, const u8 *buffer, u32 size) | ||
89 | { | ||
90 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
91 | u8 value8; | ||
92 | u8 u8page = (u8) (page & 0x07); | ||
93 | |||
94 | value8 = (rtl_read_byte(rtlpriv, REG_MCUFWDL + 2) & 0xF8) | u8page; | ||
95 | |||
96 | rtl_write_byte(rtlpriv, (REG_MCUFWDL + 2), value8); | ||
97 | _rtl8723ae_fw_block_write(hw, buffer, size); | ||
98 | } | ||
99 | |||
100 | static void _rtl8723ae_write_fw(struct ieee80211_hw *hw, | ||
101 | enum version_8723e version, u8 *buffer, | ||
102 | u32 size) | ||
103 | { | ||
104 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
105 | u8 *bufferPtr = (u8 *) buffer; | ||
106 | u32 page_nums, remain_size; | ||
107 | u32 page, offset; | ||
108 | |||
109 | RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, "FW size is %d bytes,\n", size); | ||
110 | |||
111 | page_nums = size / FW_8192C_PAGE_SIZE; | ||
112 | remain_size = size % FW_8192C_PAGE_SIZE; | ||
113 | |||
114 | if (page_nums > 6) { | ||
115 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
116 | "Page numbers should not be greater then 6\n"); | ||
117 | } | ||
118 | |||
119 | for (page = 0; page < page_nums; page++) { | ||
120 | offset = page * FW_8192C_PAGE_SIZE; | ||
121 | _rtl8723ae_fw_page_write(hw, page, (bufferPtr + offset), | ||
122 | FW_8192C_PAGE_SIZE); | ||
123 | } | ||
124 | |||
125 | if (remain_size) { | ||
126 | offset = page_nums * FW_8192C_PAGE_SIZE; | ||
127 | page = page_nums; | ||
128 | _rtl8723ae_fw_page_write(hw, page, (bufferPtr + offset), | ||
129 | remain_size); | ||
130 | } | ||
131 | |||
132 | RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, "FW write done.\n"); | ||
133 | } | ||
134 | |||
135 | static int _rtl8723ae_fw_free_to_go(struct ieee80211_hw *hw) | ||
136 | { | ||
137 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
138 | int err = -EIO; | ||
139 | u32 counter = 0; | ||
140 | u32 value32; | ||
141 | |||
142 | do { | ||
143 | value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); | ||
144 | } while ((counter++ < FW_8192C_POLLING_TIMEOUT_COUNT) && | ||
145 | (!(value32 & FWDL_ChkSum_rpt))); | ||
146 | |||
147 | if (counter >= FW_8192C_POLLING_TIMEOUT_COUNT) { | ||
148 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
149 | "chksum report faill ! REG_MCUFWDL:0x%08x .\n", | ||
150 | value32); | ||
151 | goto exit; | ||
152 | } | ||
153 | |||
154 | RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, | ||
155 | "Checksum report OK ! REG_MCUFWDL:0x%08x .\n", value32); | ||
156 | |||
157 | value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); | ||
158 | value32 |= MCUFWDL_RDY; | ||
159 | value32 &= ~WINTINI_RDY; | ||
160 | rtl_write_dword(rtlpriv, REG_MCUFWDL, value32); | ||
161 | |||
162 | counter = 0; | ||
163 | |||
164 | do { | ||
165 | value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); | ||
166 | if (value32 & WINTINI_RDY) { | ||
167 | RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, | ||
168 | "Polling FW ready success!! REG_MCUFWDL:0x%08x .\n", | ||
169 | value32); | ||
170 | err = 0; | ||
171 | goto exit; | ||
172 | } | ||
173 | |||
174 | mdelay(FW_8192C_POLLING_DELAY); | ||
175 | |||
176 | } while (counter++ < FW_8192C_POLLING_TIMEOUT_COUNT); | ||
177 | |||
178 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
179 | "Polling FW ready fail!! REG_MCUFWDL:0x%08x .\n", value32); | ||
180 | |||
181 | exit: | ||
182 | return err; | ||
183 | } | ||
184 | |||
185 | int rtl8723ae_download_fw(struct ieee80211_hw *hw) | ||
186 | { | ||
187 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
188 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | ||
189 | struct rtl8723ae_firmware_header *pfwheader; | ||
190 | u8 *pfwdata; | ||
191 | u32 fwsize; | ||
192 | int err; | ||
193 | enum version_8723e version = rtlhal->version; | ||
194 | |||
195 | if (!rtlhal->pfirmware) | ||
196 | return 1; | ||
197 | |||
198 | pfwheader = (struct rtl8723ae_firmware_header *)rtlhal->pfirmware; | ||
199 | pfwdata = (u8 *) rtlhal->pfirmware; | ||
200 | fwsize = rtlhal->fwsize; | ||
201 | |||
202 | if (IS_FW_HEADER_EXIST(pfwheader)) { | ||
203 | RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG, | ||
204 | "Firmware Version(%d), Signature(%#x),Size(%d)\n", | ||
205 | pfwheader->version, pfwheader->signature, | ||
206 | (int)sizeof(struct rtl8723ae_firmware_header)); | ||
207 | |||
208 | pfwdata = pfwdata + sizeof(struct rtl8723ae_firmware_header); | ||
209 | fwsize = fwsize - sizeof(struct rtl8723ae_firmware_header); | ||
210 | } | ||
211 | |||
212 | if (rtl_read_byte(rtlpriv, REG_MCUFWDL)&BIT(7)) { | ||
213 | rtl8723ae_firmware_selfreset(hw); | ||
214 | rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00); | ||
215 | } | ||
216 | _rtl8723ae_enable_fw_download(hw, true); | ||
217 | _rtl8723ae_write_fw(hw, version, pfwdata, fwsize); | ||
218 | _rtl8723ae_enable_fw_download(hw, false); | ||
219 | |||
220 | err = _rtl8723ae_fw_free_to_go(hw); | ||
221 | if (err) { | ||
222 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
223 | "Firmware is not ready to run!\n"); | ||
224 | } else { | ||
225 | RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, | ||
226 | "Firmware is ready to run!\n"); | ||
227 | } | ||
228 | return 0; | ||
229 | } | ||
230 | 38 | ||
231 | static bool rtl8723ae_check_fw_read_last_h2c(struct ieee80211_hw *hw, u8 boxnum) | 39 | static bool rtl8723ae_check_fw_read_last_h2c(struct ieee80211_hw *hw, u8 boxnum) |
232 | { | 40 | { |
@@ -463,50 +271,6 @@ void rtl8723ae_fill_h2c_cmd(struct ieee80211_hw *hw, | |||
463 | return; | 271 | return; |
464 | } | 272 | } |
465 | 273 | ||
466 | void rtl8723ae_firmware_selfreset(struct ieee80211_hw *hw) | ||
467 | { | ||
468 | u8 u1tmp; | ||
469 | u8 delay = 100; | ||
470 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
471 | |||
472 | rtl_write_byte(rtlpriv, REG_HMETFR + 3, 0x20); | ||
473 | u1tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); | ||
474 | |||
475 | while (u1tmp & BIT(2)) { | ||
476 | delay--; | ||
477 | if (delay == 0) | ||
478 | break; | ||
479 | udelay(50); | ||
480 | u1tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); | ||
481 | } | ||
482 | if (delay == 0) { | ||
483 | u1tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); | ||
484 | rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, u1tmp&(~BIT(2))); | ||
485 | } | ||
486 | } | ||
487 | |||
488 | void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) | ||
489 | { | ||
490 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
491 | u8 u1_h2c_set_pwrmode[3] = { 0 }; | ||
492 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); | ||
493 | |||
494 | RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); | ||
495 | |||
496 | SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, mode); | ||
497 | SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode, | ||
498 | (rtlpriv->mac80211.p2p) ? | ||
499 | ppsc->smart_ps : 1); | ||
500 | SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1_h2c_set_pwrmode, | ||
501 | ppsc->reg_max_lps_awakeintvl); | ||
502 | |||
503 | RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, | ||
504 | "rtl8723ae_set_fw_rsvdpagepkt(): u1_h2c_set_pwrmode\n", | ||
505 | u1_h2c_set_pwrmode, 3); | ||
506 | rtl8723ae_fill_h2c_cmd(hw, H2C_SETPWRMODE, 3, u1_h2c_set_pwrmode); | ||
507 | |||
508 | } | ||
509 | |||
510 | static bool _rtl8723ae_cmd_send_packet(struct ieee80211_hw *hw, | 274 | static bool _rtl8723ae_cmd_send_packet(struct ieee80211_hw *hw, |
511 | struct sk_buff *skb) | 275 | struct sk_buff *skb) |
512 | { | 276 | { |
@@ -812,7 +576,6 @@ void rtl8723ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state) | |||
812 | rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, BIT(4)); | 576 | rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, BIT(4)); |
813 | 577 | ||
814 | p2p_ps_offload->offload_en = 1; | 578 | p2p_ps_offload->offload_en = 1; |
815 | |||
816 | if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) { | 579 | if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) { |
817 | p2p_ps_offload->role = 1; | 580 | p2p_ps_offload->role = 1; |
818 | p2p_ps_offload->allstasleep = 0; | 581 | p2p_ps_offload->allstasleep = 0; |
@@ -836,3 +599,24 @@ void rtl8723ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state) | |||
836 | } | 599 | } |
837 | rtl8723ae_fill_h2c_cmd(hw, H2C_P2P_PS_OFFLOAD, 1, (u8 *)p2p_ps_offload); | 600 | rtl8723ae_fill_h2c_cmd(hw, H2C_P2P_PS_OFFLOAD, 1, (u8 *)p2p_ps_offload); |
838 | } | 601 | } |
602 | |||
603 | void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) | ||
604 | { | ||
605 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
606 | u8 u1_h2c_set_pwrmode[3] = { 0 }; | ||
607 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); | ||
608 | |||
609 | RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); | ||
610 | |||
611 | SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, mode); | ||
612 | SET_H2CCMD_PWRMODE_PARM_SMART_PS_23A(u1_h2c_set_pwrmode, | ||
613 | (rtlpriv->mac80211.p2p) ? | ||
614 | ppsc->smart_ps : 1); | ||
615 | SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1_h2c_set_pwrmode, | ||
616 | ppsc->reg_max_lps_awakeintvl); | ||
617 | |||
618 | RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, | ||
619 | "rtl8723ae_set_fw_rsvdpagepkt(): u1_h2c_set_pwrmode\n", | ||
620 | u1_h2c_set_pwrmode, 3); | ||
621 | rtl8723ae_fill_h2c_cmd(hw, H2C_SETPWRMODE, 3, u1_h2c_set_pwrmode); | ||
622 | } | ||
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h index ed3b795e6980..d355b85dd9fe 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h | |||
@@ -34,7 +34,7 @@ | |||
34 | #define FW_8192C_END_ADDRESS 0x3FFF | 34 | #define FW_8192C_END_ADDRESS 0x3FFF |
35 | #define FW_8192C_PAGE_SIZE 4096 | 35 | #define FW_8192C_PAGE_SIZE 4096 |
36 | #define FW_8192C_POLLING_DELAY 5 | 36 | #define FW_8192C_POLLING_DELAY 5 |
37 | #define FW_8192C_POLLING_TIMEOUT_COUNT 1000 | 37 | #define FW_8192C_POLLING_TIMEOUT_COUNT 6000 |
38 | 38 | ||
39 | #define BEACON_PG 0 | 39 | #define BEACON_PG 0 |
40 | #define PSPOLL_PG 2 | 40 | #define PSPOLL_PG 2 |
@@ -65,21 +65,9 @@ struct rtl8723ae_firmware_header { | |||
65 | u32 rsvd5; | 65 | u32 rsvd5; |
66 | }; | 66 | }; |
67 | 67 | ||
68 | enum rtl8192c_h2c_cmd { | ||
69 | H2C_AP_OFFLOAD = 0, | ||
70 | H2C_SETPWRMODE = 1, | ||
71 | H2C_JOINBSSRPT = 2, | ||
72 | H2C_RSVDPAGE = 3, | ||
73 | H2C_RSSI_REPORT = 4, | ||
74 | H2C_P2P_PS_CTW_CMD = 5, | ||
75 | H2C_P2P_PS_OFFLOAD = 6, | ||
76 | H2C_RA_MASK = 7, | ||
77 | MAX_H2CCMD | ||
78 | }; | ||
79 | |||
80 | #define SET_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd, __val) \ | 68 | #define SET_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd, __val) \ |
81 | SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val) | 69 | SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val) |
82 | #define SET_H2CCMD_PWRMODE_PARM_SMART_PS(__ph2ccmd, __val) \ | 70 | #define SET_H2CCMD_PWRMODE_PARM_SMART_PS_23A(__ph2ccmd, __val) \ |
83 | SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val) | 71 | SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val) |
84 | #define SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__ph2ccmd, __val) \ | 72 | #define SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__ph2ccmd, __val) \ |
85 | SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) | 73 | SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) |
@@ -92,10 +80,8 @@ enum rtl8192c_h2c_cmd { | |||
92 | #define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val) \ | 80 | #define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val) \ |
93 | SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) | 81 | SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) |
94 | 82 | ||
95 | int rtl8723ae_download_fw(struct ieee80211_hw *hw); | ||
96 | void rtl8723ae_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id, | 83 | void rtl8723ae_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id, |
97 | u32 cmd_len, u8 *p_cmdbuffer); | 84 | u32 cmd_len, u8 *p_cmdbuffer); |
98 | void rtl8723ae_firmware_selfreset(struct ieee80211_hw *hw); | ||
99 | void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode); | 85 | void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode); |
100 | void rtl8723ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished); | 86 | void rtl8723ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished); |
101 | void rtl8723ae_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus); | 87 | void rtl8723ae_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus); |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c index 3d092e4b0b7f..48fee1be78c2 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c | |||
@@ -31,6 +31,8 @@ | |||
31 | #include "../pci.h" | 31 | #include "../pci.h" |
32 | #include "dm.h" | 32 | #include "dm.h" |
33 | #include "fw.h" | 33 | #include "fw.h" |
34 | #include "../rtl8723com/fw_common.h" | ||
35 | #include "../rtl8723com/fw_common.h" | ||
34 | #include "phy.h" | 36 | #include "phy.h" |
35 | #include "reg.h" | 37 | #include "reg.h" |
36 | #include "hal_btc.h" | 38 | #include "hal_btc.h" |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c index 8b64b1cd3176..5d534df8d90c 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include "phy.h" | 32 | #include "phy.h" |
33 | #include "../rtl8723com/phy_common.h" | 33 | #include "../rtl8723com/phy_common.h" |
34 | #include "fw.h" | 34 | #include "fw.h" |
35 | #include "../rtl8723com/fw_common.h" | ||
35 | #include "reg.h" | 36 | #include "reg.h" |
36 | #include "def.h" | 37 | #include "def.h" |
37 | 38 | ||
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c index 914b36f72d55..7eff1c51539c 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include "phy.h" | 39 | #include "phy.h" |
40 | #include "dm.h" | 40 | #include "dm.h" |
41 | #include "fw.h" | 41 | #include "fw.h" |
42 | #include "../rtl8723com/fw_common.h" | ||
42 | #include "led.h" | 43 | #include "led.h" |
43 | #include "hw.h" | 44 | #include "hw.h" |
44 | #include "pwrseqcmd.h" | 45 | #include "pwrseqcmd.h" |
@@ -890,7 +891,7 @@ int rtl8723ae_hw_init(struct ieee80211_hw *hw) | |||
890 | return err; | 891 | return err; |
891 | } | 892 | } |
892 | 893 | ||
893 | err = rtl8723ae_download_fw(hw); | 894 | err = rtl8723_download_fw(hw, false); |
894 | if (err) { | 895 | if (err) { |
895 | RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, | 896 | RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, |
896 | "Failed to download FW. Init HW without FW now..\n"); | 897 | "Failed to download FW. Init HW without FW now..\n"); |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c index 0b97c9acebaa..1087a3bd07fa 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c | |||
@@ -40,6 +40,8 @@ | |||
40 | #include "../rtl8723com/phy_common.h" | 40 | #include "../rtl8723com/phy_common.h" |
41 | #include "dm.h" | 41 | #include "dm.h" |
42 | #include "hw.h" | 42 | #include "hw.h" |
43 | #include "fw.h" | ||
44 | #include "../rtl8723com/fw_common.h" | ||
43 | #include "sw.h" | 45 | #include "sw.h" |
44 | #include "trx.h" | 46 | #include "trx.h" |
45 | #include "led.h" | 47 | #include "led.h" |
@@ -194,6 +196,11 @@ void rtl8723ae_deinit_sw_vars(struct ieee80211_hw *hw) | |||
194 | } | 196 | } |
195 | } | 197 | } |
196 | 198 | ||
199 | static bool is_fw_header(struct rtl92c_firmware_header *hdr) | ||
200 | { | ||
201 | return (hdr->signature & 0xfff0) == 0x2300; | ||
202 | } | ||
203 | |||
197 | static struct rtl_hal_ops rtl8723ae_hal_ops = { | 204 | static struct rtl_hal_ops rtl8723ae_hal_ops = { |
198 | .init_sw_vars = rtl8723ae_init_sw_vars, | 205 | .init_sw_vars = rtl8723ae_init_sw_vars, |
199 | .deinit_sw_vars = rtl8723ae_deinit_sw_vars, | 206 | .deinit_sw_vars = rtl8723ae_deinit_sw_vars, |
@@ -239,6 +246,7 @@ static struct rtl_hal_ops rtl8723ae_hal_ops = { | |||
239 | .c2h_command_handle = rtl_8723e_c2h_command_handle, | 246 | .c2h_command_handle = rtl_8723e_c2h_command_handle, |
240 | .bt_wifi_media_status_notify = rtl_8723e_bt_wifi_media_status_notify, | 247 | .bt_wifi_media_status_notify = rtl_8723e_bt_wifi_media_status_notify, |
241 | .bt_coex_off_before_lps = rtl8723ae_bt_coex_off_before_lps, | 248 | .bt_coex_off_before_lps = rtl8723ae_bt_coex_off_before_lps, |
249 | .is_fw_header = is_fw_header, | ||
242 | }; | 250 | }; |
243 | 251 | ||
244 | static struct rtl_mod_params rtl8723ae_mod_params = { | 252 | static struct rtl_mod_params rtl8723ae_mod_params = { |