1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2009-2010 Realtek Corporation.*/
14 static void _rtl8821ae_enable_fw_download(struct ieee80211_hw
*hw
, bool enable
)
16 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
20 rtl_write_byte(rtlpriv
, REG_MCUFWDL
, 0x05);
22 tmp
= rtl_read_byte(rtlpriv
, REG_MCUFWDL
+ 2);
23 rtl_write_byte(rtlpriv
, REG_MCUFWDL
+ 2, tmp
& 0xf7);
25 tmp
= rtl_read_byte(rtlpriv
, REG_MCUFWDL
);
27 tmp
= rtl_read_byte(rtlpriv
, REG_MCUFWDL
);
28 rtl_write_byte(rtlpriv
, REG_MCUFWDL
, tmp
& 0xfe);
29 tmp
= rtl_read_byte(rtlpriv
, REG_MCUFWDL
);
33 static void _rtl8821ae_write_fw(struct ieee80211_hw
*hw
,
34 enum version_8821ae version
,
37 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
38 u8
*bufferptr
= (u8
*)buffer
;
39 u32 pagenums
, remainsize
;
42 RT_TRACE(rtlpriv
, COMP_FW
, DBG_LOUD
, "FW size is %d bytes,\n", size
);
44 rtl_fill_dummy(bufferptr
, &size
);
46 pagenums
= size
/ FW_8821AE_PAGE_SIZE
;
47 remainsize
= size
% FW_8821AE_PAGE_SIZE
;
50 pr_err("Page numbers should not greater then 8\n");
52 for (page
= 0; page
< pagenums
; page
++) {
53 offset
= page
* FW_8821AE_PAGE_SIZE
;
54 rtl_fw_page_write(hw
, page
, (bufferptr
+ offset
),
59 offset
= pagenums
* FW_8821AE_PAGE_SIZE
;
61 rtl_fw_page_write(hw
, page
, (bufferptr
+ offset
), remainsize
);
65 static int _rtl8821ae_fw_free_to_go(struct ieee80211_hw
*hw
)
67 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
73 value32
= rtl_read_dword(rtlpriv
, REG_MCUFWDL
);
74 } while ((counter
++ < FW_8821AE_POLLING_TIMEOUT_COUNT
) &&
75 (!(value32
& FWDL_CHKSUM_RPT
)));
77 if (counter
>= FW_8821AE_POLLING_TIMEOUT_COUNT
) {
78 RT_TRACE(rtlpriv
, COMP_ERR
, DBG_LOUD
,
79 "chksum report fail! REG_MCUFWDL:0x%08x .\n",
83 value32
= rtl_read_dword(rtlpriv
, REG_MCUFWDL
);
84 value32
|= MCUFWDL_RDY
;
85 value32
&= ~WINTINI_RDY
;
86 rtl_write_dword(rtlpriv
, REG_MCUFWDL
, value32
);
88 rtl8821ae_firmware_selfreset(hw
);
92 value32
= rtl_read_dword(rtlpriv
, REG_MCUFWDL
);
93 if (value32
& WINTINI_RDY
)
96 udelay(FW_8821AE_POLLING_DELAY
);
97 } while (counter
++ < FW_8821AE_POLLING_TIMEOUT_COUNT
);
99 pr_err("Polling FW ready fail!! REG_MCUFWDL:0x%08x .\n",
106 static void _rtl8821ae_wait_for_h2c_cmd_finish(struct rtl_priv
*rtlpriv
)
112 val
= rtl_read_byte(rtlpriv
, REG_HMETFR
);
115 } while ((val
& 0x0F) && (count
< 1000));
118 int rtl8821ae_download_fw(struct ieee80211_hw
*hw
, bool buse_wake_on_wlan_fw
)
120 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
121 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
122 struct rtlwifi_firmware_header
*pfwheader
;
126 bool support_remote_wakeup
;
127 enum version_8821ae version
= rtlhal
->version
;
129 rtlpriv
->cfg
->ops
->get_hw_reg(hw
, HAL_DEF_WOWLAN
,
130 (u8
*)(&support_remote_wakeup
));
132 if (support_remote_wakeup
)
133 _rtl8821ae_wait_for_h2c_cmd_finish(rtlpriv
);
135 if (buse_wake_on_wlan_fw
) {
136 if (!rtlhal
->wowlan_firmware
)
140 (struct rtlwifi_firmware_header
*)rtlhal
->wowlan_firmware
;
141 rtlhal
->fw_version
= le16_to_cpu(pfwheader
->version
);
142 rtlhal
->fw_subversion
= pfwheader
->subversion
;
143 pfwdata
= (u8
*)rtlhal
->wowlan_firmware
;
144 fwsize
= rtlhal
->wowlan_fwsize
;
146 if (!rtlhal
->pfirmware
)
150 (struct rtlwifi_firmware_header
*)rtlhal
->pfirmware
;
151 rtlhal
->fw_version
= le16_to_cpu(pfwheader
->version
);
152 rtlhal
->fw_subversion
= pfwheader
->subversion
;
153 pfwdata
= (u8
*)rtlhal
->pfirmware
;
154 fwsize
= rtlhal
->fwsize
;
157 RT_TRACE(rtlpriv
, COMP_FW
, DBG_DMESG
,
158 "%s Firmware SIZE %d\n",
159 buse_wake_on_wlan_fw
? "Wowlan" : "Normal", fwsize
);
161 if (IS_FW_HEADER_EXIST_8812(pfwheader
) ||
162 IS_FW_HEADER_EXIST_8821(pfwheader
)) {
163 RT_TRACE(rtlpriv
, COMP_FW
, DBG_DMESG
,
164 "Firmware Version(%d), Signature(%#x)\n",
165 pfwheader
->version
, pfwheader
->signature
);
167 pfwdata
= pfwdata
+ sizeof(struct rtlwifi_firmware_header
);
168 fwsize
= fwsize
- sizeof(struct rtlwifi_firmware_header
);
171 if (rtlhal
->mac_func_enable
) {
172 if (rtl_read_byte(rtlpriv
, REG_MCUFWDL
) & BIT(7)) {
173 rtl_write_byte(rtlpriv
, REG_MCUFWDL
, 0x00);
174 rtl8821ae_firmware_selfreset(hw
);
177 _rtl8821ae_enable_fw_download(hw
, true);
178 _rtl8821ae_write_fw(hw
, version
, pfwdata
, fwsize
);
179 _rtl8821ae_enable_fw_download(hw
, false);
181 err
= _rtl8821ae_fw_free_to_go(hw
);
183 RT_TRACE(rtlpriv
, COMP_ERR
, DBG_DMESG
,
184 "Firmware is not ready to run!\n");
186 RT_TRACE(rtlpriv
, COMP_FW
, DBG_LOUD
,
187 "Firmware is ready to run!\n");
193 #if (USE_SPECIFIC_FW_TO_SUPPORT_WOWLAN == 1)
194 void rtl8821ae_set_fw_related_for_wowlan(struct ieee80211_hw
*hw
,
197 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
198 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
199 struct rtl_ps_ctl
*ppsc
= rtl_psc(rtl_priv(hw
));
200 /* 1. Before WoWLAN or After WOWLAN we need to re-download Fw. */
201 if (rtl8821ae_download_fw(hw
, used_wowlan_fw
)) {
202 RT_TRACE(rtlpriv
, COMP_INIT
, DBG_DMESG
,
203 "Re-Download Firmware failed!!\n");
204 rtlhal
->fw_ready
= false;
207 RT_TRACE(rtlpriv
, COMP_INIT
, DBG_DMESG
,
208 "Re-Download Firmware Success !!\n");
209 rtlhal
->fw_ready
= true;
211 /* 2. Re-Init the variables about Fw related setting. */
212 ppsc
->fw_current_inpsmode
= false;
213 rtlhal
->fw_ps_state
= FW_PS_STATE_ALL_ON_8821AE
;
214 rtlhal
->fw_clk_change_in_progress
= false;
215 rtlhal
->allow_sw_to_change_hwclc
= false;
216 rtlhal
->last_hmeboxnum
= 0;
220 static bool _rtl8821ae_check_fw_read_last_h2c(struct ieee80211_hw
*hw
,
223 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
227 val_hmetfr
= rtl_read_byte(rtlpriv
, REG_HMETFR
);
228 if (((val_hmetfr
>> boxnum
) & BIT(0)) == 0)
233 static void _rtl8821ae_fill_h2c_command(struct ieee80211_hw
*hw
,
234 u8 element_id
, u32 cmd_len
,
237 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
238 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
240 u16 box_reg
= 0, box_extreg
= 0;
242 bool isfw_read
= false;
244 bool bwrite_sucess
= false;
245 u8 wait_h2c_limmit
= 100;
246 /*u8 wait_writeh2c_limmit = 100;*/
247 u8 boxcontent
[4], boxextcontent
[4];
248 u32 h2c_waitcounter
= 0;
249 unsigned long flag
= 0;
252 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
, "come in\n");
255 spin_lock_irqsave(&rtlpriv
->locks
.h2c_lock
, flag
);
256 if (rtlhal
->h2c_setinprogress
) {
257 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
,
258 "H2C set in progress! Wait to set..element_id(%d).\n",
261 while (rtlhal
->h2c_setinprogress
) {
262 spin_unlock_irqrestore(&rtlpriv
->locks
.h2c_lock
,
265 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
,
266 "Wait 100 us (%d times)...\n",
270 if (h2c_waitcounter
> 1000)
272 spin_lock_irqsave(&rtlpriv
->locks
.h2c_lock
,
275 spin_unlock_irqrestore(&rtlpriv
->locks
.h2c_lock
, flag
);
277 rtlhal
->h2c_setinprogress
= true;
278 spin_unlock_irqrestore(&rtlpriv
->locks
.h2c_lock
, flag
);
283 while (!bwrite_sucess
) {
284 boxnum
= rtlhal
->last_hmeboxnum
;
287 box_reg
= REG_HMEBOX_0
;
288 box_extreg
= REG_HMEBOX_EXT_0
;
291 box_reg
= REG_HMEBOX_1
;
292 box_extreg
= REG_HMEBOX_EXT_1
;
295 box_reg
= REG_HMEBOX_2
;
296 box_extreg
= REG_HMEBOX_EXT_2
;
299 box_reg
= REG_HMEBOX_3
;
300 box_extreg
= REG_HMEBOX_EXT_3
;
303 RT_TRACE(rtlpriv
, COMP_ERR
, DBG_LOUD
,
304 "switch case %#x not processed\n", boxnum
);
309 u1b_tmp
= rtl_read_byte(rtlpriv
, REG_CR
);
311 if (u1b_tmp
!= 0xEA) {
314 if (rtl_read_byte(rtlpriv
, REG_TXDMA_STATUS
) == 0xEA ||
315 rtl_read_byte(rtlpriv
, REG_TXPKT_EMPTY
) == 0xEA)
316 rtl_write_byte(rtlpriv
, REG_SYS_CFG1
+ 3, 0xFF);
320 wait_h2c_limmit
= 100;
322 _rtl8821ae_check_fw_read_last_h2c(hw
, boxnum
);
324 /*wait until Fw read*/
326 if (wait_h2c_limmit
== 0) {
327 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
,
328 "Waiting too long for FW read clear HMEBox(%d)!\n",
336 _rtl8821ae_check_fw_read_last_h2c(hw
, boxnum
);
337 u1b_tmp
= rtl_read_byte(rtlpriv
, 0x130);
338 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
,
339 "Waiting for FW read clear HMEBox(%d)!!! 0x130 = %2x\n",
345 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
,
346 "Write H2C register BOX[%d] fail!!!!! Fw do not read.\n",
351 memset(boxcontent
, 0, sizeof(boxcontent
));
352 memset(boxextcontent
, 0, sizeof(boxextcontent
));
353 boxcontent
[0] = element_id
;
354 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
,
355 "Write element_id box_reg(%4x) = %2x\n",
356 box_reg
, element_id
);
362 /*boxcontent[0] &= ~(BIT(7));*/
363 memcpy((u8
*)(boxcontent
) + 1,
364 cmdbuffer
+ buf_index
, cmd_len
);
366 for (idx
= 0; idx
< 4; idx
++) {
367 rtl_write_byte(rtlpriv
, box_reg
+ idx
,
375 /*boxcontent[0] |= (BIT(7));*/
376 memcpy((u8
*)(boxextcontent
),
377 cmdbuffer
+ buf_index
+3, cmd_len
-3);
378 memcpy((u8
*)(boxcontent
) + 1,
379 cmdbuffer
+ buf_index
, 3);
381 for (idx
= 0; idx
< 4; idx
++) {
382 rtl_write_byte(rtlpriv
, box_extreg
+ idx
,
386 for (idx
= 0; idx
< 4; idx
++) {
387 rtl_write_byte(rtlpriv
, box_reg
+ idx
,
392 RT_TRACE(rtlpriv
, COMP_ERR
, DBG_LOUD
,
393 "switch case %#x not processed\n", cmd_len
);
397 bwrite_sucess
= true;
399 rtlhal
->last_hmeboxnum
= boxnum
+ 1;
400 if (rtlhal
->last_hmeboxnum
== 4)
401 rtlhal
->last_hmeboxnum
= 0;
403 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
,
404 "pHalData->last_hmeboxnum = %d\n",
405 rtlhal
->last_hmeboxnum
);
408 spin_lock_irqsave(&rtlpriv
->locks
.h2c_lock
, flag
);
409 rtlhal
->h2c_setinprogress
= false;
410 spin_unlock_irqrestore(&rtlpriv
->locks
.h2c_lock
, flag
);
412 RT_TRACE(rtlpriv
, COMP_CMD
, DBG_LOUD
, "go out\n");
415 void rtl8821ae_fill_h2c_cmd(struct ieee80211_hw
*hw
,
416 u8 element_id
, u32 cmd_len
, u8
*cmdbuffer
)
418 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
421 if (!rtlhal
->fw_ready
) {
423 "rtl8821ae: error H2C cmd because of Fw download fail!!!\n");
427 memset(tmp_cmdbuf
, 0, 8);
428 memcpy(tmp_cmdbuf
, cmdbuffer
, cmd_len
);
429 _rtl8821ae_fill_h2c_command(hw
, element_id
, cmd_len
, (u8
*)&tmp_cmdbuf
);
432 void rtl8821ae_firmware_selfreset(struct ieee80211_hw
*hw
)
434 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
435 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
438 if (rtlhal
->hw_type
== HARDWARE_TYPE_RTL8812AE
) {
439 u1b_tmp
= rtl_read_byte(rtlpriv
, REG_RSV_CTRL
+1);
440 rtl_write_byte(rtlpriv
, REG_RSV_CTRL
+1, (u1b_tmp
& (~BIT(3))));
442 u1b_tmp
= rtl_read_byte(rtlpriv
, REG_RSV_CTRL
+1);
443 rtl_write_byte(rtlpriv
, REG_RSV_CTRL
+1, (u1b_tmp
& (~BIT(0))));
446 u1b_tmp
= rtl_read_byte(rtlpriv
, REG_SYS_FUNC_EN
+1);
447 rtl_write_byte(rtlpriv
, REG_SYS_FUNC_EN
+1, (u1b_tmp
& (~BIT(2))));
450 if (rtlhal
->hw_type
== HARDWARE_TYPE_RTL8812AE
) {
451 u1b_tmp
= rtl_read_byte(rtlpriv
, REG_RSV_CTRL
+1);
452 rtl_write_byte(rtlpriv
, REG_RSV_CTRL
+1, (u1b_tmp
| BIT(3)));
454 u1b_tmp
= rtl_read_byte(rtlpriv
, REG_RSV_CTRL
+1);
455 rtl_write_byte(rtlpriv
, REG_RSV_CTRL
+1, (u1b_tmp
| BIT(0)));
458 u1b_tmp
= rtl_read_byte(rtlpriv
, REG_SYS_FUNC_EN
+1);
459 rtl_write_byte(rtlpriv
, REG_SYS_FUNC_EN
+1, (u1b_tmp
| BIT(2)));
461 RT_TRACE(rtlpriv
, COMP_INIT
, DBG_LOUD
,
462 "_8051Reset8812ae(): 8051 reset success .\n");
465 void rtl8821ae_set_fw_pwrmode_cmd(struct ieee80211_hw
*hw
, u8 mode
)
467 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
468 u8 u1_h2c_set_pwrmode
[H2C_8821AE_PWEMODE_LENGTH
] = { 0 };
469 struct rtl_ps_ctl
*ppsc
= rtl_psc(rtl_priv(hw
));
470 u8 rlbm
, power_state
= 0, byte5
= 0;
471 u8 awake_intvl
; /* DTIM = (awake_intvl - 1) */
472 struct rtl_btc_ops
*btc_ops
= rtlpriv
->btcoexist
.btc_ops
;
473 bool bt_ctrl_lps
= (rtlpriv
->cfg
->ops
->get_btc_status() ?
474 btc_ops
->btc_is_bt_ctrl_lps(rtlpriv
) : false);
475 bool bt_lps_on
= (rtlpriv
->cfg
->ops
->get_btc_status() ?
476 btc_ops
->btc_is_bt_lps_on(rtlpriv
) : false);
479 mode
= (bt_lps_on
? FW_PS_MIN_MODE
: FW_PS_ACTIVE_MODE
);
481 RT_TRACE(rtlpriv
, COMP_POWER
, DBG_DMESG
, "FW LPS mode = %d (coex:%d)\n",
493 case FW_PS_DTIM_MODE
:
495 awake_intvl
= ppsc
->reg_max_lps_awakeintvl
;
496 /* hw->conf.ps_dtim_period or mac->vif->bss_conf.dtim_period
497 * is only used in swlps.
506 if (rtlpriv
->mac80211
.p2p
) {
511 if (mode
== FW_PS_ACTIVE_MODE
) {
513 power_state
= FW_PWR_STATE_ACTIVE
;
516 byte5
= btc_ops
->btc_get_lps_val(rtlpriv
);
517 power_state
= btc_ops
->btc_get_rpwm_val(rtlpriv
);
519 if ((rlbm
== 2) && (byte5
& BIT(4))) {
520 /* Keep awake interval to 1 to prevent from
521 * decreasing coex performance
528 power_state
= FW_PWR_STATE_RF_OFF
;
532 SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode
, ((mode
) ? 1 : 0));
533 SET_H2CCMD_PWRMODE_PARM_RLBM(u1_h2c_set_pwrmode
, rlbm
);
534 SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode
,
536 ((rtlpriv
->mac80211
.p2p
) ?
537 ppsc
->smart_ps
: 1));
538 SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(u1_h2c_set_pwrmode
,
540 SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1_h2c_set_pwrmode
, 0);
541 SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode
, power_state
);
542 SET_H2CCMD_PWRMODE_PARM_BYTE5(u1_h2c_set_pwrmode
, byte5
);
544 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_DMESG
,
545 "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
546 u1_h2c_set_pwrmode
, H2C_8821AE_PWEMODE_LENGTH
);
547 if (rtlpriv
->cfg
->ops
->get_btc_status())
548 btc_ops
->btc_record_pwr_mode(rtlpriv
, u1_h2c_set_pwrmode
,
549 H2C_8821AE_PWEMODE_LENGTH
);
550 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_SETPWRMODE
,
551 H2C_8821AE_PWEMODE_LENGTH
,
555 void rtl8821ae_set_fw_media_status_rpt_cmd(struct ieee80211_hw
*hw
,
558 u8 parm
[3] = { 0, 0, 0 };
559 /* parm[0]: bit0=0-->Disconnect, bit0=1-->Connect
560 * bit1=0-->update Media Status to MACID
561 * bit1=1-->update Media Status from MACID to MACID_End
562 * parm[1]: MACID, if this is INFRA_STA, MacID = 0
566 SET_H2CCMD_MSRRPT_PARM_OPMODE(parm
, mstatus
);
567 SET_H2CCMD_MSRRPT_PARM_MACID_IND(parm
, 0);
569 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_MSRRPT
, 3, parm
);
572 void rtl8821ae_set_fw_ap_off_load_cmd(struct ieee80211_hw
*hw
,
573 u8 ap_offload_enable
)
575 struct rtl_mac
*mac
= rtl_mac(rtl_priv(hw
));
576 u8 u1_apoffload_parm
[H2C_8821AE_AP_OFFLOAD_LENGTH
] = { 0 };
578 SET_H2CCMD_AP_OFFLOAD_ON(u1_apoffload_parm
, ap_offload_enable
);
579 SET_H2CCMD_AP_OFFLOAD_HIDDEN(u1_apoffload_parm
, mac
->hiddenssid
);
580 SET_H2CCMD_AP_OFFLOAD_DENYANY(u1_apoffload_parm
, 0);
582 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_AP_OFFLOAD
,
583 H2C_8821AE_AP_OFFLOAD_LENGTH
,
587 void rtl8821ae_set_fw_wowlan_mode(struct ieee80211_hw
*hw
, bool func_en
)
589 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
590 struct rtl_ps_ctl
*ppsc
= rtl_psc(rtl_priv(hw
));
591 u8 fw_wowlan_info
[H2C_8821AE_WOWLAN_LENGTH
] = {0};
593 RT_TRACE(rtlpriv
, COMP_POWER
, DBG_LOUD
, "enable(%d)\n", func_en
);
595 SET_8812_H2CCMD_WOWLAN_FUNC_ENABLE(fw_wowlan_info
,
596 (func_en
? true : false));
598 SET_8812_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(fw_wowlan_info
,
599 ((ppsc
->wo_wlan_mode
& WAKE_ON_PATTERN_MATCH
) ? 1 : 0));
600 SET_8812_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(fw_wowlan_info
,
601 ((ppsc
->wo_wlan_mode
& WAKE_ON_MAGIC_PACKET
) ? 1 : 0));
603 SET_8812_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(fw_wowlan_info
, 0);
604 SET_8812_H2CCMD_WOWLAN_ALL_PKT_DROP(fw_wowlan_info
, false);
605 SET_8812_H2CCMD_WOWLAN_GPIO_ACTIVE(fw_wowlan_info
, 0);
606 SET_8812_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(fw_wowlan_info
, 1);
607 SET_8812_H2CCMD_WOWLAN_GPIONUM(fw_wowlan_info
, 0);
608 SET_8812_H2CCMD_WOWLAN_GPIO_DURATION(fw_wowlan_info
, 0);
610 RT_PRINT_DATA(rtlpriv
, COMP_POWER
, DBG_DMESG
,
611 "wowlan mode: cmd 0x80: Content:\n",
612 fw_wowlan_info
, H2C_8821AE_WOWLAN_LENGTH
);
614 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_WO_WLAN
,
615 H2C_8821AE_WOWLAN_LENGTH
,
619 void rtl8821ae_set_fw_remote_wake_ctrl_cmd(struct ieee80211_hw
*hw
,
622 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
623 struct rtl_ps_ctl
*ppsc
= rtl_psc(rtl_priv(hw
));
624 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
625 u8 remote_wake_ctrl_parm
[H2C_8821AE_REMOTE_WAKE_CTRL_LEN
] = {0};
627 RT_TRACE(rtlpriv
, COMP_POWER
, DBG_LOUD
,
628 "enable=%d, ARP offload=%d, GTK offload=%d\n",
629 enable
, ppsc
->arp_offload_enable
, ppsc
->gtk_offload_enable
);
631 SET_8812_H2CCMD_REMOTE_WAKECTRL_ENABLE(remote_wake_ctrl_parm
, enable
);
632 SET_8812_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(remote_wake_ctrl_parm
,
633 (ppsc
->arp_offload_enable
? 1 : 0));
634 SET_8812_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(remote_wake_ctrl_parm
,
635 (ppsc
->gtk_offload_enable
? 1 : 0));
636 SET_8812_H2CCMD_REMOTE_WAKE_CTRL_REALWOWV2_EN(remote_wake_ctrl_parm
,
637 (rtlhal
->real_wow_v2_enable
? 1 : 0));
639 RT_PRINT_DATA(rtlpriv
, COMP_POWER
, DBG_TRACE
,
640 "remote_wake_ctrl: cmd 0x4: Content:\n",
641 remote_wake_ctrl_parm
, H2C_8821AE_REMOTE_WAKE_CTRL_LEN
);
643 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_REMOTE_WAKE_CTRL
,
644 H2C_8821AE_REMOTE_WAKE_CTRL_LEN
,
645 remote_wake_ctrl_parm
);
648 void rtl8821ae_set_fw_keep_alive_cmd(struct ieee80211_hw
*hw
,
651 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
652 u8 keep_alive_info
[H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH
] = {0};
654 RT_TRACE(rtlpriv
, COMP_POWER
, DBG_LOUD
, "Enable(%d)\n", func_en
);
656 SET_8812_H2CCMD_KEEP_ALIVE_ENABLE(keep_alive_info
, func_en
);
657 /* 1: the period is controled by driver, 0: by Fw default */
658 SET_8812_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(keep_alive_info
, 1);
659 SET_8812_H2CCMD_KEEP_ALIVE_PERIOD(keep_alive_info
, 10); /* 10 sec */
661 RT_PRINT_DATA(rtlpriv
, COMP_POWER
, DBG_TRACE
,
662 "keep alive: cmd 0x3: Content:\n",
663 keep_alive_info
, H2C_8821AE_KEEP_ALIVE_CTRL
);
664 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_KEEP_ALIVE_CTRL
,
665 H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH
,
669 void rtl8821ae_set_fw_disconnect_decision_ctrl_cmd(struct ieee80211_hw
*hw
,
672 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
673 u8 parm
[H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN
] = {0};
675 SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_ENABLE(parm
, enabled
);
676 SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_USER_SETTING(parm
, 1);
677 SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_CHECK_PERIOD(parm
, 30);
678 SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(parm
, 3);
680 RT_PRINT_DATA(rtlpriv
, COMP_POWER
, DBG_TRACE
,
681 "disconnect_decision_ctrl: cmd 0x4: Content:\n",
682 parm
, H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN
);
683 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_DISCONNECT_DECISION
,
684 H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN
, parm
);
687 void rtl8821ae_set_fw_global_info_cmd(struct ieee80211_hw
*hw
)
689 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
690 struct rtl_security
*sec
= &rtlpriv
->sec
;
691 u8 remote_wakeup_sec_info
[H2C_8821AE_AOAC_GLOBAL_INFO_LEN
] = {0};
693 RT_TRACE(rtlpriv
, COMP_POWER
, DBG_LOUD
,
694 "PairwiseEncAlgorithm=%d, GroupEncAlgorithm=%d\n",
695 sec
->pairwise_enc_algorithm
, sec
->group_enc_algorithm
);
697 SET_8812_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(
698 remote_wakeup_sec_info
,
699 sec
->pairwise_enc_algorithm
);
700 SET_8812_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(remote_wakeup_sec_info
,
701 sec
->group_enc_algorithm
);
703 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_AOAC_GLOBAL_INFO
,
704 H2C_8821AE_AOAC_GLOBAL_INFO_LEN
,
705 remote_wakeup_sec_info
);
707 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_TRACE
,
708 "rtl8821ae_set_global_info: cmd 0x82:\n",
709 remote_wakeup_sec_info
, H2C_8821AE_AOAC_GLOBAL_INFO_LEN
);
716 #define BT_QOSNULL_PG 4
721 #define TOTAL_RESERVED_PKT_LEN_8812 4096
722 #define TOTAL_RESERVED_PKT_LEN_8821 2048
724 static u8 reserved_page_packet_8821
[TOTAL_RESERVED_PKT_LEN_8821
] = {
726 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
727 0xff, 0xff, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64,
728 0x40, 0x16, 0x9f, 0x23, 0xd4, 0x46, 0x20, 0x00,
729 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
730 0x64, 0x00, 0x20, 0x04, 0x00, 0x06, 0x64, 0x6c,
731 0x69, 0x6e, 0x6b, 0x31, 0x01, 0x08, 0x82, 0x84,
732 0x8b, 0x96, 0x0c, 0x18, 0x30, 0x48, 0x03, 0x01,
733 0x0b, 0x06, 0x02, 0x00, 0x00, 0x2a, 0x01, 0x8b,
734 0x32, 0x04, 0x12, 0x24, 0x60, 0x6c, 0x00, 0x00,
735 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
736 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
737 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
738 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
739 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
740 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
741 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
742 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
743 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
744 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
745 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
747 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
748 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
749 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
751 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
752 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
753 0x10, 0x00, 0x28, 0x8c, 0x00, 0x12, 0x00, 0x00,
754 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00,
755 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
756 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
758 /* page 1: ps-poll */
759 0xa4, 0x10, 0x01, 0xc0, 0x40, 0x16, 0x9f, 0x23,
760 0xd4, 0x46, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64,
761 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
762 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
763 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
764 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
765 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
766 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
767 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
768 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
769 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
770 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
771 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
772 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
773 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
775 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
776 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
777 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
778 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
779 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
780 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
782 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
783 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
784 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
786 0x18, 0x00, 0x28, 0x8c, 0x00, 0x12, 0x00, 0x00,
787 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
788 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
789 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
790 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
791 /* page 2: null data */
792 0x48, 0x01, 0x00, 0x00, 0x40, 0x16, 0x9f, 0x23,
793 0xd4, 0x46, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64,
794 0x40, 0x16, 0x9f, 0x23, 0xd4, 0x46, 0x00, 0x00,
795 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
796 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
797 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
798 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
799 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
800 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
801 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
802 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
803 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
804 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
805 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
806 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
807 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
808 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
809 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
811 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
813 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
814 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
816 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
818 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
819 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
820 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
821 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
822 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
823 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
824 /* page 3: qos null data */
825 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
826 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
827 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
828 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
829 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
830 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
832 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
834 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
836 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
838 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
839 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
840 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
841 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
844 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
845 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
846 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
847 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
849 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
850 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
851 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
852 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
853 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
855 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
856 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
857 /* page 4: BT qos null data */
858 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
859 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
860 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
861 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
863 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
864 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
865 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
866 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
867 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
868 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
869 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
872 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
873 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
874 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
875 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
876 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
877 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
878 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
879 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
880 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
881 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
883 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
884 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
885 0x3C, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
886 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
887 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
888 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
889 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
890 /* page 5~7 is for wowlan */
891 /* page 5: ARP resp */
892 0x08, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
893 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
894 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
895 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06,
896 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02,
897 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 0x00, 0x00,
898 0x00, 0x00, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
899 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
900 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
901 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
902 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
903 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
904 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
905 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
906 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
907 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
908 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
909 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
910 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
911 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
912 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
913 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
914 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
915 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
916 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
917 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
919 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
920 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
921 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
922 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
923 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
924 /* page 6: H2C_REMOTE_WAKE_CTRL_INFO */
925 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
926 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
927 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
928 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
929 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
930 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
931 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
932 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
933 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
934 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
935 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
936 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
938 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
939 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
940 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
942 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
943 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
944 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
945 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
946 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
947 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
948 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
949 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
950 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
951 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
952 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
953 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
954 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
955 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
956 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
957 /* page 7: Rsvd GTK extend memory (zero memory) */
958 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
959 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
960 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
961 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
962 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
963 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
964 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
965 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
966 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
967 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
968 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
969 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
970 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
971 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
972 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
973 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
974 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
975 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
976 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
977 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
978 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
979 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
980 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
981 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
982 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
983 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
984 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
985 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
986 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
987 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
988 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
989 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
992 static u8 reserved_page_packet_8812
[TOTAL_RESERVED_PKT_LEN_8812
] = {
994 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
995 0xFF, 0xFF, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
996 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x60, 0x00,
997 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
998 0x64, 0x00, 0x20, 0x04, 0x00, 0x03, 0x32, 0x31,
999 0x35, 0x01, 0x08, 0x82, 0x84, 0x8B, 0x96, 0x0C,
1000 0x12, 0x18, 0x24, 0x03, 0x01, 0x01, 0x06, 0x02,
1001 0x00, 0x00, 0x2A, 0x01, 0x02, 0x32, 0x04, 0x30,
1002 0x48, 0x60, 0x6C, 0x2D, 0x1A, 0xED, 0x09, 0x03,
1003 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1004 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1005 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D,
1006 0x00, 0xDD, 0x07, 0x00, 0xE0, 0x4C, 0x02, 0x02,
1007 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1008 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1009 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1010 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1011 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1012 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1013 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1014 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1015 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1016 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1017 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1018 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1019 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1020 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1021 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1022 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1023 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1024 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1025 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1026 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1027 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1028 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1029 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1030 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1031 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1032 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1033 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1034 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1035 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1036 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1037 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1038 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1039 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1040 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1041 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1042 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1043 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1044 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1045 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1046 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1047 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1048 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1049 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1050 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1051 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1052 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1053 0x10, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
1054 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00,
1055 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1058 /* page 1: ps-poll */
1059 0xA4, 0x10, 0x09, 0xC0, 0x84, 0xC9, 0XB2, 0xA7,
1060 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
1061 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1062 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1063 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1064 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1066 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1067 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1068 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1069 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1070 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1071 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1072 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1073 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1074 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1075 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1076 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1077 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1079 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1080 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1082 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1083 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1084 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1085 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1086 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1087 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1088 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1089 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1090 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1091 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1092 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1093 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1094 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1095 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1096 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1097 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1098 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1099 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1112 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1115 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1118 0x18, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
1119 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
1120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1122 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1123 /* page 2: null data */
1124 0x48, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
1125 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
1126 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
1127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1131 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1132 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
1184 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
1185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1186 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1187 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1188 /* page 3: Qos null data */
1189 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
1190 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
1191 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
1192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1195 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1213 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1215 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1216 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1218 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1219 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1227 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1228 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1231 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1234 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1235 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1236 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1239 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1240 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1241 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1244 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1248 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
1249 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
1250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1252 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1253 /* page 4: BT Qos null data */
1254 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
1255 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
1256 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
1257 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1258 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1259 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1260 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1261 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1272 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1276 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1277 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1278 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1279 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1282 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1283 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1287 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1290 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1294 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1295 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1296 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1297 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1298 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1299 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1300 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1302 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1303 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1304 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1305 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1306 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1308 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1309 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1311 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1313 0x3C, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
1314 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
1315 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1316 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1317 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1318 /* page 5~7 is for wowlan */
1319 /* page 5: ARP resp */
1320 0x08, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
1321 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
1322 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
1323 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06,
1324 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02,
1325 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 0x00, 0x00,
1326 0x00, 0x00, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
1327 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1328 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1330 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1331 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1333 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1334 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1335 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1336 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1338 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1339 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1340 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1341 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1342 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1343 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1344 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1345 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1346 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1347 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1348 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1349 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1352 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1356 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1357 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1358 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1359 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1360 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1362 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1363 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1364 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1365 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1366 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1367 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1368 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1370 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1372 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1379 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1380 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1381 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1384 /* page 6: H2C_REMOTE_WAKE_CTRL_INFO */
1385 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1386 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1387 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1388 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1389 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1390 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1391 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1392 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1393 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1394 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1395 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1396 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1397 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1398 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1399 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1400 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1401 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1402 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1403 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1404 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1405 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1406 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1407 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1408 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1409 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1410 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1411 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1414 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1415 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1416 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1417 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1418 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1419 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1420 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1421 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1422 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1423 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1424 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1425 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1426 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1427 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1428 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1429 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1431 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1432 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1433 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1434 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1435 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1436 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1437 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1438 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1439 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1440 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1441 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1442 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1443 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1444 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1445 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1446 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1447 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1448 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1449 /* page 7: Rsvd GTK extend memory (zero memory) */
1450 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1452 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1453 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1455 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1456 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1458 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1459 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1460 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1461 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1462 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1463 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1464 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1465 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1466 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1467 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1468 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1469 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1471 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1472 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1473 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1474 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1475 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1477 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1479 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1480 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1482 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1483 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1484 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1485 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1486 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1487 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1488 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1489 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1490 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1491 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1492 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1493 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1496 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1499 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1501 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1502 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1503 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1504 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1506 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1507 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1509 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1510 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1512 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1513 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1516 void rtl8812ae_set_fw_rsvdpagepkt(struct ieee80211_hw
*hw
,
1517 bool b_dl_finished
, bool dl_whole_packets
)
1519 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
1520 struct rtl_mac
*mac
= rtl_mac(rtlpriv
);
1521 struct sk_buff
*skb
= NULL
;
1524 u8 u1rsvdpageloc
[5] = { 0 };
1525 u8 u1rsvdpageloc2
[7] = { 0 };
1526 bool b_dlok
= false;
1534 /*---------------------------------------------------------
1536 *---------------------------------------------------------
1538 beacon
= &reserved_page_packet_8812
[BEACON_PG
* 512];
1539 SET_80211_HDR_ADDRESS2(beacon
, mac
->mac_addr
);
1540 SET_80211_HDR_ADDRESS3(beacon
, mac
->bssid
);
1542 if (b_dl_finished
) {
1543 totalpacketlen
= 512 - 40;
1546 /*-------------------------------------------------------
1548 *--------------------------------------------------------
1550 p_pspoll
= &reserved_page_packet_8812
[PSPOLL_PG
* 512];
1551 SET_80211_PS_POLL_AID(p_pspoll
, (mac
->assoc_id
| 0xc000));
1552 SET_80211_PS_POLL_BSSID(p_pspoll
, mac
->bssid
);
1553 SET_80211_PS_POLL_TA(p_pspoll
, mac
->mac_addr
);
1555 SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc
, PSPOLL_PG
);
1557 /*--------------------------------------------------------
1559 *---------------------------------------------------------
1561 nullfunc
= &reserved_page_packet_8812
[NULL_PG
* 512];
1562 SET_80211_HDR_ADDRESS1(nullfunc
, mac
->bssid
);
1563 SET_80211_HDR_ADDRESS2(nullfunc
, mac
->mac_addr
);
1564 SET_80211_HDR_ADDRESS3(nullfunc
, mac
->bssid
);
1566 SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc
, NULL_PG
);
1568 /*---------------------------------------------------------
1570 *----------------------------------------------------------
1572 qosnull
= &reserved_page_packet_8812
[QOSNULL_PG
* 512];
1573 SET_80211_HDR_ADDRESS1(qosnull
, mac
->bssid
);
1574 SET_80211_HDR_ADDRESS2(qosnull
, mac
->mac_addr
);
1575 SET_80211_HDR_ADDRESS3(qosnull
, mac
->bssid
);
1577 SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc
, QOSNULL_PG
);
1579 /*---------------------------------------------------------
1580 * (5) BT Qos null data
1581 *----------------------------------------------------------
1583 btqosnull
= &reserved_page_packet_8812
[BT_QOSNULL_PG
* 512];
1584 SET_80211_HDR_ADDRESS1(btqosnull
, mac
->bssid
);
1585 SET_80211_HDR_ADDRESS2(btqosnull
, mac
->mac_addr
);
1586 SET_80211_HDR_ADDRESS3(btqosnull
, mac
->bssid
);
1588 SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc
, BT_QOSNULL_PG
);
1590 if (!dl_whole_packets
) {
1591 totalpacketlen
= 512 * (BT_QOSNULL_PG
+ 1) - 40;
1594 /*---------------------------------------------------------
1596 *----------------------------------------------------------
1598 arpresp
= &reserved_page_packet_8812
[ARPRESP_PG
* 512];
1599 SET_80211_HDR_ADDRESS1(arpresp
, mac
->bssid
);
1600 SET_80211_HDR_ADDRESS2(arpresp
, mac
->mac_addr
);
1601 SET_80211_HDR_ADDRESS3(arpresp
, mac
->bssid
);
1603 SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2
, ARPRESP_PG
);
1605 /*---------------------------------------------------------
1606 * (7) Remote Wake Ctrl
1607 *----------------------------------------------------------
1609 SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2
,
1612 /*---------------------------------------------------------
1613 * (8) GTK Ext Memory
1614 *----------------------------------------------------------
1616 SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2
, GTKEXT_PG
);
1618 totalpacketlen
= TOTAL_RESERVED_PKT_LEN_8812
- 40;
1621 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_LOUD
,
1622 "rtl8812ae_set_fw_rsvdpagepkt(): packet data\n",
1623 &reserved_page_packet_8812
[0], totalpacketlen
);
1625 skb
= dev_alloc_skb(totalpacketlen
);
1628 skb_put_data(skb
, &reserved_page_packet_8812
, totalpacketlen
);
1630 rtstatus
= rtl_cmd_send_packet(hw
, skb
);
1635 if (!b_dl_finished
&& b_dlok
) {
1636 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_DMESG
,
1637 "H2C_RSVDPAGE:\n", u1rsvdpageloc
, 5);
1638 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_RSVDPAGE
,
1639 sizeof(u1rsvdpageloc
), u1rsvdpageloc
);
1640 if (dl_whole_packets
) {
1641 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_DMESG
,
1642 "wowlan H2C_RSVDPAGE:\n", u1rsvdpageloc2
, 7);
1643 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_AOAC_RSVDPAGE
,
1644 sizeof(u1rsvdpageloc2
), u1rsvdpageloc2
);
1649 RT_TRACE(rtlpriv
, COMP_ERR
, DBG_WARNING
,
1650 "Set RSVD page location to Fw FAIL!!!!!!.\n");
1653 void rtl8821ae_set_fw_rsvdpagepkt(struct ieee80211_hw
*hw
,
1654 bool b_dl_finished
, bool dl_whole_packets
)
1656 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
1657 struct rtl_mac
*mac
= rtl_mac(rtl_priv(hw
));
1658 struct sk_buff
*skb
= NULL
;
1661 u8 u1rsvdpageloc
[5] = { 0 };
1662 u8 u1rsvdpageloc2
[7] = { 0 };
1663 bool b_dlok
= false;
1671 /*---------------------------------------------------------
1673 *---------------------------------------------------------
1675 beacon
= &reserved_page_packet_8821
[BEACON_PG
* 256];
1676 SET_80211_HDR_ADDRESS2(beacon
, mac
->mac_addr
);
1677 SET_80211_HDR_ADDRESS3(beacon
, mac
->bssid
);
1679 if (b_dl_finished
) {
1680 totalpacketlen
= 256 - 40;
1683 /*-------------------------------------------------------
1685 *--------------------------------------------------------
1687 p_pspoll
= &reserved_page_packet_8821
[PSPOLL_PG
* 256];
1688 SET_80211_PS_POLL_AID(p_pspoll
, (mac
->assoc_id
| 0xc000));
1689 SET_80211_PS_POLL_BSSID(p_pspoll
, mac
->bssid
);
1690 SET_80211_PS_POLL_TA(p_pspoll
, mac
->mac_addr
);
1692 SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc
, PSPOLL_PG
);
1694 /*--------------------------------------------------------
1696 *---------------------------------------------------------i
1698 nullfunc
= &reserved_page_packet_8821
[NULL_PG
* 256];
1699 SET_80211_HDR_ADDRESS1(nullfunc
, mac
->bssid
);
1700 SET_80211_HDR_ADDRESS2(nullfunc
, mac
->mac_addr
);
1701 SET_80211_HDR_ADDRESS3(nullfunc
, mac
->bssid
);
1703 SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc
, NULL_PG
);
1705 /*---------------------------------------------------------
1707 *----------------------------------------------------------
1709 qosnull
= &reserved_page_packet_8821
[QOSNULL_PG
* 256];
1710 SET_80211_HDR_ADDRESS1(qosnull
, mac
->bssid
);
1711 SET_80211_HDR_ADDRESS2(qosnull
, mac
->mac_addr
);
1712 SET_80211_HDR_ADDRESS3(qosnull
, mac
->bssid
);
1714 SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc
, QOSNULL_PG
);
1716 /*---------------------------------------------------------
1718 *----------------------------------------------------------
1720 btqosnull
= &reserved_page_packet_8821
[BT_QOSNULL_PG
* 256];
1721 SET_80211_HDR_ADDRESS1(btqosnull
, mac
->bssid
);
1722 SET_80211_HDR_ADDRESS2(btqosnull
, mac
->mac_addr
);
1723 SET_80211_HDR_ADDRESS3(btqosnull
, mac
->bssid
);
1725 SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc
, BT_QOSNULL_PG
);
1727 if (!dl_whole_packets
) {
1728 totalpacketlen
= 256 * (BT_QOSNULL_PG
+ 1) - 40;
1731 /*---------------------------------------------------------
1733 *----------------------------------------------------------
1735 arpresp
= &reserved_page_packet_8821
[ARPRESP_PG
* 256];
1736 SET_80211_HDR_ADDRESS1(arpresp
, mac
->bssid
);
1737 SET_80211_HDR_ADDRESS2(arpresp
, mac
->mac_addr
);
1738 SET_80211_HDR_ADDRESS3(arpresp
, mac
->bssid
);
1740 SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2
, ARPRESP_PG
);
1742 /*---------------------------------------------------------
1743 * (7) Remote Wake Ctrl
1744 *----------------------------------------------------------
1746 SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2
,
1749 /*---------------------------------------------------------
1750 * (8) GTK Ext Memory
1751 *----------------------------------------------------------
1753 SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2
, GTKEXT_PG
);
1755 totalpacketlen
= TOTAL_RESERVED_PKT_LEN_8821
- 40;
1759 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_LOUD
,
1760 "rtl8821ae_set_fw_rsvdpagepkt(): packet data\n",
1761 &reserved_page_packet_8821
[0], totalpacketlen
);
1763 skb
= dev_alloc_skb(totalpacketlen
);
1766 skb_put_data(skb
, &reserved_page_packet_8821
, totalpacketlen
);
1768 rtstatus
= rtl_cmd_send_packet(hw
, skb
);
1773 if (!b_dl_finished
&& b_dlok
) {
1774 RT_TRACE(rtlpriv
, COMP_POWER
, DBG_LOUD
,
1775 "Set RSVD page location to Fw.\n");
1776 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_DMESG
,
1777 "H2C_RSVDPAGE:\n", u1rsvdpageloc
, 5);
1778 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_RSVDPAGE
,
1779 sizeof(u1rsvdpageloc
), u1rsvdpageloc
);
1780 if (dl_whole_packets
) {
1781 RT_PRINT_DATA(rtlpriv
, COMP_CMD
, DBG_DMESG
,
1782 "wowlan H2C_RSVDPAGE:\n",
1784 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_AOAC_RSVDPAGE
,
1785 sizeof(u1rsvdpageloc2
),
1791 RT_TRACE(rtlpriv
, COMP_ERR
, DBG_WARNING
,
1792 "Set RSVD page location to Fw FAIL!!!!!!.\n");
1796 /*Should check FW support p2p or not.*/
1797 static void rtl8821ae_set_p2p_ctw_period_cmd(struct ieee80211_hw
*hw
, u8 ctwindow
)
1799 u8 u1_ctwindow_period
[1] = { ctwindow
};
1801 rtl8821ae_fill_h2c_cmd(hw
, H2C_8821AE_P2P_PS_CTW_CMD
, 1,
1802 u1_ctwindow_period
);
1805 void rtl8821ae_set_p2p_ps_offload_cmd(struct ieee80211_hw
*hw
, u8 p2p_ps_state
)
1807 struct rtl_priv
*rtlpriv
= rtl_priv(hw
);
1808 struct rtl_ps_ctl
*rtlps
= rtl_psc(rtl_priv(hw
));
1809 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
1810 struct rtl_p2p_ps_info
*p2pinfo
= &rtlps
->p2p_ps_info
;
1811 struct p2p_ps_offload_t
*p2p_ps_offload
= &rtlhal
->p2p_ps_offload
;
1814 u32 start_time
, tsf_low
;
1816 switch (p2p_ps_state
) {
1817 case P2P_PS_DISABLE
:
1818 RT_TRACE(rtlpriv
, COMP_FW
, DBG_LOUD
, "P2P_PS_DISABLE\n");
1819 memset(p2p_ps_offload
, 0, sizeof(*p2p_ps_offload
));
1822 RT_TRACE(rtlpriv
, COMP_FW
, DBG_LOUD
, "P2P_PS_ENABLE\n");
1823 /* update CTWindow value. */
1824 if (p2pinfo
->ctwindow
> 0) {
1825 p2p_ps_offload
->ctwindow_en
= 1;
1826 ctwindow
= p2pinfo
->ctwindow
;
1827 rtl8821ae_set_p2p_ctw_period_cmd(hw
, ctwindow
);
1830 /* hw only support 2 set of NoA */
1831 for (i
= 0 ; i
< p2pinfo
->noa_num
; i
++) {
1832 /* To control the register setting for which NOA*/
1833 rtl_write_byte(rtlpriv
, 0x5cf, (i
<< 4));
1835 p2p_ps_offload
->noa0_en
= 1;
1837 p2p_ps_offload
->noa1_en
= 1;
1839 /* config P2P NoA Descriptor Register */
1840 rtl_write_dword(rtlpriv
, 0x5E0, p2pinfo
->noa_duration
[i
]);
1841 rtl_write_dword(rtlpriv
, 0x5E4, p2pinfo
->noa_interval
[i
]);
1843 /*Get Current \x14TSF value */
1844 tsf_low
= rtl_read_dword(rtlpriv
, REG_TSFTR
);
1846 start_time
= p2pinfo
->noa_start_time
[i
];
1847 if (p2pinfo
->noa_count_type
[i
] != 1) {
1848 while (start_time
<= (tsf_low
+(50*1024))) {
1849 start_time
+= p2pinfo
->noa_interval
[i
];
1850 if (p2pinfo
->noa_count_type
[i
] != 255)
1851 p2pinfo
->noa_count_type
[i
]--;
1854 rtl_write_dword(rtlpriv
, 0x5E8, start_time
);
1855 rtl_write_dword(rtlpriv
, 0x5EC,
1856 p2pinfo
->noa_count_type
[i
]);
1859 if ((p2pinfo
->opp_ps
== 1) || (p2pinfo
->noa_num
> 0)) {
1860 /* rst p2p circuit */
1861 rtl_write_byte(rtlpriv
, REG_DUAL_TSF_RST
, BIT(4));
1863 p2p_ps_offload
->offload_en
= 1;
1865 if (P2P_ROLE_GO
== rtlpriv
->mac80211
.p2p
) {
1866 p2p_ps_offload
->role
= 1;
1867 p2p_ps_offload
->allstasleep
= 0;
1869 p2p_ps_offload
->role
= 0;
1872 p2p_ps_offload
->discovery
= 0;
1876 RT_TRACE(rtlpriv
, COMP_FW
, DBG_LOUD
, "P2P_PS_SCAN\n");
1877 p2p_ps_offload
->discovery
= 1;
1879 case P2P_PS_SCAN_DONE
:
1880 RT_TRACE(rtlpriv
, COMP_FW
, DBG_LOUD
, "P2P_PS_SCAN_DONE\n");
1881 p2p_ps_offload
->discovery
= 0;
1882 p2pinfo
->p2p_ps_state
= P2P_PS_ENABLE
;
1888 rtl8821ae_fill_h2c_cmd(hw
,
1889 H2C_8821AE_P2P_PS_OFFLOAD
, 1, (u8
*)p2p_ps_offload
);
1892 void rtl8821ae_c2h_ra_report_handler(struct ieee80211_hw
*hw
,
1893 u8
*cmd_buf
, u8 cmd_len
)
1895 struct rtl_hal
*rtlhal
= rtl_hal(rtl_priv(hw
));
1896 u8 rate
= cmd_buf
[0] & 0x3F;
1898 rtlhal
->current_ra_rate
= rtl8821ae_hw_rate_to_mrate(hw
, rate
);
1900 rtl8821ae_dm_update_init_rate(hw
, rate
);