103f3dd37SLarry Finger // SPDX-License-Identifier: GPL-2.0
203f3dd37SLarry Finger /* Copyright(c) 2009-2010 Realtek Corporation.*/
321e4b072SLarry Finger
421e4b072SLarry Finger #include "../wifi.h"
521e4b072SLarry Finger #include "../pci.h"
621e4b072SLarry Finger #include "../base.h"
7557f9331SLarry Finger #include "../core.h"
889d32c90SLarry Finger #include "../efuse.h"
921e4b072SLarry Finger #include "reg.h"
1021e4b072SLarry Finger #include "def.h"
1121e4b072SLarry Finger #include "fw.h"
1221e4b072SLarry Finger #include "dm.h"
1321e4b072SLarry Finger
_rtl8821ae_enable_fw_download(struct ieee80211_hw * hw,bool enable)1421e4b072SLarry Finger static void _rtl8821ae_enable_fw_download(struct ieee80211_hw *hw, bool enable)
1521e4b072SLarry Finger {
1621e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
1721e4b072SLarry Finger u8 tmp;
1821e4b072SLarry Finger
1921e4b072SLarry Finger if (enable) {
2021e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x05);
2121e4b072SLarry Finger
2221e4b072SLarry Finger tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL + 2);
2321e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_MCUFWDL + 2, tmp & 0xf7);
2421e4b072SLarry Finger
2521e4b072SLarry Finger tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
2621e4b072SLarry Finger } else {
2721e4b072SLarry Finger tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
2821e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp & 0xfe);
2921e4b072SLarry Finger tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
3021e4b072SLarry Finger }
3121e4b072SLarry Finger }
3221e4b072SLarry Finger
_rtl8821ae_write_fw(struct ieee80211_hw * hw,enum version_8821ae version,u8 * buffer,u32 size)3321e4b072SLarry Finger static void _rtl8821ae_write_fw(struct ieee80211_hw *hw,
3421e4b072SLarry Finger enum version_8821ae version,
3521e4b072SLarry Finger u8 *buffer, u32 size)
3621e4b072SLarry Finger {
3721e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
3821e4b072SLarry Finger u8 *bufferptr = (u8 *)buffer;
3921e4b072SLarry Finger u32 pagenums, remainsize;
4021e4b072SLarry Finger u32 page, offset;
4121e4b072SLarry Finger
4298611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "FW size is %d bytes,\n", size);
4321e4b072SLarry Finger
4489d32c90SLarry Finger rtl_fill_dummy(bufferptr, &size);
4521e4b072SLarry Finger
4621e4b072SLarry Finger pagenums = size / FW_8821AE_PAGE_SIZE;
4721e4b072SLarry Finger remainsize = size % FW_8821AE_PAGE_SIZE;
4821e4b072SLarry Finger
49c93ac39dSLarry Finger if (pagenums > 8)
50004a1e16SLarry Finger pr_err("Page numbers should not greater then 8\n");
5121e4b072SLarry Finger
5221e4b072SLarry Finger for (page = 0; page < pagenums; page++) {
5321e4b072SLarry Finger offset = page * FW_8821AE_PAGE_SIZE;
5489d32c90SLarry Finger rtl_fw_page_write(hw, page, (bufferptr + offset),
5521e4b072SLarry Finger FW_8821AE_PAGE_SIZE);
5621e4b072SLarry Finger }
5721e4b072SLarry Finger
5821e4b072SLarry Finger if (remainsize) {
5921e4b072SLarry Finger offset = pagenums * FW_8821AE_PAGE_SIZE;
6021e4b072SLarry Finger page = pagenums;
6189d32c90SLarry Finger rtl_fw_page_write(hw, page, (bufferptr + offset), remainsize);
6221e4b072SLarry Finger }
6321e4b072SLarry Finger }
6421e4b072SLarry Finger
_rtl8821ae_fw_free_to_go(struct ieee80211_hw * hw)6521e4b072SLarry Finger static int _rtl8821ae_fw_free_to_go(struct ieee80211_hw *hw)
6621e4b072SLarry Finger {
6721e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
6821e4b072SLarry Finger int err = -EIO;
6921e4b072SLarry Finger u32 counter = 0;
7021e4b072SLarry Finger u32 value32;
7121e4b072SLarry Finger
7221e4b072SLarry Finger do {
7321e4b072SLarry Finger value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
7421e4b072SLarry Finger } while ((counter++ < FW_8821AE_POLLING_TIMEOUT_COUNT) &&
7521e4b072SLarry Finger (!(value32 & FWDL_CHKSUM_RPT)));
7621e4b072SLarry Finger
7721e4b072SLarry Finger if (counter >= FW_8821AE_POLLING_TIMEOUT_COUNT) {
7898611b00SLarry Finger rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
792cc8918eSColin Ian King "chksum report fail! REG_MCUFWDL:0x%08x .\n",
8021e4b072SLarry Finger value32);
8121e4b072SLarry Finger goto exit;
8221e4b072SLarry Finger }
8321e4b072SLarry Finger value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
8421e4b072SLarry Finger value32 |= MCUFWDL_RDY;
8521e4b072SLarry Finger value32 &= ~WINTINI_RDY;
8621e4b072SLarry Finger rtl_write_dword(rtlpriv, REG_MCUFWDL, value32);
8721e4b072SLarry Finger
8821e4b072SLarry Finger rtl8821ae_firmware_selfreset(hw);
8921e4b072SLarry Finger
9021e4b072SLarry Finger counter = 0;
9121e4b072SLarry Finger do {
9221e4b072SLarry Finger value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
93c93ac39dSLarry Finger if (value32 & WINTINI_RDY)
94c93ac39dSLarry Finger return 0;
9521e4b072SLarry Finger
9621e4b072SLarry Finger udelay(FW_8821AE_POLLING_DELAY);
9721e4b072SLarry Finger } while (counter++ < FW_8821AE_POLLING_TIMEOUT_COUNT);
9821e4b072SLarry Finger
99004a1e16SLarry Finger pr_err("Polling FW ready fail!! REG_MCUFWDL:0x%08x .\n",
10021e4b072SLarry Finger value32);
10121e4b072SLarry Finger
10221e4b072SLarry Finger exit:
10321e4b072SLarry Finger return err;
10421e4b072SLarry Finger }
10521e4b072SLarry Finger
_rtl8821ae_wait_for_h2c_cmd_finish(struct rtl_priv * rtlpriv)10621e4b072SLarry Finger static void _rtl8821ae_wait_for_h2c_cmd_finish(struct rtl_priv *rtlpriv)
10721e4b072SLarry Finger {
10821e4b072SLarry Finger u8 val;
10921e4b072SLarry Finger u16 count = 0;
11021e4b072SLarry Finger
11121e4b072SLarry Finger do {
11221e4b072SLarry Finger val = rtl_read_byte(rtlpriv, REG_HMETFR);
11321e4b072SLarry Finger mdelay(1);
11421e4b072SLarry Finger count++;
11521e4b072SLarry Finger } while ((val & 0x0F) && (count < 1000));
11621e4b072SLarry Finger }
11721e4b072SLarry Finger
rtl8821ae_download_fw(struct ieee80211_hw * hw,bool buse_wake_on_wlan_fw)11821e4b072SLarry Finger int rtl8821ae_download_fw(struct ieee80211_hw *hw, bool buse_wake_on_wlan_fw)
11921e4b072SLarry Finger {
12021e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
12121e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
122253f10abSLarry Finger struct rtlwifi_firmware_header *pfwheader;
12321e4b072SLarry Finger u8 *pfwdata;
12421e4b072SLarry Finger u32 fwsize;
12521e4b072SLarry Finger int err;
12621e4b072SLarry Finger bool support_remote_wakeup;
12721e4b072SLarry Finger enum version_8821ae version = rtlhal->version;
12821e4b072SLarry Finger
12921e4b072SLarry Finger rtlpriv->cfg->ops->get_hw_reg(hw, HAL_DEF_WOWLAN,
13021e4b072SLarry Finger (u8 *)(&support_remote_wakeup));
13121e4b072SLarry Finger
13221e4b072SLarry Finger if (support_remote_wakeup)
13321e4b072SLarry Finger _rtl8821ae_wait_for_h2c_cmd_finish(rtlpriv);
13421e4b072SLarry Finger
13521e4b072SLarry Finger if (buse_wake_on_wlan_fw) {
13621e4b072SLarry Finger if (!rtlhal->wowlan_firmware)
13721e4b072SLarry Finger return 1;
13821e4b072SLarry Finger
13921e4b072SLarry Finger pfwheader =
140253f10abSLarry Finger (struct rtlwifi_firmware_header *)rtlhal->wowlan_firmware;
141253f10abSLarry Finger rtlhal->fw_version = le16_to_cpu(pfwheader->version);
14221e4b072SLarry Finger rtlhal->fw_subversion = pfwheader->subversion;
14321e4b072SLarry Finger pfwdata = (u8 *)rtlhal->wowlan_firmware;
14421e4b072SLarry Finger fwsize = rtlhal->wowlan_fwsize;
14521e4b072SLarry Finger } else {
14621e4b072SLarry Finger if (!rtlhal->pfirmware)
14721e4b072SLarry Finger return 1;
14821e4b072SLarry Finger
14921e4b072SLarry Finger pfwheader =
150253f10abSLarry Finger (struct rtlwifi_firmware_header *)rtlhal->pfirmware;
151253f10abSLarry Finger rtlhal->fw_version = le16_to_cpu(pfwheader->version);
15221e4b072SLarry Finger rtlhal->fw_subversion = pfwheader->subversion;
15321e4b072SLarry Finger pfwdata = (u8 *)rtlhal->pfirmware;
15421e4b072SLarry Finger fwsize = rtlhal->fwsize;
15521e4b072SLarry Finger }
15621e4b072SLarry Finger
15798611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
15821e4b072SLarry Finger "%s Firmware SIZE %d\n",
15921e4b072SLarry Finger buse_wake_on_wlan_fw ? "Wowlan" : "Normal", fwsize);
16021e4b072SLarry Finger
16121e4b072SLarry Finger if (IS_FW_HEADER_EXIST_8812(pfwheader) ||
16221e4b072SLarry Finger IS_FW_HEADER_EXIST_8821(pfwheader)) {
16398611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
16421e4b072SLarry Finger "Firmware Version(%d), Signature(%#x)\n",
16521e4b072SLarry Finger pfwheader->version, pfwheader->signature);
16621e4b072SLarry Finger
167253f10abSLarry Finger pfwdata = pfwdata + sizeof(struct rtlwifi_firmware_header);
168253f10abSLarry Finger fwsize = fwsize - sizeof(struct rtlwifi_firmware_header);
16921e4b072SLarry Finger }
17021e4b072SLarry Finger
17121e4b072SLarry Finger if (rtlhal->mac_func_enable) {
17221e4b072SLarry Finger if (rtl_read_byte(rtlpriv, REG_MCUFWDL) & BIT(7)) {
17321e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
17421e4b072SLarry Finger rtl8821ae_firmware_selfreset(hw);
17521e4b072SLarry Finger }
17621e4b072SLarry Finger }
17721e4b072SLarry Finger _rtl8821ae_enable_fw_download(hw, true);
17821e4b072SLarry Finger _rtl8821ae_write_fw(hw, version, pfwdata, fwsize);
17921e4b072SLarry Finger _rtl8821ae_enable_fw_download(hw, false);
18021e4b072SLarry Finger
18121e4b072SLarry Finger err = _rtl8821ae_fw_free_to_go(hw);
18221e4b072SLarry Finger if (err) {
18398611b00SLarry Finger rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG,
18421e4b072SLarry Finger "Firmware is not ready to run!\n");
18521e4b072SLarry Finger } else {
18698611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD,
18721e4b072SLarry Finger "Firmware is ready to run!\n");
18821e4b072SLarry Finger }
18921e4b072SLarry Finger
19021e4b072SLarry Finger return 0;
19121e4b072SLarry Finger }
19221e4b072SLarry Finger
19321e4b072SLarry Finger #if (USE_SPECIFIC_FW_TO_SUPPORT_WOWLAN == 1)
rtl8821ae_set_fw_related_for_wowlan(struct ieee80211_hw * hw,bool used_wowlan_fw)19421e4b072SLarry Finger void rtl8821ae_set_fw_related_for_wowlan(struct ieee80211_hw *hw,
19521e4b072SLarry Finger bool used_wowlan_fw)
19621e4b072SLarry Finger {
19721e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
19821e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
19921e4b072SLarry Finger struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
20021e4b072SLarry Finger /* 1. Before WoWLAN or After WOWLAN we need to re-download Fw. */
20121e4b072SLarry Finger if (rtl8821ae_download_fw(hw, used_wowlan_fw)) {
20298611b00SLarry Finger rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
20321e4b072SLarry Finger "Re-Download Firmware failed!!\n");
20421e4b072SLarry Finger rtlhal->fw_ready = false;
20521e4b072SLarry Finger return;
20621e4b072SLarry Finger }
20798611b00SLarry Finger rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
20821e4b072SLarry Finger "Re-Download Firmware Success !!\n");
20921e4b072SLarry Finger rtlhal->fw_ready = true;
21021e4b072SLarry Finger
21121e4b072SLarry Finger /* 2. Re-Init the variables about Fw related setting. */
21221e4b072SLarry Finger ppsc->fw_current_inpsmode = false;
21321e4b072SLarry Finger rtlhal->fw_ps_state = FW_PS_STATE_ALL_ON_8821AE;
21421e4b072SLarry Finger rtlhal->fw_clk_change_in_progress = false;
21521e4b072SLarry Finger rtlhal->allow_sw_to_change_hwclc = false;
21621e4b072SLarry Finger rtlhal->last_hmeboxnum = 0;
21721e4b072SLarry Finger }
21821e4b072SLarry Finger #endif
21921e4b072SLarry Finger
_rtl8821ae_check_fw_read_last_h2c(struct ieee80211_hw * hw,u8 boxnum)22021e4b072SLarry Finger static bool _rtl8821ae_check_fw_read_last_h2c(struct ieee80211_hw *hw,
22121e4b072SLarry Finger u8 boxnum)
22221e4b072SLarry Finger {
22321e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
22421e4b072SLarry Finger u8 val_hmetfr;
22521e4b072SLarry Finger bool result = false;
22621e4b072SLarry Finger
22721e4b072SLarry Finger val_hmetfr = rtl_read_byte(rtlpriv, REG_HMETFR);
22821e4b072SLarry Finger if (((val_hmetfr >> boxnum) & BIT(0)) == 0)
22921e4b072SLarry Finger result = true;
23021e4b072SLarry Finger return result;
23121e4b072SLarry Finger }
23221e4b072SLarry Finger
_rtl8821ae_fill_h2c_command(struct ieee80211_hw * hw,u8 element_id,u32 cmd_len,u8 * cmdbuffer)23321e4b072SLarry Finger static void _rtl8821ae_fill_h2c_command(struct ieee80211_hw *hw,
23421e4b072SLarry Finger u8 element_id, u32 cmd_len,
23521e4b072SLarry Finger u8 *cmdbuffer)
23621e4b072SLarry Finger {
23721e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
23821e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
23921e4b072SLarry Finger u8 boxnum = 0;
24021e4b072SLarry Finger u16 box_reg = 0, box_extreg = 0;
24121e4b072SLarry Finger u8 u1b_tmp = 0;
24221e4b072SLarry Finger bool isfw_read = false;
24321e4b072SLarry Finger u8 buf_index = 0;
24421e4b072SLarry Finger bool bwrite_sucess = false;
24521e4b072SLarry Finger u8 wait_h2c_limmit = 100;
24621e4b072SLarry Finger /*u8 wait_writeh2c_limmit = 100;*/
24721e4b072SLarry Finger u8 boxcontent[4], boxextcontent[4];
24821e4b072SLarry Finger u32 h2c_waitcounter = 0;
24921e4b072SLarry Finger unsigned long flag = 0;
25021e4b072SLarry Finger u8 idx = 0;
25121e4b072SLarry Finger
25298611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "come in\n");
25321e4b072SLarry Finger
25421e4b072SLarry Finger while (true) {
25521e4b072SLarry Finger spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
25621e4b072SLarry Finger if (rtlhal->h2c_setinprogress) {
25798611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
25821e4b072SLarry Finger "H2C set in progress! Wait to set..element_id(%d).\n",
25921e4b072SLarry Finger element_id);
26021e4b072SLarry Finger
26121e4b072SLarry Finger while (rtlhal->h2c_setinprogress) {
26221e4b072SLarry Finger spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock,
26321e4b072SLarry Finger flag);
26421e4b072SLarry Finger h2c_waitcounter++;
26598611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
26621e4b072SLarry Finger "Wait 100 us (%d times)...\n",
26721e4b072SLarry Finger h2c_waitcounter);
26821e4b072SLarry Finger udelay(100);
26921e4b072SLarry Finger
27021e4b072SLarry Finger if (h2c_waitcounter > 1000)
27121e4b072SLarry Finger return;
27221e4b072SLarry Finger spin_lock_irqsave(&rtlpriv->locks.h2c_lock,
27321e4b072SLarry Finger flag);
27421e4b072SLarry Finger }
27521e4b072SLarry Finger spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
27621e4b072SLarry Finger } else {
27721e4b072SLarry Finger rtlhal->h2c_setinprogress = true;
27821e4b072SLarry Finger spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
27921e4b072SLarry Finger break;
28021e4b072SLarry Finger }
28121e4b072SLarry Finger }
28221e4b072SLarry Finger
28321e4b072SLarry Finger while (!bwrite_sucess) {
28421e4b072SLarry Finger boxnum = rtlhal->last_hmeboxnum;
28521e4b072SLarry Finger switch (boxnum) {
28621e4b072SLarry Finger case 0:
28721e4b072SLarry Finger box_reg = REG_HMEBOX_0;
28821e4b072SLarry Finger box_extreg = REG_HMEBOX_EXT_0;
28921e4b072SLarry Finger break;
29021e4b072SLarry Finger case 1:
29121e4b072SLarry Finger box_reg = REG_HMEBOX_1;
29221e4b072SLarry Finger box_extreg = REG_HMEBOX_EXT_1;
29321e4b072SLarry Finger break;
29421e4b072SLarry Finger case 2:
29521e4b072SLarry Finger box_reg = REG_HMEBOX_2;
29621e4b072SLarry Finger box_extreg = REG_HMEBOX_EXT_2;
29721e4b072SLarry Finger break;
29821e4b072SLarry Finger case 3:
29921e4b072SLarry Finger box_reg = REG_HMEBOX_3;
30021e4b072SLarry Finger box_extreg = REG_HMEBOX_EXT_3;
30121e4b072SLarry Finger break;
30221e4b072SLarry Finger default:
30398611b00SLarry Finger rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
304ad574889SJoe Perches "switch case %#x not processed\n", boxnum);
30521e4b072SLarry Finger break;
30621e4b072SLarry Finger }
30721e4b072SLarry Finger
30821e4b072SLarry Finger isfw_read = false;
30921e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, REG_CR);
31021e4b072SLarry Finger
31121e4b072SLarry Finger if (u1b_tmp != 0xEA) {
31221e4b072SLarry Finger isfw_read = true;
31321e4b072SLarry Finger } else {
31421e4b072SLarry Finger if (rtl_read_byte(rtlpriv, REG_TXDMA_STATUS) == 0xEA ||
31521e4b072SLarry Finger rtl_read_byte(rtlpriv, REG_TXPKT_EMPTY) == 0xEA)
31621e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_SYS_CFG1 + 3, 0xFF);
31721e4b072SLarry Finger }
31821e4b072SLarry Finger
31921e4b072SLarry Finger if (isfw_read) {
32021e4b072SLarry Finger wait_h2c_limmit = 100;
32121e4b072SLarry Finger isfw_read =
32221e4b072SLarry Finger _rtl8821ae_check_fw_read_last_h2c(hw, boxnum);
32321e4b072SLarry Finger while (!isfw_read) {
32421e4b072SLarry Finger /*wait until Fw read*/
32521e4b072SLarry Finger wait_h2c_limmit--;
32621e4b072SLarry Finger if (wait_h2c_limmit == 0) {
32798611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
32821e4b072SLarry Finger "Waiting too long for FW read clear HMEBox(%d)!\n",
32921e4b072SLarry Finger boxnum);
33021e4b072SLarry Finger break;
33121e4b072SLarry Finger }
33221e4b072SLarry Finger
33321e4b072SLarry Finger udelay(10);
33421e4b072SLarry Finger
33521e4b072SLarry Finger isfw_read =
33621e4b072SLarry Finger _rtl8821ae_check_fw_read_last_h2c(hw, boxnum);
33721e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, 0x130);
33898611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
33921e4b072SLarry Finger "Waiting for FW read clear HMEBox(%d)!!! 0x130 = %2x\n",
34021e4b072SLarry Finger boxnum, u1b_tmp);
34121e4b072SLarry Finger }
34221e4b072SLarry Finger }
34321e4b072SLarry Finger
34421e4b072SLarry Finger if (!isfw_read) {
34598611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
34621e4b072SLarry Finger "Write H2C register BOX[%d] fail!!!!! Fw do not read.\n",
34721e4b072SLarry Finger boxnum);
34821e4b072SLarry Finger break;
34921e4b072SLarry Finger }
35021e4b072SLarry Finger
35121e4b072SLarry Finger memset(boxcontent, 0, sizeof(boxcontent));
35221e4b072SLarry Finger memset(boxextcontent, 0, sizeof(boxextcontent));
35321e4b072SLarry Finger boxcontent[0] = element_id;
35498611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
35521e4b072SLarry Finger "Write element_id box_reg(%4x) = %2x\n",
35621e4b072SLarry Finger box_reg, element_id);
35721e4b072SLarry Finger
35821e4b072SLarry Finger switch (cmd_len) {
35921e4b072SLarry Finger case 1:
36021e4b072SLarry Finger case 2:
36121e4b072SLarry Finger case 3:
36221e4b072SLarry Finger /*boxcontent[0] &= ~(BIT(7));*/
36321e4b072SLarry Finger memcpy((u8 *)(boxcontent) + 1,
36421e4b072SLarry Finger cmdbuffer + buf_index, cmd_len);
36521e4b072SLarry Finger
36621e4b072SLarry Finger for (idx = 0; idx < 4; idx++) {
36721e4b072SLarry Finger rtl_write_byte(rtlpriv, box_reg + idx,
36821e4b072SLarry Finger boxcontent[idx]);
36921e4b072SLarry Finger }
37021e4b072SLarry Finger break;
37121e4b072SLarry Finger case 4:
37221e4b072SLarry Finger case 5:
37321e4b072SLarry Finger case 6:
37421e4b072SLarry Finger case 7:
37521e4b072SLarry Finger /*boxcontent[0] |= (BIT(7));*/
37621e4b072SLarry Finger memcpy((u8 *)(boxextcontent),
37721e4b072SLarry Finger cmdbuffer + buf_index+3, cmd_len-3);
37821e4b072SLarry Finger memcpy((u8 *)(boxcontent) + 1,
37921e4b072SLarry Finger cmdbuffer + buf_index, 3);
38021e4b072SLarry Finger
38121e4b072SLarry Finger for (idx = 0; idx < 4; idx++) {
38221e4b072SLarry Finger rtl_write_byte(rtlpriv, box_extreg + idx,
38321e4b072SLarry Finger boxextcontent[idx]);
38421e4b072SLarry Finger }
38521e4b072SLarry Finger
38621e4b072SLarry Finger for (idx = 0; idx < 4; idx++) {
38721e4b072SLarry Finger rtl_write_byte(rtlpriv, box_reg + idx,
38821e4b072SLarry Finger boxcontent[idx]);
38921e4b072SLarry Finger }
39021e4b072SLarry Finger break;
39121e4b072SLarry Finger default:
39298611b00SLarry Finger rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
393ad574889SJoe Perches "switch case %#x not processed\n", cmd_len);
39421e4b072SLarry Finger break;
39521e4b072SLarry Finger }
39621e4b072SLarry Finger
39721e4b072SLarry Finger bwrite_sucess = true;
39821e4b072SLarry Finger
39921e4b072SLarry Finger rtlhal->last_hmeboxnum = boxnum + 1;
40021e4b072SLarry Finger if (rtlhal->last_hmeboxnum == 4)
40121e4b072SLarry Finger rtlhal->last_hmeboxnum = 0;
40221e4b072SLarry Finger
40398611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
40421e4b072SLarry Finger "pHalData->last_hmeboxnum = %d\n",
40521e4b072SLarry Finger rtlhal->last_hmeboxnum);
40621e4b072SLarry Finger }
40721e4b072SLarry Finger
40821e4b072SLarry Finger spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
40921e4b072SLarry Finger rtlhal->h2c_setinprogress = false;
41021e4b072SLarry Finger spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
41121e4b072SLarry Finger
41298611b00SLarry Finger rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "go out\n");
41321e4b072SLarry Finger }
41421e4b072SLarry Finger
rtl8821ae_fill_h2c_cmd(struct ieee80211_hw * hw,u8 element_id,u32 cmd_len,u8 * cmdbuffer)41521e4b072SLarry Finger void rtl8821ae_fill_h2c_cmd(struct ieee80211_hw *hw,
41621e4b072SLarry Finger u8 element_id, u32 cmd_len, u8 *cmdbuffer)
41721e4b072SLarry Finger {
41821e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
41921e4b072SLarry Finger u32 tmp_cmdbuf[2];
42021e4b072SLarry Finger
42121e4b072SLarry Finger if (!rtlhal->fw_ready) {
422531940f9SLarry Finger WARN_ONCE(true,
423531940f9SLarry Finger "rtl8821ae: error H2C cmd because of Fw download fail!!!\n");
42421e4b072SLarry Finger return;
42521e4b072SLarry Finger }
42621e4b072SLarry Finger
42721e4b072SLarry Finger memset(tmp_cmdbuf, 0, 8);
42821e4b072SLarry Finger memcpy(tmp_cmdbuf, cmdbuffer, cmd_len);
42921e4b072SLarry Finger _rtl8821ae_fill_h2c_command(hw, element_id, cmd_len, (u8 *)&tmp_cmdbuf);
43021e4b072SLarry Finger }
43121e4b072SLarry Finger
rtl8821ae_firmware_selfreset(struct ieee80211_hw * hw)43221e4b072SLarry Finger void rtl8821ae_firmware_selfreset(struct ieee80211_hw *hw)
43321e4b072SLarry Finger {
43421e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
43521e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
43621e4b072SLarry Finger u8 u1b_tmp;
43721e4b072SLarry Finger
43821e4b072SLarry Finger if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) {
43921e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
44021e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(3))));
44121e4b072SLarry Finger } else {
44221e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
44321e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(0))));
44421e4b072SLarry Finger }
44521e4b072SLarry Finger
44621e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN+1);
44721e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp & (~BIT(2))));
44821e4b072SLarry Finger udelay(50);
44921e4b072SLarry Finger
45021e4b072SLarry Finger if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) {
45121e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
45221e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp | BIT(3)));
45321e4b072SLarry Finger } else {
45421e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
45521e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp | BIT(0)));
45621e4b072SLarry Finger }
45721e4b072SLarry Finger
45821e4b072SLarry Finger u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN+1);
45921e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp | BIT(2)));
46021e4b072SLarry Finger
46198611b00SLarry Finger rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
46221e4b072SLarry Finger "_8051Reset8812ae(): 8051 reset success .\n");
46321e4b072SLarry Finger }
46421e4b072SLarry Finger
rtl8821ae_set_fw_pwrmode_cmd(struct ieee80211_hw * hw,u8 mode)46521e4b072SLarry Finger void rtl8821ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
46621e4b072SLarry Finger {
46721e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
46821e4b072SLarry Finger u8 u1_h2c_set_pwrmode[H2C_8821AE_PWEMODE_LENGTH] = { 0 };
46921e4b072SLarry Finger struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
47042213f2fSPing-Ke Shih u8 rlbm, power_state = 0, byte5 = 0;
47142213f2fSPing-Ke Shih u8 awake_intvl; /* DTIM = (awake_intvl - 1) */
47254685f9cSPing-Ke Shih struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops;
47342213f2fSPing-Ke Shih bool bt_ctrl_lps = (rtlpriv->cfg->ops->get_btc_status() ?
47442213f2fSPing-Ke Shih btc_ops->btc_is_bt_ctrl_lps(rtlpriv) : false);
475135f4fbdSPing-Ke Shih bool bt_lps_on = (rtlpriv->cfg->ops->get_btc_status() ?
476135f4fbdSPing-Ke Shih btc_ops->btc_is_bt_lps_on(rtlpriv) : false);
477135f4fbdSPing-Ke Shih
478135f4fbdSPing-Ke Shih if (bt_ctrl_lps)
479135f4fbdSPing-Ke Shih mode = (bt_lps_on ? FW_PS_MIN_MODE : FW_PS_ACTIVE_MODE);
48021e4b072SLarry Finger
48198611b00SLarry Finger rtl_dbg(rtlpriv, COMP_POWER, DBG_DMESG, "FW LPS mode = %d (coex:%d)\n",
48242213f2fSPing-Ke Shih mode, bt_ctrl_lps);
48342213f2fSPing-Ke Shih
48442213f2fSPing-Ke Shih switch (mode) {
48542213f2fSPing-Ke Shih case FW_PS_MIN_MODE:
48642213f2fSPing-Ke Shih rlbm = 0;
48742213f2fSPing-Ke Shih awake_intvl = 2;
48842213f2fSPing-Ke Shih break;
48942213f2fSPing-Ke Shih case FW_PS_MAX_MODE:
49042213f2fSPing-Ke Shih rlbm = 1;
49142213f2fSPing-Ke Shih awake_intvl = 2;
49242213f2fSPing-Ke Shih break;
49342213f2fSPing-Ke Shih case FW_PS_DTIM_MODE:
49442213f2fSPing-Ke Shih rlbm = 2;
49542213f2fSPing-Ke Shih awake_intvl = ppsc->reg_max_lps_awakeintvl;
49642213f2fSPing-Ke Shih /* hw->conf.ps_dtim_period or mac->vif->bss_conf.dtim_period
49742213f2fSPing-Ke Shih * is only used in swlps.
49842213f2fSPing-Ke Shih */
49942213f2fSPing-Ke Shih break;
50042213f2fSPing-Ke Shih default:
50142213f2fSPing-Ke Shih rlbm = 2;
50242213f2fSPing-Ke Shih awake_intvl = 4;
50342213f2fSPing-Ke Shih break;
50442213f2fSPing-Ke Shih }
50542213f2fSPing-Ke Shih
50642213f2fSPing-Ke Shih if (rtlpriv->mac80211.p2p) {
50742213f2fSPing-Ke Shih awake_intvl = 2;
50842213f2fSPing-Ke Shih rlbm = 1;
50942213f2fSPing-Ke Shih }
51042213f2fSPing-Ke Shih
51142213f2fSPing-Ke Shih if (mode == FW_PS_ACTIVE_MODE) {
51242213f2fSPing-Ke Shih byte5 = 0x40;
51342213f2fSPing-Ke Shih power_state = FW_PWR_STATE_ACTIVE;
51442213f2fSPing-Ke Shih } else {
51542213f2fSPing-Ke Shih if (bt_ctrl_lps) {
51642213f2fSPing-Ke Shih byte5 = btc_ops->btc_get_lps_val(rtlpriv);
51742213f2fSPing-Ke Shih power_state = btc_ops->btc_get_rpwm_val(rtlpriv);
51842213f2fSPing-Ke Shih
51942213f2fSPing-Ke Shih if ((rlbm == 2) && (byte5 & BIT(4))) {
52042213f2fSPing-Ke Shih /* Keep awake interval to 1 to prevent from
52142213f2fSPing-Ke Shih * decreasing coex performance
52242213f2fSPing-Ke Shih */
52342213f2fSPing-Ke Shih awake_intvl = 2;
52442213f2fSPing-Ke Shih rlbm = 2;
52542213f2fSPing-Ke Shih }
52642213f2fSPing-Ke Shih } else {
52742213f2fSPing-Ke Shih byte5 = 0x40;
52842213f2fSPing-Ke Shih power_state = FW_PWR_STATE_RF_OFF;
52942213f2fSPing-Ke Shih }
53042213f2fSPing-Ke Shih }
53121e4b072SLarry Finger
53221e4b072SLarry Finger SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, ((mode) ? 1 : 0));
53321e4b072SLarry Finger SET_H2CCMD_PWRMODE_PARM_RLBM(u1_h2c_set_pwrmode, rlbm);
53421e4b072SLarry Finger SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode,
535135f4fbdSPing-Ke Shih bt_ctrl_lps ? 0 :
536135f4fbdSPing-Ke Shih ((rtlpriv->mac80211.p2p) ?
537135f4fbdSPing-Ke Shih ppsc->smart_ps : 1));
53821e4b072SLarry Finger SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(u1_h2c_set_pwrmode,
53942213f2fSPing-Ke Shih awake_intvl);
54021e4b072SLarry Finger SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1_h2c_set_pwrmode, 0);
54121e4b072SLarry Finger SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state);
54254685f9cSPing-Ke Shih SET_H2CCMD_PWRMODE_PARM_BYTE5(u1_h2c_set_pwrmode, byte5);
54321e4b072SLarry Finger
54421e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
54521e4b072SLarry Finger "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
54621e4b072SLarry Finger u1_h2c_set_pwrmode, H2C_8821AE_PWEMODE_LENGTH);
54754685f9cSPing-Ke Shih if (rtlpriv->cfg->ops->get_btc_status())
54854685f9cSPing-Ke Shih btc_ops->btc_record_pwr_mode(rtlpriv, u1_h2c_set_pwrmode,
54954685f9cSPing-Ke Shih H2C_8821AE_PWEMODE_LENGTH);
55021e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_SETPWRMODE,
55121e4b072SLarry Finger H2C_8821AE_PWEMODE_LENGTH,
55221e4b072SLarry Finger u1_h2c_set_pwrmode);
55321e4b072SLarry Finger }
55421e4b072SLarry Finger
rtl8821ae_set_fw_media_status_rpt_cmd(struct ieee80211_hw * hw,u8 mstatus)55521e4b072SLarry Finger void rtl8821ae_set_fw_media_status_rpt_cmd(struct ieee80211_hw *hw,
55621e4b072SLarry Finger u8 mstatus)
55721e4b072SLarry Finger {
55821e4b072SLarry Finger u8 parm[3] = { 0, 0, 0 };
55921e4b072SLarry Finger /* parm[0]: bit0=0-->Disconnect, bit0=1-->Connect
56021e4b072SLarry Finger * bit1=0-->update Media Status to MACID
56121e4b072SLarry Finger * bit1=1-->update Media Status from MACID to MACID_End
56221e4b072SLarry Finger * parm[1]: MACID, if this is INFRA_STA, MacID = 0
56321e4b072SLarry Finger * parm[2]: MACID_End
56421e4b072SLarry Finger */
56521e4b072SLarry Finger
56621e4b072SLarry Finger SET_H2CCMD_MSRRPT_PARM_OPMODE(parm, mstatus);
56721e4b072SLarry Finger SET_H2CCMD_MSRRPT_PARM_MACID_IND(parm, 0);
56821e4b072SLarry Finger
56921e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_MSRRPT, 3, parm);
57021e4b072SLarry Finger }
57121e4b072SLarry Finger
rtl8821ae_set_fw_ap_off_load_cmd(struct ieee80211_hw * hw,u8 ap_offload_enable)57221e4b072SLarry Finger void rtl8821ae_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw,
57321e4b072SLarry Finger u8 ap_offload_enable)
57421e4b072SLarry Finger {
57521e4b072SLarry Finger struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
57621e4b072SLarry Finger u8 u1_apoffload_parm[H2C_8821AE_AP_OFFLOAD_LENGTH] = { 0 };
57721e4b072SLarry Finger
57821e4b072SLarry Finger SET_H2CCMD_AP_OFFLOAD_ON(u1_apoffload_parm, ap_offload_enable);
57921e4b072SLarry Finger SET_H2CCMD_AP_OFFLOAD_HIDDEN(u1_apoffload_parm, mac->hiddenssid);
58021e4b072SLarry Finger SET_H2CCMD_AP_OFFLOAD_DENYANY(u1_apoffload_parm, 0);
58121e4b072SLarry Finger
58221e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AP_OFFLOAD,
58321e4b072SLarry Finger H2C_8821AE_AP_OFFLOAD_LENGTH,
58421e4b072SLarry Finger u1_apoffload_parm);
58521e4b072SLarry Finger }
58621e4b072SLarry Finger
rtl8821ae_set_fw_wowlan_mode(struct ieee80211_hw * hw,bool func_en)58721e4b072SLarry Finger void rtl8821ae_set_fw_wowlan_mode(struct ieee80211_hw *hw, bool func_en)
58821e4b072SLarry Finger {
58921e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
59021e4b072SLarry Finger struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
59121e4b072SLarry Finger u8 fw_wowlan_info[H2C_8821AE_WOWLAN_LENGTH] = {0};
59221e4b072SLarry Finger
59398611b00SLarry Finger rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, "enable(%d)\n", func_en);
59421e4b072SLarry Finger
59521e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_FUNC_ENABLE(fw_wowlan_info,
59621e4b072SLarry Finger (func_en ? true : false));
59721e4b072SLarry Finger
59821e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(fw_wowlan_info,
59921e4b072SLarry Finger ((ppsc->wo_wlan_mode & WAKE_ON_PATTERN_MATCH) ? 1 : 0));
60021e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(fw_wowlan_info,
60121e4b072SLarry Finger ((ppsc->wo_wlan_mode & WAKE_ON_MAGIC_PACKET) ? 1 : 0));
60221e4b072SLarry Finger
60321e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(fw_wowlan_info, 0);
60421e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_ALL_PKT_DROP(fw_wowlan_info, false);
60521e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_GPIO_ACTIVE(fw_wowlan_info, 0);
60621e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(fw_wowlan_info, 1);
60721e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_GPIONUM(fw_wowlan_info, 0);
60821e4b072SLarry Finger SET_8812_H2CCMD_WOWLAN_GPIO_DURATION(fw_wowlan_info, 0);
60921e4b072SLarry Finger
61021e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_DMESG,
61121e4b072SLarry Finger "wowlan mode: cmd 0x80: Content:\n",
61221e4b072SLarry Finger fw_wowlan_info, H2C_8821AE_WOWLAN_LENGTH);
61321e4b072SLarry Finger
61421e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_WO_WLAN,
61521e4b072SLarry Finger H2C_8821AE_WOWLAN_LENGTH,
61621e4b072SLarry Finger fw_wowlan_info);
61721e4b072SLarry Finger }
61821e4b072SLarry Finger
rtl8821ae_set_fw_remote_wake_ctrl_cmd(struct ieee80211_hw * hw,u8 enable)61921e4b072SLarry Finger void rtl8821ae_set_fw_remote_wake_ctrl_cmd(struct ieee80211_hw *hw,
62021e4b072SLarry Finger u8 enable)
62121e4b072SLarry Finger {
62221e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
62321e4b072SLarry Finger struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
62421e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
62521e4b072SLarry Finger u8 remote_wake_ctrl_parm[H2C_8821AE_REMOTE_WAKE_CTRL_LEN] = {0};
62621e4b072SLarry Finger
62798611b00SLarry Finger rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD,
62821e4b072SLarry Finger "enable=%d, ARP offload=%d, GTK offload=%d\n",
62921e4b072SLarry Finger enable, ppsc->arp_offload_enable, ppsc->gtk_offload_enable);
63021e4b072SLarry Finger
63121e4b072SLarry Finger SET_8812_H2CCMD_REMOTE_WAKECTRL_ENABLE(remote_wake_ctrl_parm, enable);
63221e4b072SLarry Finger SET_8812_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(remote_wake_ctrl_parm,
63321e4b072SLarry Finger (ppsc->arp_offload_enable ? 1 : 0));
63421e4b072SLarry Finger SET_8812_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(remote_wake_ctrl_parm,
63521e4b072SLarry Finger (ppsc->gtk_offload_enable ? 1 : 0));
63621e4b072SLarry Finger SET_8812_H2CCMD_REMOTE_WAKE_CTRL_REALWOWV2_EN(remote_wake_ctrl_parm,
63721e4b072SLarry Finger (rtlhal->real_wow_v2_enable ? 1 : 0));
63821e4b072SLarry Finger
63921e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE,
64021e4b072SLarry Finger "remote_wake_ctrl: cmd 0x4: Content:\n",
64121e4b072SLarry Finger remote_wake_ctrl_parm, H2C_8821AE_REMOTE_WAKE_CTRL_LEN);
64221e4b072SLarry Finger
64321e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_REMOTE_WAKE_CTRL,
64421e4b072SLarry Finger H2C_8821AE_REMOTE_WAKE_CTRL_LEN,
64521e4b072SLarry Finger remote_wake_ctrl_parm);
64621e4b072SLarry Finger }
64721e4b072SLarry Finger
rtl8821ae_set_fw_keep_alive_cmd(struct ieee80211_hw * hw,bool func_en)64821e4b072SLarry Finger void rtl8821ae_set_fw_keep_alive_cmd(struct ieee80211_hw *hw,
64921e4b072SLarry Finger bool func_en)
65021e4b072SLarry Finger {
65121e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
65221e4b072SLarry Finger u8 keep_alive_info[H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH] = {0};
65321e4b072SLarry Finger
65498611b00SLarry Finger rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, "Enable(%d)\n", func_en);
65521e4b072SLarry Finger
65621e4b072SLarry Finger SET_8812_H2CCMD_KEEP_ALIVE_ENABLE(keep_alive_info, func_en);
65721e4b072SLarry Finger /* 1: the period is controled by driver, 0: by Fw default */
65821e4b072SLarry Finger SET_8812_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(keep_alive_info, 1);
65921e4b072SLarry Finger SET_8812_H2CCMD_KEEP_ALIVE_PERIOD(keep_alive_info, 10); /* 10 sec */
66021e4b072SLarry Finger
66121e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE,
66221e4b072SLarry Finger "keep alive: cmd 0x3: Content:\n",
66321e4b072SLarry Finger keep_alive_info, H2C_8821AE_KEEP_ALIVE_CTRL);
66421e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_KEEP_ALIVE_CTRL,
66521e4b072SLarry Finger H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH,
66621e4b072SLarry Finger keep_alive_info);
66721e4b072SLarry Finger }
66821e4b072SLarry Finger
rtl8821ae_set_fw_disconnect_decision_ctrl_cmd(struct ieee80211_hw * hw,bool enabled)66921e4b072SLarry Finger void rtl8821ae_set_fw_disconnect_decision_ctrl_cmd(struct ieee80211_hw *hw,
67021e4b072SLarry Finger bool enabled)
67121e4b072SLarry Finger {
67221e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
67321e4b072SLarry Finger u8 parm[H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN] = {0};
67421e4b072SLarry Finger
67521e4b072SLarry Finger SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_ENABLE(parm, enabled);
67621e4b072SLarry Finger SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_USER_SETTING(parm, 1);
67721e4b072SLarry Finger SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_CHECK_PERIOD(parm, 30);
67821e4b072SLarry Finger SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(parm, 3);
67921e4b072SLarry Finger
68021e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE,
68121e4b072SLarry Finger "disconnect_decision_ctrl: cmd 0x4: Content:\n",
68221e4b072SLarry Finger parm, H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN);
68321e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_DISCONNECT_DECISION,
68421e4b072SLarry Finger H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN, parm);
68521e4b072SLarry Finger }
68621e4b072SLarry Finger
rtl8821ae_set_fw_global_info_cmd(struct ieee80211_hw * hw)68721e4b072SLarry Finger void rtl8821ae_set_fw_global_info_cmd(struct ieee80211_hw *hw)
68821e4b072SLarry Finger {
68921e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
69021e4b072SLarry Finger struct rtl_security *sec = &rtlpriv->sec;
69121e4b072SLarry Finger u8 remote_wakeup_sec_info[H2C_8821AE_AOAC_GLOBAL_INFO_LEN] = {0};
69221e4b072SLarry Finger
69398611b00SLarry Finger rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD,
69421e4b072SLarry Finger "PairwiseEncAlgorithm=%d, GroupEncAlgorithm=%d\n",
69521e4b072SLarry Finger sec->pairwise_enc_algorithm, sec->group_enc_algorithm);
69621e4b072SLarry Finger
69721e4b072SLarry Finger SET_8812_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(
69821e4b072SLarry Finger remote_wakeup_sec_info,
69921e4b072SLarry Finger sec->pairwise_enc_algorithm);
70021e4b072SLarry Finger SET_8812_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(remote_wakeup_sec_info,
70121e4b072SLarry Finger sec->group_enc_algorithm);
70221e4b072SLarry Finger
70321e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_GLOBAL_INFO,
70421e4b072SLarry Finger H2C_8821AE_AOAC_GLOBAL_INFO_LEN,
70521e4b072SLarry Finger remote_wakeup_sec_info);
70621e4b072SLarry Finger
70721e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_TRACE,
70821e4b072SLarry Finger "rtl8821ae_set_global_info: cmd 0x82:\n",
70921e4b072SLarry Finger remote_wakeup_sec_info, H2C_8821AE_AOAC_GLOBAL_INFO_LEN);
71021e4b072SLarry Finger }
71121e4b072SLarry Finger
71221e4b072SLarry Finger #define BEACON_PG 0
71321e4b072SLarry Finger #define PSPOLL_PG 1
71421e4b072SLarry Finger #define NULL_PG 2
71521e4b072SLarry Finger #define QOSNULL_PG 3
71674a7dfbcSPing-Ke Shih #define BT_QOSNULL_PG 4
71774a7dfbcSPing-Ke Shih #define ARPRESP_PG 5
71874a7dfbcSPing-Ke Shih #define REMOTE_PG 6
71974a7dfbcSPing-Ke Shih #define GTKEXT_PG 7
72021e4b072SLarry Finger
72174a7dfbcSPing-Ke Shih #define TOTAL_RESERVED_PKT_LEN_8812 4096
72274a7dfbcSPing-Ke Shih #define TOTAL_RESERVED_PKT_LEN_8821 2048
72321e4b072SLarry Finger
72421e4b072SLarry Finger static u8 reserved_page_packet_8821[TOTAL_RESERVED_PKT_LEN_8821] = {
72521e4b072SLarry Finger /* page 0: beacon */
72621e4b072SLarry Finger 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
72721e4b072SLarry Finger 0xff, 0xff, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64,
72821e4b072SLarry Finger 0x40, 0x16, 0x9f, 0x23, 0xd4, 0x46, 0x20, 0x00,
72921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73021e4b072SLarry Finger 0x64, 0x00, 0x20, 0x04, 0x00, 0x06, 0x64, 0x6c,
73121e4b072SLarry Finger 0x69, 0x6e, 0x6b, 0x31, 0x01, 0x08, 0x82, 0x84,
73221e4b072SLarry Finger 0x8b, 0x96, 0x0c, 0x18, 0x30, 0x48, 0x03, 0x01,
73321e4b072SLarry Finger 0x0b, 0x06, 0x02, 0x00, 0x00, 0x2a, 0x01, 0x8b,
73421e4b072SLarry Finger 0x32, 0x04, 0x12, 0x24, 0x60, 0x6c, 0x00, 0x00,
73521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75321e4b072SLarry Finger 0x10, 0x00, 0x28, 0x8c, 0x00, 0x12, 0x00, 0x00,
75421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00,
75521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75821e4b072SLarry Finger /* page 1: ps-poll */
75921e4b072SLarry Finger 0xa4, 0x10, 0x01, 0xc0, 0x40, 0x16, 0x9f, 0x23,
76021e4b072SLarry Finger 0xd4, 0x46, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64,
76121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78621e4b072SLarry Finger 0x18, 0x00, 0x28, 0x8c, 0x00, 0x12, 0x00, 0x00,
78721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
78821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79021e4b072SLarry Finger 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79121e4b072SLarry Finger /* page 2: null data */
79221e4b072SLarry Finger 0x48, 0x01, 0x00, 0x00, 0x40, 0x16, 0x9f, 0x23,
79321e4b072SLarry Finger 0xd4, 0x46, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64,
79421e4b072SLarry Finger 0x40, 0x16, 0x9f, 0x23, 0xd4, 0x46, 0x00, 0x00,
79521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81921e4b072SLarry Finger 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
82021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
82121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82321e4b072SLarry Finger 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82421e4b072SLarry Finger /* page 3: qos null data */
8259c66a7e5SLarry Finger 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
8269c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
8279c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
82821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85274a7dfbcSPing-Ke Shih 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
85374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
85474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85674a7dfbcSPing-Ke Shih 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85774a7dfbcSPing-Ke Shih /* page 4: BT qos null data */
8589c66a7e5SLarry Finger 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
8599c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
8609c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
86174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86674a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87674a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88521e4b072SLarry Finger 0x3C, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
88621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
88721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88921e4b072SLarry Finger 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89074a7dfbcSPing-Ke Shih /* page 5~7 is for wowlan */
89174a7dfbcSPing-Ke Shih /* page 5: ARP resp */
8929c66a7e5SLarry Finger 0x08, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
8939c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
8949c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
89521e4b072SLarry Finger 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06,
89621e4b072SLarry Finger 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02,
89721e4b072SLarry Finger 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 0x00, 0x00,
89821e4b072SLarry Finger 0x00, 0x00, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
89921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92474a7dfbcSPing-Ke Shih /* page 6: H2C_REMOTE_WAKE_CTRL_INFO */
92521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95774a7dfbcSPing-Ke Shih /* page 7: Rsvd GTK extend memory (zero memory) */
95821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99021e4b072SLarry Finger };
99121e4b072SLarry Finger
99221e4b072SLarry Finger static u8 reserved_page_packet_8812[TOTAL_RESERVED_PKT_LEN_8812] = {
99321e4b072SLarry Finger /* page 0: beacon */
99421e4b072SLarry Finger 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
99521e4b072SLarry Finger 0xFF, 0xFF, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
9969c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x60, 0x00,
99721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99821e4b072SLarry Finger 0x64, 0x00, 0x20, 0x04, 0x00, 0x03, 0x32, 0x31,
99921e4b072SLarry Finger 0x35, 0x01, 0x08, 0x82, 0x84, 0x8B, 0x96, 0x0C,
100021e4b072SLarry Finger 0x12, 0x18, 0x24, 0x03, 0x01, 0x01, 0x06, 0x02,
100121e4b072SLarry Finger 0x00, 0x00, 0x2A, 0x01, 0x02, 0x32, 0x04, 0x30,
100221e4b072SLarry Finger 0x48, 0x60, 0x6C, 0x2D, 0x1A, 0xED, 0x09, 0x03,
100321e4b072SLarry Finger 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D,
100621e4b072SLarry Finger 0x00, 0xDD, 0x07, 0x00, 0xE0, 0x4C, 0x02, 0x02,
100721e4b072SLarry Finger 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105321e4b072SLarry Finger 0x10, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
105421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00,
105521e4b072SLarry Finger 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105821e4b072SLarry Finger /* page 1: ps-poll */
10599c66a7e5SLarry Finger 0xA4, 0x10, 0x09, 0xC0, 0x84, 0xC9, 0XB2, 0xA7,
10609c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
106121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111821e4b072SLarry Finger 0x18, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
111921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
112021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112221e4b072SLarry Finger 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112321e4b072SLarry Finger /* page 2: null data */
11249c66a7e5SLarry Finger 0x48, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
11259c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
11269c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
112721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118321e4b072SLarry Finger 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
118421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
118521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118721e4b072SLarry Finger 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118821e4b072SLarry Finger /* page 3: Qos null data */
11899c66a7e5SLarry Finger 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
11909c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
11919c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
119221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124874a7dfbcSPing-Ke Shih 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
124974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
125074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125274a7dfbcSPing-Ke Shih 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125374a7dfbcSPing-Ke Shih /* page 4: BT Qos null data */
12549c66a7e5SLarry Finger 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
12559c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
12569c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
125774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126674a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127674a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128674a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129674a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130374a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130474a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130574a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130674a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130774a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130874a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130974a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131074a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131174a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131274a7dfbcSPing-Ke Shih 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131321e4b072SLarry Finger 0x3C, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00,
131421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
131521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131721e4b072SLarry Finger 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131874a7dfbcSPing-Ke Shih /* page 5~7 is for wowlan */
131974a7dfbcSPing-Ke Shih /* page 5: ARP resp */
13209c66a7e5SLarry Finger 0x08, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7,
13219c66a7e5SLarry Finger 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
13229c66a7e5SLarry Finger 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00,
132321e4b072SLarry Finger 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06,
132421e4b072SLarry Finger 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02,
132521e4b072SLarry Finger 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 0x00, 0x00,
132621e4b072SLarry Finger 0x00, 0x00, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02,
132721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138474a7dfbcSPing-Ke Shih /* page 6: H2C_REMOTE_WAKE_CTRL_INFO */
138521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144974a7dfbcSPing-Ke Shih /* page 7: Rsvd GTK extend memory (zero memory) */
145021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150421e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150521e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150621e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150721e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150821e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150921e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151021e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151121e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151221e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151321e4b072SLarry Finger 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151421e4b072SLarry Finger };
151521e4b072SLarry Finger
rtl8812ae_set_fw_rsvdpagepkt(struct ieee80211_hw * hw,bool b_dl_finished,bool dl_whole_packets)151621e4b072SLarry Finger void rtl8812ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
151721e4b072SLarry Finger bool b_dl_finished, bool dl_whole_packets)
151821e4b072SLarry Finger {
151921e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
152021e4b072SLarry Finger struct rtl_mac *mac = rtl_mac(rtlpriv);
152121e4b072SLarry Finger struct sk_buff *skb = NULL;
152221e4b072SLarry Finger u32 totalpacketlen;
152321e4b072SLarry Finger bool rtstatus;
15249c66a7e5SLarry Finger u8 u1rsvdpageloc[5] = { 0 };
15259c66a7e5SLarry Finger u8 u1rsvdpageloc2[7] = { 0 };
152621e4b072SLarry Finger bool b_dlok = false;
152721e4b072SLarry Finger u8 *beacon;
152821e4b072SLarry Finger u8 *p_pspoll;
152921e4b072SLarry Finger u8 *nullfunc;
153021e4b072SLarry Finger u8 *qosnull;
153174a7dfbcSPing-Ke Shih u8 *btqosnull;
153221e4b072SLarry Finger u8 *arpresp;
153321e4b072SLarry Finger
153421e4b072SLarry Finger /*---------------------------------------------------------
153521e4b072SLarry Finger * (1) beacon
153621e4b072SLarry Finger *---------------------------------------------------------
153721e4b072SLarry Finger */
153821e4b072SLarry Finger beacon = &reserved_page_packet_8812[BEACON_PG * 512];
153921e4b072SLarry Finger SET_80211_HDR_ADDRESS2(beacon, mac->mac_addr);
154021e4b072SLarry Finger SET_80211_HDR_ADDRESS3(beacon, mac->bssid);
154121e4b072SLarry Finger
154221e4b072SLarry Finger if (b_dl_finished) {
154321e4b072SLarry Finger totalpacketlen = 512 - 40;
154421e4b072SLarry Finger goto out;
154521e4b072SLarry Finger }
154621e4b072SLarry Finger /*-------------------------------------------------------
154721e4b072SLarry Finger * (2) ps-poll
154821e4b072SLarry Finger *--------------------------------------------------------
154921e4b072SLarry Finger */
155021e4b072SLarry Finger p_pspoll = &reserved_page_packet_8812[PSPOLL_PG * 512];
155121e4b072SLarry Finger SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000));
155221e4b072SLarry Finger SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid);
155321e4b072SLarry Finger SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr);
155421e4b072SLarry Finger
15559c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG);
155621e4b072SLarry Finger
155721e4b072SLarry Finger /*--------------------------------------------------------
155821e4b072SLarry Finger * (3) null data
155921e4b072SLarry Finger *---------------------------------------------------------
156021e4b072SLarry Finger */
156121e4b072SLarry Finger nullfunc = &reserved_page_packet_8812[NULL_PG * 512];
156221e4b072SLarry Finger SET_80211_HDR_ADDRESS1(nullfunc, mac->bssid);
156321e4b072SLarry Finger SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr);
156421e4b072SLarry Finger SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid);
156521e4b072SLarry Finger
15669c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG);
156721e4b072SLarry Finger
156821e4b072SLarry Finger /*---------------------------------------------------------
156921e4b072SLarry Finger * (4) Qos null data
157021e4b072SLarry Finger *----------------------------------------------------------
157121e4b072SLarry Finger */
157221e4b072SLarry Finger qosnull = &reserved_page_packet_8812[QOSNULL_PG * 512];
157321e4b072SLarry Finger SET_80211_HDR_ADDRESS1(qosnull, mac->bssid);
157421e4b072SLarry Finger SET_80211_HDR_ADDRESS2(qosnull, mac->mac_addr);
157521e4b072SLarry Finger SET_80211_HDR_ADDRESS3(qosnull, mac->bssid);
157621e4b072SLarry Finger
15779c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc, QOSNULL_PG);
157821e4b072SLarry Finger
157974a7dfbcSPing-Ke Shih /*---------------------------------------------------------
158074a7dfbcSPing-Ke Shih * (5) BT Qos null data
158174a7dfbcSPing-Ke Shih *----------------------------------------------------------
158274a7dfbcSPing-Ke Shih */
158374a7dfbcSPing-Ke Shih btqosnull = &reserved_page_packet_8812[BT_QOSNULL_PG * 512];
158474a7dfbcSPing-Ke Shih SET_80211_HDR_ADDRESS1(btqosnull, mac->bssid);
158574a7dfbcSPing-Ke Shih SET_80211_HDR_ADDRESS2(btqosnull, mac->mac_addr);
158674a7dfbcSPing-Ke Shih SET_80211_HDR_ADDRESS3(btqosnull, mac->bssid);
158774a7dfbcSPing-Ke Shih
15889c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc, BT_QOSNULL_PG);
158974a7dfbcSPing-Ke Shih
159021e4b072SLarry Finger if (!dl_whole_packets) {
159174a7dfbcSPing-Ke Shih totalpacketlen = 512 * (BT_QOSNULL_PG + 1) - 40;
159221e4b072SLarry Finger goto out;
159321e4b072SLarry Finger }
159421e4b072SLarry Finger /*---------------------------------------------------------
159574a7dfbcSPing-Ke Shih * (6) ARP Resp
159621e4b072SLarry Finger *----------------------------------------------------------
159721e4b072SLarry Finger */
159821e4b072SLarry Finger arpresp = &reserved_page_packet_8812[ARPRESP_PG * 512];
159921e4b072SLarry Finger SET_80211_HDR_ADDRESS1(arpresp, mac->bssid);
160021e4b072SLarry Finger SET_80211_HDR_ADDRESS2(arpresp, mac->mac_addr);
160121e4b072SLarry Finger SET_80211_HDR_ADDRESS3(arpresp, mac->bssid);
160221e4b072SLarry Finger
16039c66a7e5SLarry Finger SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2, ARPRESP_PG);
160421e4b072SLarry Finger
160521e4b072SLarry Finger /*---------------------------------------------------------
160674a7dfbcSPing-Ke Shih * (7) Remote Wake Ctrl
160721e4b072SLarry Finger *----------------------------------------------------------
160821e4b072SLarry Finger */
16099c66a7e5SLarry Finger SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2,
161021e4b072SLarry Finger REMOTE_PG);
161121e4b072SLarry Finger
161221e4b072SLarry Finger /*---------------------------------------------------------
161374a7dfbcSPing-Ke Shih * (8) GTK Ext Memory
161421e4b072SLarry Finger *----------------------------------------------------------
161521e4b072SLarry Finger */
16169c66a7e5SLarry Finger SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2, GTKEXT_PG);
161721e4b072SLarry Finger
161821e4b072SLarry Finger totalpacketlen = TOTAL_RESERVED_PKT_LEN_8812 - 40;
161921e4b072SLarry Finger
162021e4b072SLarry Finger out:
162121e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
162221e4b072SLarry Finger "rtl8812ae_set_fw_rsvdpagepkt(): packet data\n",
162321e4b072SLarry Finger &reserved_page_packet_8812[0], totalpacketlen);
162421e4b072SLarry Finger
162521e4b072SLarry Finger skb = dev_alloc_skb(totalpacketlen);
162660209d48SPing-Ke Shih if (!skb)
162760209d48SPing-Ke Shih return;
1628ad941e69Syuan linyu skb_put_data(skb, &reserved_page_packet_8812, totalpacketlen);
162921e4b072SLarry Finger
1630557f9331SLarry Finger rtstatus = rtl_cmd_send_packet(hw, skb);
163121e4b072SLarry Finger
163221e4b072SLarry Finger if (rtstatus)
163321e4b072SLarry Finger b_dlok = true;
163421e4b072SLarry Finger
163521e4b072SLarry Finger if (!b_dl_finished && b_dlok) {
163621e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
16379c66a7e5SLarry Finger "H2C_RSVDPAGE:\n", u1rsvdpageloc, 5);
163821e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_RSVDPAGE,
16399c66a7e5SLarry Finger sizeof(u1rsvdpageloc), u1rsvdpageloc);
164021e4b072SLarry Finger if (dl_whole_packets) {
164121e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
16429c66a7e5SLarry Finger "wowlan H2C_RSVDPAGE:\n", u1rsvdpageloc2, 7);
164321e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_RSVDPAGE,
16449c66a7e5SLarry Finger sizeof(u1rsvdpageloc2), u1rsvdpageloc2);
164521e4b072SLarry Finger }
164621e4b072SLarry Finger }
164721e4b072SLarry Finger
164821e4b072SLarry Finger if (!b_dlok)
164998611b00SLarry Finger rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
165021e4b072SLarry Finger "Set RSVD page location to Fw FAIL!!!!!!.\n");
165121e4b072SLarry Finger }
165221e4b072SLarry Finger
rtl8821ae_set_fw_rsvdpagepkt(struct ieee80211_hw * hw,bool b_dl_finished,bool dl_whole_packets)165321e4b072SLarry Finger void rtl8821ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
165421e4b072SLarry Finger bool b_dl_finished, bool dl_whole_packets)
165521e4b072SLarry Finger {
165621e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
165721e4b072SLarry Finger struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
165821e4b072SLarry Finger struct sk_buff *skb = NULL;
165921e4b072SLarry Finger u32 totalpacketlen;
166021e4b072SLarry Finger bool rtstatus;
16619c66a7e5SLarry Finger u8 u1rsvdpageloc[5] = { 0 };
16629c66a7e5SLarry Finger u8 u1rsvdpageloc2[7] = { 0 };
166321e4b072SLarry Finger bool b_dlok = false;
166421e4b072SLarry Finger u8 *beacon;
166521e4b072SLarry Finger u8 *p_pspoll;
166621e4b072SLarry Finger u8 *nullfunc;
166721e4b072SLarry Finger u8 *qosnull;
166874a7dfbcSPing-Ke Shih u8 *btqosnull;
166921e4b072SLarry Finger u8 *arpresp;
167021e4b072SLarry Finger
167121e4b072SLarry Finger /*---------------------------------------------------------
167221e4b072SLarry Finger * (1) beacon
167321e4b072SLarry Finger *---------------------------------------------------------
167421e4b072SLarry Finger */
167521e4b072SLarry Finger beacon = &reserved_page_packet_8821[BEACON_PG * 256];
167621e4b072SLarry Finger SET_80211_HDR_ADDRESS2(beacon, mac->mac_addr);
167721e4b072SLarry Finger SET_80211_HDR_ADDRESS3(beacon, mac->bssid);
167821e4b072SLarry Finger
167921e4b072SLarry Finger if (b_dl_finished) {
168021e4b072SLarry Finger totalpacketlen = 256 - 40;
168121e4b072SLarry Finger goto out;
168221e4b072SLarry Finger }
168321e4b072SLarry Finger /*-------------------------------------------------------
168421e4b072SLarry Finger * (2) ps-poll
168521e4b072SLarry Finger *--------------------------------------------------------
168621e4b072SLarry Finger */
168721e4b072SLarry Finger p_pspoll = &reserved_page_packet_8821[PSPOLL_PG * 256];
168821e4b072SLarry Finger SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000));
168921e4b072SLarry Finger SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid);
169021e4b072SLarry Finger SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr);
169121e4b072SLarry Finger
16929c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG);
169321e4b072SLarry Finger
169421e4b072SLarry Finger /*--------------------------------------------------------
169521e4b072SLarry Finger * (3) null data
169621e4b072SLarry Finger *---------------------------------------------------------i
169721e4b072SLarry Finger */
169821e4b072SLarry Finger nullfunc = &reserved_page_packet_8821[NULL_PG * 256];
169921e4b072SLarry Finger SET_80211_HDR_ADDRESS1(nullfunc, mac->bssid);
170021e4b072SLarry Finger SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr);
170121e4b072SLarry Finger SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid);
170221e4b072SLarry Finger
17039c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG);
170421e4b072SLarry Finger
170521e4b072SLarry Finger /*---------------------------------------------------------
170621e4b072SLarry Finger * (4) Qos null data
170721e4b072SLarry Finger *----------------------------------------------------------
170821e4b072SLarry Finger */
170921e4b072SLarry Finger qosnull = &reserved_page_packet_8821[QOSNULL_PG * 256];
171021e4b072SLarry Finger SET_80211_HDR_ADDRESS1(qosnull, mac->bssid);
171121e4b072SLarry Finger SET_80211_HDR_ADDRESS2(qosnull, mac->mac_addr);
171221e4b072SLarry Finger SET_80211_HDR_ADDRESS3(qosnull, mac->bssid);
171321e4b072SLarry Finger
17149c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc, QOSNULL_PG);
171521e4b072SLarry Finger
171674a7dfbcSPing-Ke Shih /*---------------------------------------------------------
171774a7dfbcSPing-Ke Shih * (5) Qos null data
171874a7dfbcSPing-Ke Shih *----------------------------------------------------------
171974a7dfbcSPing-Ke Shih */
172074a7dfbcSPing-Ke Shih btqosnull = &reserved_page_packet_8821[BT_QOSNULL_PG * 256];
172174a7dfbcSPing-Ke Shih SET_80211_HDR_ADDRESS1(btqosnull, mac->bssid);
172274a7dfbcSPing-Ke Shih SET_80211_HDR_ADDRESS2(btqosnull, mac->mac_addr);
172374a7dfbcSPing-Ke Shih SET_80211_HDR_ADDRESS3(btqosnull, mac->bssid);
172474a7dfbcSPing-Ke Shih
17259c66a7e5SLarry Finger SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc, BT_QOSNULL_PG);
172674a7dfbcSPing-Ke Shih
172721e4b072SLarry Finger if (!dl_whole_packets) {
172874a7dfbcSPing-Ke Shih totalpacketlen = 256 * (BT_QOSNULL_PG + 1) - 40;
172921e4b072SLarry Finger goto out;
173021e4b072SLarry Finger }
173121e4b072SLarry Finger /*---------------------------------------------------------
173274a7dfbcSPing-Ke Shih * (6) ARP Resp
173321e4b072SLarry Finger *----------------------------------------------------------
173421e4b072SLarry Finger */
173521e4b072SLarry Finger arpresp = &reserved_page_packet_8821[ARPRESP_PG * 256];
173621e4b072SLarry Finger SET_80211_HDR_ADDRESS1(arpresp, mac->bssid);
173721e4b072SLarry Finger SET_80211_HDR_ADDRESS2(arpresp, mac->mac_addr);
173821e4b072SLarry Finger SET_80211_HDR_ADDRESS3(arpresp, mac->bssid);
173921e4b072SLarry Finger
17409c66a7e5SLarry Finger SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2, ARPRESP_PG);
174121e4b072SLarry Finger
174221e4b072SLarry Finger /*---------------------------------------------------------
174374a7dfbcSPing-Ke Shih * (7) Remote Wake Ctrl
174421e4b072SLarry Finger *----------------------------------------------------------
174521e4b072SLarry Finger */
17469c66a7e5SLarry Finger SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2,
174721e4b072SLarry Finger REMOTE_PG);
174821e4b072SLarry Finger
174921e4b072SLarry Finger /*---------------------------------------------------------
175074a7dfbcSPing-Ke Shih * (8) GTK Ext Memory
175121e4b072SLarry Finger *----------------------------------------------------------
175221e4b072SLarry Finger */
17539c66a7e5SLarry Finger SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2, GTKEXT_PG);
175421e4b072SLarry Finger
175521e4b072SLarry Finger totalpacketlen = TOTAL_RESERVED_PKT_LEN_8821 - 40;
175621e4b072SLarry Finger
175721e4b072SLarry Finger out:
175821e4b072SLarry Finger
175921e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
176021e4b072SLarry Finger "rtl8821ae_set_fw_rsvdpagepkt(): packet data\n",
176121e4b072SLarry Finger &reserved_page_packet_8821[0], totalpacketlen);
176221e4b072SLarry Finger
176321e4b072SLarry Finger skb = dev_alloc_skb(totalpacketlen);
176460209d48SPing-Ke Shih if (!skb)
176560209d48SPing-Ke Shih return;
1766ad941e69Syuan linyu skb_put_data(skb, &reserved_page_packet_8821, totalpacketlen);
176721e4b072SLarry Finger
1768557f9331SLarry Finger rtstatus = rtl_cmd_send_packet(hw, skb);
176921e4b072SLarry Finger
177021e4b072SLarry Finger if (rtstatus)
177121e4b072SLarry Finger b_dlok = true;
177221e4b072SLarry Finger
177321e4b072SLarry Finger if (!b_dl_finished && b_dlok) {
177498611b00SLarry Finger rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD,
177521e4b072SLarry Finger "Set RSVD page location to Fw.\n");
177621e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
17779c66a7e5SLarry Finger "H2C_RSVDPAGE:\n", u1rsvdpageloc, 5);
177821e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_RSVDPAGE,
17799c66a7e5SLarry Finger sizeof(u1rsvdpageloc), u1rsvdpageloc);
178021e4b072SLarry Finger if (dl_whole_packets) {
178121e4b072SLarry Finger RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
178221e4b072SLarry Finger "wowlan H2C_RSVDPAGE:\n",
17839c66a7e5SLarry Finger u1rsvdpageloc2, 7);
178421e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_RSVDPAGE,
17859c66a7e5SLarry Finger sizeof(u1rsvdpageloc2),
17869c66a7e5SLarry Finger u1rsvdpageloc2);
178721e4b072SLarry Finger }
178821e4b072SLarry Finger }
178921e4b072SLarry Finger
179021e4b072SLarry Finger if (!b_dlok) {
179198611b00SLarry Finger rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
179221e4b072SLarry Finger "Set RSVD page location to Fw FAIL!!!!!!.\n");
179321e4b072SLarry Finger }
179421e4b072SLarry Finger }
179521e4b072SLarry Finger
179621e4b072SLarry Finger /*Should check FW support p2p or not.*/
rtl8821ae_set_p2p_ctw_period_cmd(struct ieee80211_hw * hw,u8 ctwindow)179721e4b072SLarry Finger static void rtl8821ae_set_p2p_ctw_period_cmd(struct ieee80211_hw *hw, u8 ctwindow)
179821e4b072SLarry Finger {
179921e4b072SLarry Finger u8 u1_ctwindow_period[1] = { ctwindow};
180021e4b072SLarry Finger
180121e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_P2P_PS_CTW_CMD, 1,
180221e4b072SLarry Finger u1_ctwindow_period);
180321e4b072SLarry Finger }
180421e4b072SLarry Finger
rtl8821ae_set_p2p_ps_offload_cmd(struct ieee80211_hw * hw,u8 p2p_ps_state)180521e4b072SLarry Finger void rtl8821ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
180621e4b072SLarry Finger {
180721e4b072SLarry Finger struct rtl_priv *rtlpriv = rtl_priv(hw);
180821e4b072SLarry Finger struct rtl_ps_ctl *rtlps = rtl_psc(rtl_priv(hw));
180921e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
181021e4b072SLarry Finger struct rtl_p2p_ps_info *p2pinfo = &rtlps->p2p_ps_info;
181121e4b072SLarry Finger struct p2p_ps_offload_t *p2p_ps_offload = &rtlhal->p2p_ps_offload;
181221e4b072SLarry Finger u8 i;
181321e4b072SLarry Finger u16 ctwindow;
181421e4b072SLarry Finger u32 start_time, tsf_low;
181521e4b072SLarry Finger
181621e4b072SLarry Finger switch (p2p_ps_state) {
181721e4b072SLarry Finger case P2P_PS_DISABLE:
181898611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_DISABLE\n");
18197fe3b3abSLarry Finger memset(p2p_ps_offload, 0, sizeof(*p2p_ps_offload));
182021e4b072SLarry Finger break;
182121e4b072SLarry Finger case P2P_PS_ENABLE:
182298611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_ENABLE\n");
182321e4b072SLarry Finger /* update CTWindow value. */
182421e4b072SLarry Finger if (p2pinfo->ctwindow > 0) {
182521e4b072SLarry Finger p2p_ps_offload->ctwindow_en = 1;
182621e4b072SLarry Finger ctwindow = p2pinfo->ctwindow;
182721e4b072SLarry Finger rtl8821ae_set_p2p_ctw_period_cmd(hw, ctwindow);
182821e4b072SLarry Finger }
182921e4b072SLarry Finger
183021e4b072SLarry Finger /* hw only support 2 set of NoA */
183121e4b072SLarry Finger for (i = 0 ; i < p2pinfo->noa_num ; i++) {
183221e4b072SLarry Finger /* To control the register setting for which NOA*/
183321e4b072SLarry Finger rtl_write_byte(rtlpriv, 0x5cf, (i << 4));
183421e4b072SLarry Finger if (i == 0)
183521e4b072SLarry Finger p2p_ps_offload->noa0_en = 1;
183621e4b072SLarry Finger else
183721e4b072SLarry Finger p2p_ps_offload->noa1_en = 1;
183821e4b072SLarry Finger
183921e4b072SLarry Finger /* config P2P NoA Descriptor Register */
184021e4b072SLarry Finger rtl_write_dword(rtlpriv, 0x5E0, p2pinfo->noa_duration[i]);
184121e4b072SLarry Finger rtl_write_dword(rtlpriv, 0x5E4, p2pinfo->noa_interval[i]);
184221e4b072SLarry Finger
184321e4b072SLarry Finger /*Get Current TSF value */
184421e4b072SLarry Finger tsf_low = rtl_read_dword(rtlpriv, REG_TSFTR);
184521e4b072SLarry Finger
184621e4b072SLarry Finger start_time = p2pinfo->noa_start_time[i];
184721e4b072SLarry Finger if (p2pinfo->noa_count_type[i] != 1) {
184821e4b072SLarry Finger while (start_time <= (tsf_low+(50*1024))) {
184921e4b072SLarry Finger start_time += p2pinfo->noa_interval[i];
185021e4b072SLarry Finger if (p2pinfo->noa_count_type[i] != 255)
185121e4b072SLarry Finger p2pinfo->noa_count_type[i]--;
185221e4b072SLarry Finger }
185321e4b072SLarry Finger }
185421e4b072SLarry Finger rtl_write_dword(rtlpriv, 0x5E8, start_time);
185521e4b072SLarry Finger rtl_write_dword(rtlpriv, 0x5EC,
185621e4b072SLarry Finger p2pinfo->noa_count_type[i]);
185721e4b072SLarry Finger }
185821e4b072SLarry Finger
185921e4b072SLarry Finger if ((p2pinfo->opp_ps == 1) || (p2pinfo->noa_num > 0)) {
186021e4b072SLarry Finger /* rst p2p circuit */
186121e4b072SLarry Finger rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, BIT(4));
186221e4b072SLarry Finger
186321e4b072SLarry Finger p2p_ps_offload->offload_en = 1;
186421e4b072SLarry Finger
186521e4b072SLarry Finger if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) {
186621e4b072SLarry Finger p2p_ps_offload->role = 1;
186721e4b072SLarry Finger p2p_ps_offload->allstasleep = 0;
186821e4b072SLarry Finger } else {
186921e4b072SLarry Finger p2p_ps_offload->role = 0;
187021e4b072SLarry Finger }
187121e4b072SLarry Finger
187221e4b072SLarry Finger p2p_ps_offload->discovery = 0;
187321e4b072SLarry Finger }
187421e4b072SLarry Finger break;
187521e4b072SLarry Finger case P2P_PS_SCAN:
187698611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN\n");
187721e4b072SLarry Finger p2p_ps_offload->discovery = 1;
187821e4b072SLarry Finger break;
187921e4b072SLarry Finger case P2P_PS_SCAN_DONE:
188098611b00SLarry Finger rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN_DONE\n");
188121e4b072SLarry Finger p2p_ps_offload->discovery = 0;
188221e4b072SLarry Finger p2pinfo->p2p_ps_state = P2P_PS_ENABLE;
188321e4b072SLarry Finger break;
188421e4b072SLarry Finger default:
188521e4b072SLarry Finger break;
188621e4b072SLarry Finger }
188721e4b072SLarry Finger
188821e4b072SLarry Finger rtl8821ae_fill_h2c_cmd(hw,
188921e4b072SLarry Finger H2C_8821AE_P2P_PS_OFFLOAD, 1, (u8 *)p2p_ps_offload);
189021e4b072SLarry Finger }
189121e4b072SLarry Finger
rtl8821ae_c2h_ra_report_handler(struct ieee80211_hw * hw,u8 * cmd_buf,u8 cmd_len)189216cefa44SPing-Ke Shih void rtl8821ae_c2h_ra_report_handler(struct ieee80211_hw *hw,
189321e4b072SLarry Finger u8 *cmd_buf, u8 cmd_len)
189421e4b072SLarry Finger {
189521e4b072SLarry Finger struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
189621e4b072SLarry Finger u8 rate = cmd_buf[0] & 0x3F;
189721e4b072SLarry Finger
189821e4b072SLarry Finger rtlhal->current_ra_rate = rtl8821ae_hw_rate_to_mrate(hw, rate);
189921e4b072SLarry Finger
190021e4b072SLarry Finger rtl8821ae_dm_update_init_rate(hw, rate);
190121e4b072SLarry Finger }
1902