@@ -85,52 +85,6 @@ static void rtl8821ae_init_aspm_vars(struct ieee80211_hw *hw)
85
85
rtlpci -> const_support_pciaspm = 1 ;
86
86
}
87
87
88
- static void load_wowlan_fw (struct rtl_priv * rtlpriv )
89
- {
90
- /* callback routine to load wowlan firmware after main fw has
91
- * been loaded
92
- */
93
- const struct firmware * wowlan_firmware ;
94
- char * fw_name = NULL ;
95
- int err ;
96
-
97
- /* for wowlan firmware buf */
98
- rtlpriv -> rtlhal .wowlan_firmware = vzalloc (0x8000 );
99
- if (!rtlpriv -> rtlhal .wowlan_firmware ) {
100
- RT_TRACE (rtlpriv , COMP_ERR , DBG_EMERG ,
101
- "Can't alloc buffer for wowlan fw.\n" );
102
- return ;
103
- }
104
-
105
- if (rtlpriv -> rtlhal .hw_type == HARDWARE_TYPE_RTL8821AE )
106
- fw_name = "rtlwifi/rtl8821aefw_wowlan.bin" ;
107
- else
108
- fw_name = "rtlwifi/rtl8812aefw_wowlan.bin" ;
109
- err = request_firmware (& wowlan_firmware , fw_name , rtlpriv -> io .dev );
110
- if (err ) {
111
- RT_TRACE (rtlpriv , COMP_ERR , DBG_EMERG ,
112
- "Failed to request wowlan firmware!\n" );
113
- goto error ;
114
- }
115
-
116
- if (wowlan_firmware -> size > 0x8000 ) {
117
- RT_TRACE (rtlpriv , COMP_ERR , DBG_EMERG ,
118
- "Wowlan Firmware is too big!\n" );
119
- goto error ;
120
- }
121
-
122
- memcpy (rtlpriv -> rtlhal .wowlan_firmware , wowlan_firmware -> data ,
123
- wowlan_firmware -> size );
124
- rtlpriv -> rtlhal .wowlan_fwsize = wowlan_firmware -> size ;
125
- release_firmware (wowlan_firmware );
126
-
127
- RT_TRACE (rtlpriv , COMP_INIT , DBG_LOUD , "WOWLAN FirmwareDownload OK\n" );
128
- return ;
129
- error :
130
- release_firmware (wowlan_firmware );
131
- vfree (rtlpriv -> rtlhal .wowlan_firmware );
132
- }
133
-
134
88
/*InitializeVariables8812E*/
135
89
int rtl8821ae_init_sw_vars (struct ieee80211_hw * hw )
136
90
{
@@ -231,28 +185,48 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
231
185
else if (rtlpriv -> psc .reg_fwctrl_lps == 3 )
232
186
rtlpriv -> psc .fwctrl_psmode = FW_PS_DTIM_MODE ;
233
187
234
- rtlpriv -> rtl_fw_second_cb = load_wowlan_fw ;
235
188
/* for firmware buf */
236
189
rtlpriv -> rtlhal .pfirmware = vzalloc (0x8000 );
237
190
if (!rtlpriv -> rtlhal .pfirmware ) {
238
191
RT_TRACE (rtlpriv , COMP_ERR , DBG_EMERG ,
239
192
"Can't alloc buffer for fw.\n" );
240
193
return 1 ;
241
194
}
195
+ rtlpriv -> rtlhal .wowlan_firmware = vzalloc (0x8000 );
196
+ if (!rtlpriv -> rtlhal .wowlan_firmware ) {
197
+ RT_TRACE (rtlpriv , COMP_ERR , DBG_EMERG ,
198
+ "Can't alloc buffer for wowlan fw.\n" );
199
+ return 1 ;
200
+ }
242
201
243
- if (rtlhal -> hw_type == HARDWARE_TYPE_RTL8812AE )
202
+ if (rtlhal -> hw_type == HARDWARE_TYPE_RTL8812AE ) {
244
203
rtlpriv -> cfg -> fw_name = "rtlwifi/rtl8812aefw.bin" ;
245
- else
204
+ rtlpriv -> cfg -> wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin" ;
205
+ } else {
246
206
rtlpriv -> cfg -> fw_name = "rtlwifi/rtl8821aefw.bin" ;
207
+ rtlpriv -> cfg -> wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin" ;
208
+ }
247
209
248
210
rtlpriv -> max_fw_size = 0x8000 ;
211
+ /*load normal firmware*/
249
212
pr_info ("Using firmware %s\n" , rtlpriv -> cfg -> fw_name );
250
213
err = request_firmware_nowait (THIS_MODULE , 1 , rtlpriv -> cfg -> fw_name ,
251
214
rtlpriv -> io .dev , GFP_KERNEL , hw ,
252
215
rtl_fw_cb );
253
216
if (err ) {
254
217
RT_TRACE (rtlpriv , COMP_ERR , DBG_EMERG ,
255
- "Failed to request firmware!\n" );
218
+ "Failed to request normal firmware!\n" );
219
+ return 1 ;
220
+ }
221
+ /*load wowlan firmware*/
222
+ pr_info ("Using firmware %s\n" , rtlpriv -> cfg -> wowlan_fw_name );
223
+ err = request_firmware_nowait (THIS_MODULE , 1 ,
224
+ rtlpriv -> cfg -> wowlan_fw_name ,
225
+ rtlpriv -> io .dev , GFP_KERNEL , hw ,
226
+ rtl_wowlan_fw_cb );
227
+ if (err ) {
228
+ RT_TRACE (rtlpriv , COMP_ERR , DBG_EMERG ,
229
+ "Failed to request wowlan firmware!\n" );
256
230
return 1 ;
257
231
}
258
232
return 0 ;
0 commit comments