162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* Copyright(c) 2009-2010 Realtek Corporation.*/ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include "../wifi.h" 562306a36Sopenharmony_ci#include "../pci.h" 662306a36Sopenharmony_ci#include "../base.h" 762306a36Sopenharmony_ci#include "../core.h" 862306a36Sopenharmony_ci#include "../efuse.h" 962306a36Sopenharmony_ci#include "reg.h" 1062306a36Sopenharmony_ci#include "def.h" 1162306a36Sopenharmony_ci#include "fw.h" 1262306a36Sopenharmony_ci#include "dm.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistatic void _rtl8821ae_enable_fw_download(struct ieee80211_hw *hw, bool enable) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 1762306a36Sopenharmony_ci u8 tmp; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci if (enable) { 2062306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x05); 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL + 2); 2362306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_MCUFWDL + 2, tmp & 0xf7); 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL); 2662306a36Sopenharmony_ci } else { 2762306a36Sopenharmony_ci tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL); 2862306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp & 0xfe); 2962306a36Sopenharmony_ci tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL); 3062306a36Sopenharmony_ci } 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic void _rtl8821ae_write_fw(struct ieee80211_hw *hw, 3462306a36Sopenharmony_ci enum version_8821ae version, 3562306a36Sopenharmony_ci u8 *buffer, u32 size) 3662306a36Sopenharmony_ci{ 3762306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 3862306a36Sopenharmony_ci u8 *bufferptr = (u8 *)buffer; 3962306a36Sopenharmony_ci u32 pagenums, remainsize; 4062306a36Sopenharmony_ci u32 page, offset; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "FW size is %d bytes,\n", size); 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci rtl_fill_dummy(bufferptr, &size); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci pagenums = size / FW_8821AE_PAGE_SIZE; 4762306a36Sopenharmony_ci remainsize = size % FW_8821AE_PAGE_SIZE; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci if (pagenums > 8) 5062306a36Sopenharmony_ci pr_err("Page numbers should not greater then 8\n"); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci for (page = 0; page < pagenums; page++) { 5362306a36Sopenharmony_ci offset = page * FW_8821AE_PAGE_SIZE; 5462306a36Sopenharmony_ci rtl_fw_page_write(hw, page, (bufferptr + offset), 5562306a36Sopenharmony_ci FW_8821AE_PAGE_SIZE); 5662306a36Sopenharmony_ci } 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci if (remainsize) { 5962306a36Sopenharmony_ci offset = pagenums * FW_8821AE_PAGE_SIZE; 6062306a36Sopenharmony_ci page = pagenums; 6162306a36Sopenharmony_ci rtl_fw_page_write(hw, page, (bufferptr + offset), remainsize); 6262306a36Sopenharmony_ci } 6362306a36Sopenharmony_ci} 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistatic int _rtl8821ae_fw_free_to_go(struct ieee80211_hw *hw) 6662306a36Sopenharmony_ci{ 6762306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 6862306a36Sopenharmony_ci int err = -EIO; 6962306a36Sopenharmony_ci u32 counter = 0; 7062306a36Sopenharmony_ci u32 value32; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci do { 7362306a36Sopenharmony_ci value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); 7462306a36Sopenharmony_ci } while ((counter++ < FW_8821AE_POLLING_TIMEOUT_COUNT) && 7562306a36Sopenharmony_ci (!(value32 & FWDL_CHKSUM_RPT))); 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci if (counter >= FW_8821AE_POLLING_TIMEOUT_COUNT) { 7862306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD, 7962306a36Sopenharmony_ci "chksum report fail! REG_MCUFWDL:0x%08x .\n", 8062306a36Sopenharmony_ci value32); 8162306a36Sopenharmony_ci goto exit; 8262306a36Sopenharmony_ci } 8362306a36Sopenharmony_ci value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); 8462306a36Sopenharmony_ci value32 |= MCUFWDL_RDY; 8562306a36Sopenharmony_ci value32 &= ~WINTINI_RDY; 8662306a36Sopenharmony_ci rtl_write_dword(rtlpriv, REG_MCUFWDL, value32); 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci rtl8821ae_firmware_selfreset(hw); 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci counter = 0; 9162306a36Sopenharmony_ci do { 9262306a36Sopenharmony_ci value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL); 9362306a36Sopenharmony_ci if (value32 & WINTINI_RDY) 9462306a36Sopenharmony_ci return 0; 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci udelay(FW_8821AE_POLLING_DELAY); 9762306a36Sopenharmony_ci } while (counter++ < FW_8821AE_POLLING_TIMEOUT_COUNT); 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci pr_err("Polling FW ready fail!! REG_MCUFWDL:0x%08x .\n", 10062306a36Sopenharmony_ci value32); 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ciexit: 10362306a36Sopenharmony_ci return err; 10462306a36Sopenharmony_ci} 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_cistatic void _rtl8821ae_wait_for_h2c_cmd_finish(struct rtl_priv *rtlpriv) 10762306a36Sopenharmony_ci{ 10862306a36Sopenharmony_ci u8 val; 10962306a36Sopenharmony_ci u16 count = 0; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci do { 11262306a36Sopenharmony_ci val = rtl_read_byte(rtlpriv, REG_HMETFR); 11362306a36Sopenharmony_ci mdelay(1); 11462306a36Sopenharmony_ci count++; 11562306a36Sopenharmony_ci } while ((val & 0x0F) && (count < 1000)); 11662306a36Sopenharmony_ci} 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ciint rtl8821ae_download_fw(struct ieee80211_hw *hw, bool buse_wake_on_wlan_fw) 11962306a36Sopenharmony_ci{ 12062306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 12162306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 12262306a36Sopenharmony_ci struct rtlwifi_firmware_header *pfwheader; 12362306a36Sopenharmony_ci u8 *pfwdata; 12462306a36Sopenharmony_ci u32 fwsize; 12562306a36Sopenharmony_ci int err; 12662306a36Sopenharmony_ci bool support_remote_wakeup; 12762306a36Sopenharmony_ci enum version_8821ae version = rtlhal->version; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci rtlpriv->cfg->ops->get_hw_reg(hw, HAL_DEF_WOWLAN, 13062306a36Sopenharmony_ci (u8 *)(&support_remote_wakeup)); 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci if (support_remote_wakeup) 13362306a36Sopenharmony_ci _rtl8821ae_wait_for_h2c_cmd_finish(rtlpriv); 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci if (buse_wake_on_wlan_fw) { 13662306a36Sopenharmony_ci if (!rtlhal->wowlan_firmware) 13762306a36Sopenharmony_ci return 1; 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci pfwheader = 14062306a36Sopenharmony_ci (struct rtlwifi_firmware_header *)rtlhal->wowlan_firmware; 14162306a36Sopenharmony_ci rtlhal->fw_version = le16_to_cpu(pfwheader->version); 14262306a36Sopenharmony_ci rtlhal->fw_subversion = pfwheader->subversion; 14362306a36Sopenharmony_ci pfwdata = (u8 *)rtlhal->wowlan_firmware; 14462306a36Sopenharmony_ci fwsize = rtlhal->wowlan_fwsize; 14562306a36Sopenharmony_ci } else { 14662306a36Sopenharmony_ci if (!rtlhal->pfirmware) 14762306a36Sopenharmony_ci return 1; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci pfwheader = 15062306a36Sopenharmony_ci (struct rtlwifi_firmware_header *)rtlhal->pfirmware; 15162306a36Sopenharmony_ci rtlhal->fw_version = le16_to_cpu(pfwheader->version); 15262306a36Sopenharmony_ci rtlhal->fw_subversion = pfwheader->subversion; 15362306a36Sopenharmony_ci pfwdata = (u8 *)rtlhal->pfirmware; 15462306a36Sopenharmony_ci fwsize = rtlhal->fwsize; 15562306a36Sopenharmony_ci } 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG, 15862306a36Sopenharmony_ci "%s Firmware SIZE %d\n", 15962306a36Sopenharmony_ci buse_wake_on_wlan_fw ? "Wowlan" : "Normal", fwsize); 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci if (IS_FW_HEADER_EXIST_8812(pfwheader) || 16262306a36Sopenharmony_ci IS_FW_HEADER_EXIST_8821(pfwheader)) { 16362306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG, 16462306a36Sopenharmony_ci "Firmware Version(%d), Signature(%#x)\n", 16562306a36Sopenharmony_ci pfwheader->version, pfwheader->signature); 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci pfwdata = pfwdata + sizeof(struct rtlwifi_firmware_header); 16862306a36Sopenharmony_ci fwsize = fwsize - sizeof(struct rtlwifi_firmware_header); 16962306a36Sopenharmony_ci } 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci if (rtlhal->mac_func_enable) { 17262306a36Sopenharmony_ci if (rtl_read_byte(rtlpriv, REG_MCUFWDL) & BIT(7)) { 17362306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00); 17462306a36Sopenharmony_ci rtl8821ae_firmware_selfreset(hw); 17562306a36Sopenharmony_ci } 17662306a36Sopenharmony_ci } 17762306a36Sopenharmony_ci _rtl8821ae_enable_fw_download(hw, true); 17862306a36Sopenharmony_ci _rtl8821ae_write_fw(hw, version, pfwdata, fwsize); 17962306a36Sopenharmony_ci _rtl8821ae_enable_fw_download(hw, false); 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci err = _rtl8821ae_fw_free_to_go(hw); 18262306a36Sopenharmony_ci if (err) { 18362306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG, 18462306a36Sopenharmony_ci "Firmware is not ready to run!\n"); 18562306a36Sopenharmony_ci } else { 18662306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, 18762306a36Sopenharmony_ci "Firmware is ready to run!\n"); 18862306a36Sopenharmony_ci } 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci return 0; 19162306a36Sopenharmony_ci} 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci#if (USE_SPECIFIC_FW_TO_SUPPORT_WOWLAN == 1) 19462306a36Sopenharmony_civoid rtl8821ae_set_fw_related_for_wowlan(struct ieee80211_hw *hw, 19562306a36Sopenharmony_ci bool used_wowlan_fw) 19662306a36Sopenharmony_ci{ 19762306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 19862306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 19962306a36Sopenharmony_ci struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 20062306a36Sopenharmony_ci /* 1. Before WoWLAN or After WOWLAN we need to re-download Fw. */ 20162306a36Sopenharmony_ci if (rtl8821ae_download_fw(hw, used_wowlan_fw)) { 20262306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, 20362306a36Sopenharmony_ci "Re-Download Firmware failed!!\n"); 20462306a36Sopenharmony_ci rtlhal->fw_ready = false; 20562306a36Sopenharmony_ci return; 20662306a36Sopenharmony_ci } 20762306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, 20862306a36Sopenharmony_ci "Re-Download Firmware Success !!\n"); 20962306a36Sopenharmony_ci rtlhal->fw_ready = true; 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci /* 2. Re-Init the variables about Fw related setting. */ 21262306a36Sopenharmony_ci ppsc->fw_current_inpsmode = false; 21362306a36Sopenharmony_ci rtlhal->fw_ps_state = FW_PS_STATE_ALL_ON_8821AE; 21462306a36Sopenharmony_ci rtlhal->fw_clk_change_in_progress = false; 21562306a36Sopenharmony_ci rtlhal->allow_sw_to_change_hwclc = false; 21662306a36Sopenharmony_ci rtlhal->last_hmeboxnum = 0; 21762306a36Sopenharmony_ci} 21862306a36Sopenharmony_ci#endif 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_cistatic bool _rtl8821ae_check_fw_read_last_h2c(struct ieee80211_hw *hw, 22162306a36Sopenharmony_ci u8 boxnum) 22262306a36Sopenharmony_ci{ 22362306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 22462306a36Sopenharmony_ci u8 val_hmetfr; 22562306a36Sopenharmony_ci bool result = false; 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci val_hmetfr = rtl_read_byte(rtlpriv, REG_HMETFR); 22862306a36Sopenharmony_ci if (((val_hmetfr >> boxnum) & BIT(0)) == 0) 22962306a36Sopenharmony_ci result = true; 23062306a36Sopenharmony_ci return result; 23162306a36Sopenharmony_ci} 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cistatic void _rtl8821ae_fill_h2c_command(struct ieee80211_hw *hw, 23462306a36Sopenharmony_ci u8 element_id, u32 cmd_len, 23562306a36Sopenharmony_ci u8 *cmdbuffer) 23662306a36Sopenharmony_ci{ 23762306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 23862306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 23962306a36Sopenharmony_ci u8 boxnum = 0; 24062306a36Sopenharmony_ci u16 box_reg = 0, box_extreg = 0; 24162306a36Sopenharmony_ci u8 u1b_tmp = 0; 24262306a36Sopenharmony_ci bool isfw_read = false; 24362306a36Sopenharmony_ci u8 buf_index = 0; 24462306a36Sopenharmony_ci bool bwrite_sucess = false; 24562306a36Sopenharmony_ci u8 wait_h2c_limmit = 100; 24662306a36Sopenharmony_ci /*u8 wait_writeh2c_limmit = 100;*/ 24762306a36Sopenharmony_ci u8 boxcontent[4], boxextcontent[4]; 24862306a36Sopenharmony_ci u32 h2c_waitcounter = 0; 24962306a36Sopenharmony_ci unsigned long flag = 0; 25062306a36Sopenharmony_ci u8 idx = 0; 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "come in\n"); 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci while (true) { 25562306a36Sopenharmony_ci spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag); 25662306a36Sopenharmony_ci if (rtlhal->h2c_setinprogress) { 25762306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, 25862306a36Sopenharmony_ci "H2C set in progress! Wait to set..element_id(%d).\n", 25962306a36Sopenharmony_ci element_id); 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci while (rtlhal->h2c_setinprogress) { 26262306a36Sopenharmony_ci spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, 26362306a36Sopenharmony_ci flag); 26462306a36Sopenharmony_ci h2c_waitcounter++; 26562306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, 26662306a36Sopenharmony_ci "Wait 100 us (%d times)...\n", 26762306a36Sopenharmony_ci h2c_waitcounter); 26862306a36Sopenharmony_ci udelay(100); 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci if (h2c_waitcounter > 1000) 27162306a36Sopenharmony_ci return; 27262306a36Sopenharmony_ci spin_lock_irqsave(&rtlpriv->locks.h2c_lock, 27362306a36Sopenharmony_ci flag); 27462306a36Sopenharmony_ci } 27562306a36Sopenharmony_ci spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); 27662306a36Sopenharmony_ci } else { 27762306a36Sopenharmony_ci rtlhal->h2c_setinprogress = true; 27862306a36Sopenharmony_ci spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); 27962306a36Sopenharmony_ci break; 28062306a36Sopenharmony_ci } 28162306a36Sopenharmony_ci } 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci while (!bwrite_sucess) { 28462306a36Sopenharmony_ci boxnum = rtlhal->last_hmeboxnum; 28562306a36Sopenharmony_ci switch (boxnum) { 28662306a36Sopenharmony_ci case 0: 28762306a36Sopenharmony_ci box_reg = REG_HMEBOX_0; 28862306a36Sopenharmony_ci box_extreg = REG_HMEBOX_EXT_0; 28962306a36Sopenharmony_ci break; 29062306a36Sopenharmony_ci case 1: 29162306a36Sopenharmony_ci box_reg = REG_HMEBOX_1; 29262306a36Sopenharmony_ci box_extreg = REG_HMEBOX_EXT_1; 29362306a36Sopenharmony_ci break; 29462306a36Sopenharmony_ci case 2: 29562306a36Sopenharmony_ci box_reg = REG_HMEBOX_2; 29662306a36Sopenharmony_ci box_extreg = REG_HMEBOX_EXT_2; 29762306a36Sopenharmony_ci break; 29862306a36Sopenharmony_ci case 3: 29962306a36Sopenharmony_ci box_reg = REG_HMEBOX_3; 30062306a36Sopenharmony_ci box_extreg = REG_HMEBOX_EXT_3; 30162306a36Sopenharmony_ci break; 30262306a36Sopenharmony_ci default: 30362306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD, 30462306a36Sopenharmony_ci "switch case %#x not processed\n", boxnum); 30562306a36Sopenharmony_ci break; 30662306a36Sopenharmony_ci } 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci isfw_read = false; 30962306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, REG_CR); 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci if (u1b_tmp != 0xEA) { 31262306a36Sopenharmony_ci isfw_read = true; 31362306a36Sopenharmony_ci } else { 31462306a36Sopenharmony_ci if (rtl_read_byte(rtlpriv, REG_TXDMA_STATUS) == 0xEA || 31562306a36Sopenharmony_ci rtl_read_byte(rtlpriv, REG_TXPKT_EMPTY) == 0xEA) 31662306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_SYS_CFG1 + 3, 0xFF); 31762306a36Sopenharmony_ci } 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci if (isfw_read) { 32062306a36Sopenharmony_ci wait_h2c_limmit = 100; 32162306a36Sopenharmony_ci isfw_read = 32262306a36Sopenharmony_ci _rtl8821ae_check_fw_read_last_h2c(hw, boxnum); 32362306a36Sopenharmony_ci while (!isfw_read) { 32462306a36Sopenharmony_ci /*wait until Fw read*/ 32562306a36Sopenharmony_ci wait_h2c_limmit--; 32662306a36Sopenharmony_ci if (wait_h2c_limmit == 0) { 32762306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, 32862306a36Sopenharmony_ci "Waiting too long for FW read clear HMEBox(%d)!\n", 32962306a36Sopenharmony_ci boxnum); 33062306a36Sopenharmony_ci break; 33162306a36Sopenharmony_ci } 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci udelay(10); 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci isfw_read = 33662306a36Sopenharmony_ci _rtl8821ae_check_fw_read_last_h2c(hw, boxnum); 33762306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, 0x130); 33862306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, 33962306a36Sopenharmony_ci "Waiting for FW read clear HMEBox(%d)!!! 0x130 = %2x\n", 34062306a36Sopenharmony_ci boxnum, u1b_tmp); 34162306a36Sopenharmony_ci } 34262306a36Sopenharmony_ci } 34362306a36Sopenharmony_ci 34462306a36Sopenharmony_ci if (!isfw_read) { 34562306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, 34662306a36Sopenharmony_ci "Write H2C register BOX[%d] fail!!!!! Fw do not read.\n", 34762306a36Sopenharmony_ci boxnum); 34862306a36Sopenharmony_ci break; 34962306a36Sopenharmony_ci } 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci memset(boxcontent, 0, sizeof(boxcontent)); 35262306a36Sopenharmony_ci memset(boxextcontent, 0, sizeof(boxextcontent)); 35362306a36Sopenharmony_ci boxcontent[0] = element_id; 35462306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, 35562306a36Sopenharmony_ci "Write element_id box_reg(%4x) = %2x\n", 35662306a36Sopenharmony_ci box_reg, element_id); 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ci switch (cmd_len) { 35962306a36Sopenharmony_ci case 1: 36062306a36Sopenharmony_ci case 2: 36162306a36Sopenharmony_ci case 3: 36262306a36Sopenharmony_ci /*boxcontent[0] &= ~(BIT(7));*/ 36362306a36Sopenharmony_ci memcpy((u8 *)(boxcontent) + 1, 36462306a36Sopenharmony_ci cmdbuffer + buf_index, cmd_len); 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ci for (idx = 0; idx < 4; idx++) { 36762306a36Sopenharmony_ci rtl_write_byte(rtlpriv, box_reg + idx, 36862306a36Sopenharmony_ci boxcontent[idx]); 36962306a36Sopenharmony_ci } 37062306a36Sopenharmony_ci break; 37162306a36Sopenharmony_ci case 4: 37262306a36Sopenharmony_ci case 5: 37362306a36Sopenharmony_ci case 6: 37462306a36Sopenharmony_ci case 7: 37562306a36Sopenharmony_ci /*boxcontent[0] |= (BIT(7));*/ 37662306a36Sopenharmony_ci memcpy((u8 *)(boxextcontent), 37762306a36Sopenharmony_ci cmdbuffer + buf_index+3, cmd_len-3); 37862306a36Sopenharmony_ci memcpy((u8 *)(boxcontent) + 1, 37962306a36Sopenharmony_ci cmdbuffer + buf_index, 3); 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_ci for (idx = 0; idx < 4; idx++) { 38262306a36Sopenharmony_ci rtl_write_byte(rtlpriv, box_extreg + idx, 38362306a36Sopenharmony_ci boxextcontent[idx]); 38462306a36Sopenharmony_ci } 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci for (idx = 0; idx < 4; idx++) { 38762306a36Sopenharmony_ci rtl_write_byte(rtlpriv, box_reg + idx, 38862306a36Sopenharmony_ci boxcontent[idx]); 38962306a36Sopenharmony_ci } 39062306a36Sopenharmony_ci break; 39162306a36Sopenharmony_ci default: 39262306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD, 39362306a36Sopenharmony_ci "switch case %#x not processed\n", cmd_len); 39462306a36Sopenharmony_ci break; 39562306a36Sopenharmony_ci } 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_ci bwrite_sucess = true; 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ci rtlhal->last_hmeboxnum = boxnum + 1; 40062306a36Sopenharmony_ci if (rtlhal->last_hmeboxnum == 4) 40162306a36Sopenharmony_ci rtlhal->last_hmeboxnum = 0; 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, 40462306a36Sopenharmony_ci "pHalData->last_hmeboxnum = %d\n", 40562306a36Sopenharmony_ci rtlhal->last_hmeboxnum); 40662306a36Sopenharmony_ci } 40762306a36Sopenharmony_ci 40862306a36Sopenharmony_ci spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag); 40962306a36Sopenharmony_ci rtlhal->h2c_setinprogress = false; 41062306a36Sopenharmony_ci spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "go out\n"); 41362306a36Sopenharmony_ci} 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_civoid rtl8821ae_fill_h2c_cmd(struct ieee80211_hw *hw, 41662306a36Sopenharmony_ci u8 element_id, u32 cmd_len, u8 *cmdbuffer) 41762306a36Sopenharmony_ci{ 41862306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 41962306a36Sopenharmony_ci u32 tmp_cmdbuf[2]; 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_ci if (!rtlhal->fw_ready) { 42262306a36Sopenharmony_ci WARN_ONCE(true, 42362306a36Sopenharmony_ci "rtl8821ae: error H2C cmd because of Fw download fail!!!\n"); 42462306a36Sopenharmony_ci return; 42562306a36Sopenharmony_ci } 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_ci memset(tmp_cmdbuf, 0, 8); 42862306a36Sopenharmony_ci memcpy(tmp_cmdbuf, cmdbuffer, cmd_len); 42962306a36Sopenharmony_ci _rtl8821ae_fill_h2c_command(hw, element_id, cmd_len, (u8 *)&tmp_cmdbuf); 43062306a36Sopenharmony_ci} 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_civoid rtl8821ae_firmware_selfreset(struct ieee80211_hw *hw) 43362306a36Sopenharmony_ci{ 43462306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 43562306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 43662306a36Sopenharmony_ci u8 u1b_tmp; 43762306a36Sopenharmony_ci 43862306a36Sopenharmony_ci if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) { 43962306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1); 44062306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(3)))); 44162306a36Sopenharmony_ci } else { 44262306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1); 44362306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(0)))); 44462306a36Sopenharmony_ci } 44562306a36Sopenharmony_ci 44662306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN+1); 44762306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp & (~BIT(2)))); 44862306a36Sopenharmony_ci udelay(50); 44962306a36Sopenharmony_ci 45062306a36Sopenharmony_ci if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) { 45162306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1); 45262306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp | BIT(3))); 45362306a36Sopenharmony_ci } else { 45462306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1); 45562306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp | BIT(0))); 45662306a36Sopenharmony_ci } 45762306a36Sopenharmony_ci 45862306a36Sopenharmony_ci u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN+1); 45962306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp | BIT(2))); 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, 46262306a36Sopenharmony_ci "_8051Reset8812ae(): 8051 reset success .\n"); 46362306a36Sopenharmony_ci} 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_civoid rtl8821ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) 46662306a36Sopenharmony_ci{ 46762306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 46862306a36Sopenharmony_ci u8 u1_h2c_set_pwrmode[H2C_8821AE_PWEMODE_LENGTH] = { 0 }; 46962306a36Sopenharmony_ci struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 47062306a36Sopenharmony_ci u8 rlbm, power_state = 0, byte5 = 0; 47162306a36Sopenharmony_ci u8 awake_intvl; /* DTIM = (awake_intvl - 1) */ 47262306a36Sopenharmony_ci struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops; 47362306a36Sopenharmony_ci bool bt_ctrl_lps = (rtlpriv->cfg->ops->get_btc_status() ? 47462306a36Sopenharmony_ci btc_ops->btc_is_bt_ctrl_lps(rtlpriv) : false); 47562306a36Sopenharmony_ci bool bt_lps_on = (rtlpriv->cfg->ops->get_btc_status() ? 47662306a36Sopenharmony_ci btc_ops->btc_is_bt_lps_on(rtlpriv) : false); 47762306a36Sopenharmony_ci 47862306a36Sopenharmony_ci if (bt_ctrl_lps) 47962306a36Sopenharmony_ci mode = (bt_lps_on ? FW_PS_MIN_MODE : FW_PS_ACTIVE_MODE); 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_POWER, DBG_DMESG, "FW LPS mode = %d (coex:%d)\n", 48262306a36Sopenharmony_ci mode, bt_ctrl_lps); 48362306a36Sopenharmony_ci 48462306a36Sopenharmony_ci switch (mode) { 48562306a36Sopenharmony_ci case FW_PS_MIN_MODE: 48662306a36Sopenharmony_ci rlbm = 0; 48762306a36Sopenharmony_ci awake_intvl = 2; 48862306a36Sopenharmony_ci break; 48962306a36Sopenharmony_ci case FW_PS_MAX_MODE: 49062306a36Sopenharmony_ci rlbm = 1; 49162306a36Sopenharmony_ci awake_intvl = 2; 49262306a36Sopenharmony_ci break; 49362306a36Sopenharmony_ci case FW_PS_DTIM_MODE: 49462306a36Sopenharmony_ci rlbm = 2; 49562306a36Sopenharmony_ci awake_intvl = ppsc->reg_max_lps_awakeintvl; 49662306a36Sopenharmony_ci /* hw->conf.ps_dtim_period or mac->vif->bss_conf.dtim_period 49762306a36Sopenharmony_ci * is only used in swlps. 49862306a36Sopenharmony_ci */ 49962306a36Sopenharmony_ci break; 50062306a36Sopenharmony_ci default: 50162306a36Sopenharmony_ci rlbm = 2; 50262306a36Sopenharmony_ci awake_intvl = 4; 50362306a36Sopenharmony_ci break; 50462306a36Sopenharmony_ci } 50562306a36Sopenharmony_ci 50662306a36Sopenharmony_ci if (rtlpriv->mac80211.p2p) { 50762306a36Sopenharmony_ci awake_intvl = 2; 50862306a36Sopenharmony_ci rlbm = 1; 50962306a36Sopenharmony_ci } 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_ci if (mode == FW_PS_ACTIVE_MODE) { 51262306a36Sopenharmony_ci byte5 = 0x40; 51362306a36Sopenharmony_ci power_state = FW_PWR_STATE_ACTIVE; 51462306a36Sopenharmony_ci } else { 51562306a36Sopenharmony_ci if (bt_ctrl_lps) { 51662306a36Sopenharmony_ci byte5 = btc_ops->btc_get_lps_val(rtlpriv); 51762306a36Sopenharmony_ci power_state = btc_ops->btc_get_rpwm_val(rtlpriv); 51862306a36Sopenharmony_ci 51962306a36Sopenharmony_ci if ((rlbm == 2) && (byte5 & BIT(4))) { 52062306a36Sopenharmony_ci /* Keep awake interval to 1 to prevent from 52162306a36Sopenharmony_ci * decreasing coex performance 52262306a36Sopenharmony_ci */ 52362306a36Sopenharmony_ci awake_intvl = 2; 52462306a36Sopenharmony_ci rlbm = 2; 52562306a36Sopenharmony_ci } 52662306a36Sopenharmony_ci } else { 52762306a36Sopenharmony_ci byte5 = 0x40; 52862306a36Sopenharmony_ci power_state = FW_PWR_STATE_RF_OFF; 52962306a36Sopenharmony_ci } 53062306a36Sopenharmony_ci } 53162306a36Sopenharmony_ci 53262306a36Sopenharmony_ci SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, ((mode) ? 1 : 0)); 53362306a36Sopenharmony_ci SET_H2CCMD_PWRMODE_PARM_RLBM(u1_h2c_set_pwrmode, rlbm); 53462306a36Sopenharmony_ci SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode, 53562306a36Sopenharmony_ci bt_ctrl_lps ? 0 : 53662306a36Sopenharmony_ci ((rtlpriv->mac80211.p2p) ? 53762306a36Sopenharmony_ci ppsc->smart_ps : 1)); 53862306a36Sopenharmony_ci SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(u1_h2c_set_pwrmode, 53962306a36Sopenharmony_ci awake_intvl); 54062306a36Sopenharmony_ci SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1_h2c_set_pwrmode, 0); 54162306a36Sopenharmony_ci SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state); 54262306a36Sopenharmony_ci SET_H2CCMD_PWRMODE_PARM_BYTE5(u1_h2c_set_pwrmode, byte5); 54362306a36Sopenharmony_ci 54462306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 54562306a36Sopenharmony_ci "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n", 54662306a36Sopenharmony_ci u1_h2c_set_pwrmode, H2C_8821AE_PWEMODE_LENGTH); 54762306a36Sopenharmony_ci if (rtlpriv->cfg->ops->get_btc_status()) 54862306a36Sopenharmony_ci btc_ops->btc_record_pwr_mode(rtlpriv, u1_h2c_set_pwrmode, 54962306a36Sopenharmony_ci H2C_8821AE_PWEMODE_LENGTH); 55062306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_SETPWRMODE, 55162306a36Sopenharmony_ci H2C_8821AE_PWEMODE_LENGTH, 55262306a36Sopenharmony_ci u1_h2c_set_pwrmode); 55362306a36Sopenharmony_ci} 55462306a36Sopenharmony_ci 55562306a36Sopenharmony_civoid rtl8821ae_set_fw_media_status_rpt_cmd(struct ieee80211_hw *hw, 55662306a36Sopenharmony_ci u8 mstatus) 55762306a36Sopenharmony_ci{ 55862306a36Sopenharmony_ci u8 parm[3] = { 0, 0, 0 }; 55962306a36Sopenharmony_ci /* parm[0]: bit0=0-->Disconnect, bit0=1-->Connect 56062306a36Sopenharmony_ci * bit1=0-->update Media Status to MACID 56162306a36Sopenharmony_ci * bit1=1-->update Media Status from MACID to MACID_End 56262306a36Sopenharmony_ci * parm[1]: MACID, if this is INFRA_STA, MacID = 0 56362306a36Sopenharmony_ci * parm[2]: MACID_End 56462306a36Sopenharmony_ci */ 56562306a36Sopenharmony_ci 56662306a36Sopenharmony_ci SET_H2CCMD_MSRRPT_PARM_OPMODE(parm, mstatus); 56762306a36Sopenharmony_ci SET_H2CCMD_MSRRPT_PARM_MACID_IND(parm, 0); 56862306a36Sopenharmony_ci 56962306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_MSRRPT, 3, parm); 57062306a36Sopenharmony_ci} 57162306a36Sopenharmony_ci 57262306a36Sopenharmony_civoid rtl8821ae_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw, 57362306a36Sopenharmony_ci u8 ap_offload_enable) 57462306a36Sopenharmony_ci{ 57562306a36Sopenharmony_ci struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 57662306a36Sopenharmony_ci u8 u1_apoffload_parm[H2C_8821AE_AP_OFFLOAD_LENGTH] = { 0 }; 57762306a36Sopenharmony_ci 57862306a36Sopenharmony_ci SET_H2CCMD_AP_OFFLOAD_ON(u1_apoffload_parm, ap_offload_enable); 57962306a36Sopenharmony_ci SET_H2CCMD_AP_OFFLOAD_HIDDEN(u1_apoffload_parm, mac->hiddenssid); 58062306a36Sopenharmony_ci SET_H2CCMD_AP_OFFLOAD_DENYANY(u1_apoffload_parm, 0); 58162306a36Sopenharmony_ci 58262306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AP_OFFLOAD, 58362306a36Sopenharmony_ci H2C_8821AE_AP_OFFLOAD_LENGTH, 58462306a36Sopenharmony_ci u1_apoffload_parm); 58562306a36Sopenharmony_ci} 58662306a36Sopenharmony_ci 58762306a36Sopenharmony_civoid rtl8821ae_set_fw_wowlan_mode(struct ieee80211_hw *hw, bool func_en) 58862306a36Sopenharmony_ci{ 58962306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 59062306a36Sopenharmony_ci struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 59162306a36Sopenharmony_ci u8 fw_wowlan_info[H2C_8821AE_WOWLAN_LENGTH] = {0}; 59262306a36Sopenharmony_ci 59362306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, "enable(%d)\n", func_en); 59462306a36Sopenharmony_ci 59562306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_FUNC_ENABLE(fw_wowlan_info, 59662306a36Sopenharmony_ci (func_en ? true : false)); 59762306a36Sopenharmony_ci 59862306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(fw_wowlan_info, 59962306a36Sopenharmony_ci ((ppsc->wo_wlan_mode & WAKE_ON_PATTERN_MATCH) ? 1 : 0)); 60062306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(fw_wowlan_info, 60162306a36Sopenharmony_ci ((ppsc->wo_wlan_mode & WAKE_ON_MAGIC_PACKET) ? 1 : 0)); 60262306a36Sopenharmony_ci 60362306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(fw_wowlan_info, 0); 60462306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_ALL_PKT_DROP(fw_wowlan_info, false); 60562306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_GPIO_ACTIVE(fw_wowlan_info, 0); 60662306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(fw_wowlan_info, 1); 60762306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_GPIONUM(fw_wowlan_info, 0); 60862306a36Sopenharmony_ci SET_8812_H2CCMD_WOWLAN_GPIO_DURATION(fw_wowlan_info, 0); 60962306a36Sopenharmony_ci 61062306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_DMESG, 61162306a36Sopenharmony_ci "wowlan mode: cmd 0x80: Content:\n", 61262306a36Sopenharmony_ci fw_wowlan_info, H2C_8821AE_WOWLAN_LENGTH); 61362306a36Sopenharmony_ci 61462306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_WO_WLAN, 61562306a36Sopenharmony_ci H2C_8821AE_WOWLAN_LENGTH, 61662306a36Sopenharmony_ci fw_wowlan_info); 61762306a36Sopenharmony_ci} 61862306a36Sopenharmony_ci 61962306a36Sopenharmony_civoid rtl8821ae_set_fw_remote_wake_ctrl_cmd(struct ieee80211_hw *hw, 62062306a36Sopenharmony_ci u8 enable) 62162306a36Sopenharmony_ci{ 62262306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 62362306a36Sopenharmony_ci struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 62462306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 62562306a36Sopenharmony_ci u8 remote_wake_ctrl_parm[H2C_8821AE_REMOTE_WAKE_CTRL_LEN] = {0}; 62662306a36Sopenharmony_ci 62762306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, 62862306a36Sopenharmony_ci "enable=%d, ARP offload=%d, GTK offload=%d\n", 62962306a36Sopenharmony_ci enable, ppsc->arp_offload_enable, ppsc->gtk_offload_enable); 63062306a36Sopenharmony_ci 63162306a36Sopenharmony_ci SET_8812_H2CCMD_REMOTE_WAKECTRL_ENABLE(remote_wake_ctrl_parm, enable); 63262306a36Sopenharmony_ci SET_8812_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(remote_wake_ctrl_parm, 63362306a36Sopenharmony_ci (ppsc->arp_offload_enable ? 1 : 0)); 63462306a36Sopenharmony_ci SET_8812_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(remote_wake_ctrl_parm, 63562306a36Sopenharmony_ci (ppsc->gtk_offload_enable ? 1 : 0)); 63662306a36Sopenharmony_ci SET_8812_H2CCMD_REMOTE_WAKE_CTRL_REALWOWV2_EN(remote_wake_ctrl_parm, 63762306a36Sopenharmony_ci (rtlhal->real_wow_v2_enable ? 1 : 0)); 63862306a36Sopenharmony_ci 63962306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE, 64062306a36Sopenharmony_ci "remote_wake_ctrl: cmd 0x4: Content:\n", 64162306a36Sopenharmony_ci remote_wake_ctrl_parm, H2C_8821AE_REMOTE_WAKE_CTRL_LEN); 64262306a36Sopenharmony_ci 64362306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_REMOTE_WAKE_CTRL, 64462306a36Sopenharmony_ci H2C_8821AE_REMOTE_WAKE_CTRL_LEN, 64562306a36Sopenharmony_ci remote_wake_ctrl_parm); 64662306a36Sopenharmony_ci} 64762306a36Sopenharmony_ci 64862306a36Sopenharmony_civoid rtl8821ae_set_fw_keep_alive_cmd(struct ieee80211_hw *hw, 64962306a36Sopenharmony_ci bool func_en) 65062306a36Sopenharmony_ci{ 65162306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 65262306a36Sopenharmony_ci u8 keep_alive_info[H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH] = {0}; 65362306a36Sopenharmony_ci 65462306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, "Enable(%d)\n", func_en); 65562306a36Sopenharmony_ci 65662306a36Sopenharmony_ci SET_8812_H2CCMD_KEEP_ALIVE_ENABLE(keep_alive_info, func_en); 65762306a36Sopenharmony_ci /* 1: the period is controled by driver, 0: by Fw default */ 65862306a36Sopenharmony_ci SET_8812_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(keep_alive_info, 1); 65962306a36Sopenharmony_ci SET_8812_H2CCMD_KEEP_ALIVE_PERIOD(keep_alive_info, 10); /* 10 sec */ 66062306a36Sopenharmony_ci 66162306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE, 66262306a36Sopenharmony_ci "keep alive: cmd 0x3: Content:\n", 66362306a36Sopenharmony_ci keep_alive_info, H2C_8821AE_KEEP_ALIVE_CTRL); 66462306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_KEEP_ALIVE_CTRL, 66562306a36Sopenharmony_ci H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH, 66662306a36Sopenharmony_ci keep_alive_info); 66762306a36Sopenharmony_ci} 66862306a36Sopenharmony_ci 66962306a36Sopenharmony_civoid rtl8821ae_set_fw_disconnect_decision_ctrl_cmd(struct ieee80211_hw *hw, 67062306a36Sopenharmony_ci bool enabled) 67162306a36Sopenharmony_ci{ 67262306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 67362306a36Sopenharmony_ci u8 parm[H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN] = {0}; 67462306a36Sopenharmony_ci 67562306a36Sopenharmony_ci SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_ENABLE(parm, enabled); 67662306a36Sopenharmony_ci SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_USER_SETTING(parm, 1); 67762306a36Sopenharmony_ci SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_CHECK_PERIOD(parm, 30); 67862306a36Sopenharmony_ci SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(parm, 3); 67962306a36Sopenharmony_ci 68062306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE, 68162306a36Sopenharmony_ci "disconnect_decision_ctrl: cmd 0x4: Content:\n", 68262306a36Sopenharmony_ci parm, H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN); 68362306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_DISCONNECT_DECISION, 68462306a36Sopenharmony_ci H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN, parm); 68562306a36Sopenharmony_ci} 68662306a36Sopenharmony_ci 68762306a36Sopenharmony_civoid rtl8821ae_set_fw_global_info_cmd(struct ieee80211_hw *hw) 68862306a36Sopenharmony_ci{ 68962306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 69062306a36Sopenharmony_ci struct rtl_security *sec = &rtlpriv->sec; 69162306a36Sopenharmony_ci u8 remote_wakeup_sec_info[H2C_8821AE_AOAC_GLOBAL_INFO_LEN] = {0}; 69262306a36Sopenharmony_ci 69362306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, 69462306a36Sopenharmony_ci "PairwiseEncAlgorithm=%d, GroupEncAlgorithm=%d\n", 69562306a36Sopenharmony_ci sec->pairwise_enc_algorithm, sec->group_enc_algorithm); 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_ci SET_8812_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG( 69862306a36Sopenharmony_ci remote_wakeup_sec_info, 69962306a36Sopenharmony_ci sec->pairwise_enc_algorithm); 70062306a36Sopenharmony_ci SET_8812_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(remote_wakeup_sec_info, 70162306a36Sopenharmony_ci sec->group_enc_algorithm); 70262306a36Sopenharmony_ci 70362306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_GLOBAL_INFO, 70462306a36Sopenharmony_ci H2C_8821AE_AOAC_GLOBAL_INFO_LEN, 70562306a36Sopenharmony_ci remote_wakeup_sec_info); 70662306a36Sopenharmony_ci 70762306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_TRACE, 70862306a36Sopenharmony_ci "rtl8821ae_set_global_info: cmd 0x82:\n", 70962306a36Sopenharmony_ci remote_wakeup_sec_info, H2C_8821AE_AOAC_GLOBAL_INFO_LEN); 71062306a36Sopenharmony_ci} 71162306a36Sopenharmony_ci 71262306a36Sopenharmony_ci#define BEACON_PG 0 71362306a36Sopenharmony_ci#define PSPOLL_PG 1 71462306a36Sopenharmony_ci#define NULL_PG 2 71562306a36Sopenharmony_ci#define QOSNULL_PG 3 71662306a36Sopenharmony_ci#define BT_QOSNULL_PG 4 71762306a36Sopenharmony_ci#define ARPRESP_PG 5 71862306a36Sopenharmony_ci#define REMOTE_PG 6 71962306a36Sopenharmony_ci#define GTKEXT_PG 7 72062306a36Sopenharmony_ci 72162306a36Sopenharmony_ci#define TOTAL_RESERVED_PKT_LEN_8812 4096 72262306a36Sopenharmony_ci#define TOTAL_RESERVED_PKT_LEN_8821 2048 72362306a36Sopenharmony_ci 72462306a36Sopenharmony_cistatic u8 reserved_page_packet_8821[TOTAL_RESERVED_PKT_LEN_8821] = { 72562306a36Sopenharmony_ci /* page 0: beacon */ 72662306a36Sopenharmony_ci 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 72762306a36Sopenharmony_ci 0xff, 0xff, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64, 72862306a36Sopenharmony_ci 0x40, 0x16, 0x9f, 0x23, 0xd4, 0x46, 0x20, 0x00, 72962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73062306a36Sopenharmony_ci 0x64, 0x00, 0x20, 0x04, 0x00, 0x06, 0x64, 0x6c, 73162306a36Sopenharmony_ci 0x69, 0x6e, 0x6b, 0x31, 0x01, 0x08, 0x82, 0x84, 73262306a36Sopenharmony_ci 0x8b, 0x96, 0x0c, 0x18, 0x30, 0x48, 0x03, 0x01, 73362306a36Sopenharmony_ci 0x0b, 0x06, 0x02, 0x00, 0x00, 0x2a, 0x01, 0x8b, 73462306a36Sopenharmony_ci 0x32, 0x04, 0x12, 0x24, 0x60, 0x6c, 0x00, 0x00, 73562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75362306a36Sopenharmony_ci 0x10, 0x00, 0x28, 0x8c, 0x00, 0x12, 0x00, 0x00, 75462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 75562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75862306a36Sopenharmony_ci /* page 1: ps-poll */ 75962306a36Sopenharmony_ci 0xa4, 0x10, 0x01, 0xc0, 0x40, 0x16, 0x9f, 0x23, 76062306a36Sopenharmony_ci 0xd4, 0x46, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64, 76162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78662306a36Sopenharmony_ci 0x18, 0x00, 0x28, 0x8c, 0x00, 0x12, 0x00, 0x00, 78762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 78862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79062306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79162306a36Sopenharmony_ci /* page 2: null data */ 79262306a36Sopenharmony_ci 0x48, 0x01, 0x00, 0x00, 0x40, 0x16, 0x9f, 0x23, 79362306a36Sopenharmony_ci 0xd4, 0x46, 0x00, 0xe0, 0x4c, 0x02, 0xe2, 0x64, 79462306a36Sopenharmony_ci 0x40, 0x16, 0x9f, 0x23, 0xd4, 0x46, 0x00, 0x00, 79562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81962306a36Sopenharmony_ci 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 82062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 82162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82362306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82462306a36Sopenharmony_ci /* page 3: qos null data */ 82562306a36Sopenharmony_ci 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7, 82662306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 82762306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00, 82862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85262306a36Sopenharmony_ci 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 85362306a36Sopenharmony_ci 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 85462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85662306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85762306a36Sopenharmony_ci /* page 4: BT qos null data */ 85862306a36Sopenharmony_ci 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7, 85962306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 86062306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00, 86162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88562306a36Sopenharmony_ci 0x3C, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 88662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 88762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88962306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 89062306a36Sopenharmony_ci /* page 5~7 is for wowlan */ 89162306a36Sopenharmony_ci /* page 5: ARP resp */ 89262306a36Sopenharmony_ci 0x08, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7, 89362306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 89462306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00, 89562306a36Sopenharmony_ci 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06, 89662306a36Sopenharmony_ci 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02, 89762306a36Sopenharmony_ci 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 0x00, 0x00, 89862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 89962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92462306a36Sopenharmony_ci /* page 6: H2C_REMOTE_WAKE_CTRL_INFO */ 92562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95762306a36Sopenharmony_ci /* page 7: Rsvd GTK extend memory (zero memory) */ 95862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 98962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 99062306a36Sopenharmony_ci}; 99162306a36Sopenharmony_ci 99262306a36Sopenharmony_cistatic u8 reserved_page_packet_8812[TOTAL_RESERVED_PKT_LEN_8812] = { 99362306a36Sopenharmony_ci /* page 0: beacon */ 99462306a36Sopenharmony_ci 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 99562306a36Sopenharmony_ci 0xFF, 0xFF, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 99662306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x60, 0x00, 99762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 99862306a36Sopenharmony_ci 0x64, 0x00, 0x20, 0x04, 0x00, 0x03, 0x32, 0x31, 99962306a36Sopenharmony_ci 0x35, 0x01, 0x08, 0x82, 0x84, 0x8B, 0x96, 0x0C, 100062306a36Sopenharmony_ci 0x12, 0x18, 0x24, 0x03, 0x01, 0x01, 0x06, 0x02, 100162306a36Sopenharmony_ci 0x00, 0x00, 0x2A, 0x01, 0x02, 0x32, 0x04, 0x30, 100262306a36Sopenharmony_ci 0x48, 0x60, 0x6C, 0x2D, 0x1A, 0xED, 0x09, 0x03, 100362306a36Sopenharmony_ci 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 100462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 100562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 100662306a36Sopenharmony_ci 0x00, 0xDD, 0x07, 0x00, 0xE0, 0x4C, 0x02, 0x02, 100762306a36Sopenharmony_ci 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 100862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 100962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 101962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 103962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105362306a36Sopenharmony_ci 0x10, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 105462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 105562306a36Sopenharmony_ci 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105862306a36Sopenharmony_ci /* page 1: ps-poll */ 105962306a36Sopenharmony_ci 0xA4, 0x10, 0x09, 0xC0, 0x84, 0xC9, 0XB2, 0xA7, 106062306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 106162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 109962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111862306a36Sopenharmony_ci 0x18, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 111962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 112062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112262306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112362306a36Sopenharmony_ci /* page 2: null data */ 112462306a36Sopenharmony_ci 0x48, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7, 112562306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 112662306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00, 112762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 118062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 118162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 118262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 118362306a36Sopenharmony_ci 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 118462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 118562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 118662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 118762306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 118862306a36Sopenharmony_ci /* page 3: Qos null data */ 118962306a36Sopenharmony_ci 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7, 119062306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 119162306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00, 119262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 119362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 119462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 119562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 119662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 119762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 119862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 119962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 122962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 123962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 124862306a36Sopenharmony_ci 0x1A, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 124962306a36Sopenharmony_ci 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 125062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 125162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 125262306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 125362306a36Sopenharmony_ci /* page 4: BT Qos null data */ 125462306a36Sopenharmony_ci 0xC8, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7, 125562306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 125662306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00, 125762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 125862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 125962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 126962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 128962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131362306a36Sopenharmony_ci 0x3C, 0x00, 0x28, 0x8C, 0x00, 0x12, 0x00, 0x00, 131462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 131562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131762306a36Sopenharmony_ci 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131862306a36Sopenharmony_ci /* page 5~7 is for wowlan */ 131962306a36Sopenharmony_ci /* page 5: ARP resp */ 132062306a36Sopenharmony_ci 0x08, 0x01, 0x00, 0x00, 0x84, 0xC9, 0XB2, 0xA7, 132162306a36Sopenharmony_ci 0XB3, 0x6E, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 132262306a36Sopenharmony_ci 0x84, 0xC9, 0XB2, 0xA7, 0XB3, 0x6E, 0x00, 0x00, 132362306a36Sopenharmony_ci 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06, 132462306a36Sopenharmony_ci 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02, 132562306a36Sopenharmony_ci 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 0x00, 0x00, 132662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0xE0, 0x4C, 0x02, 0x51, 0x02, 132762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 132862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 132962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138462306a36Sopenharmony_ci /* page 6: H2C_REMOTE_WAKE_CTRL_INFO */ 138562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144962306a36Sopenharmony_ci /* page 7: Rsvd GTK extend memory (zero memory) */ 145062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150462306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150562306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150662306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150762306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150862306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150962306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151062306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151162306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151262306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151362306a36Sopenharmony_ci 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151462306a36Sopenharmony_ci}; 151562306a36Sopenharmony_ci 151662306a36Sopenharmony_civoid rtl8812ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, 151762306a36Sopenharmony_ci bool b_dl_finished, bool dl_whole_packets) 151862306a36Sopenharmony_ci{ 151962306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 152062306a36Sopenharmony_ci struct rtl_mac *mac = rtl_mac(rtlpriv); 152162306a36Sopenharmony_ci struct sk_buff *skb = NULL; 152262306a36Sopenharmony_ci u32 totalpacketlen; 152362306a36Sopenharmony_ci bool rtstatus; 152462306a36Sopenharmony_ci u8 u1rsvdpageloc[5] = { 0 }; 152562306a36Sopenharmony_ci u8 u1rsvdpageloc2[7] = { 0 }; 152662306a36Sopenharmony_ci bool b_dlok = false; 152762306a36Sopenharmony_ci u8 *beacon; 152862306a36Sopenharmony_ci u8 *p_pspoll; 152962306a36Sopenharmony_ci u8 *nullfunc; 153062306a36Sopenharmony_ci u8 *qosnull; 153162306a36Sopenharmony_ci u8 *btqosnull; 153262306a36Sopenharmony_ci u8 *arpresp; 153362306a36Sopenharmony_ci 153462306a36Sopenharmony_ci /*--------------------------------------------------------- 153562306a36Sopenharmony_ci * (1) beacon 153662306a36Sopenharmony_ci *--------------------------------------------------------- 153762306a36Sopenharmony_ci */ 153862306a36Sopenharmony_ci beacon = &reserved_page_packet_8812[BEACON_PG * 512]; 153962306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(beacon, mac->mac_addr); 154062306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(beacon, mac->bssid); 154162306a36Sopenharmony_ci 154262306a36Sopenharmony_ci if (b_dl_finished) { 154362306a36Sopenharmony_ci totalpacketlen = 512 - 40; 154462306a36Sopenharmony_ci goto out; 154562306a36Sopenharmony_ci } 154662306a36Sopenharmony_ci /*------------------------------------------------------- 154762306a36Sopenharmony_ci * (2) ps-poll 154862306a36Sopenharmony_ci *-------------------------------------------------------- 154962306a36Sopenharmony_ci */ 155062306a36Sopenharmony_ci p_pspoll = &reserved_page_packet_8812[PSPOLL_PG * 512]; 155162306a36Sopenharmony_ci SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000)); 155262306a36Sopenharmony_ci SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid); 155362306a36Sopenharmony_ci SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr); 155462306a36Sopenharmony_ci 155562306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG); 155662306a36Sopenharmony_ci 155762306a36Sopenharmony_ci /*-------------------------------------------------------- 155862306a36Sopenharmony_ci * (3) null data 155962306a36Sopenharmony_ci *--------------------------------------------------------- 156062306a36Sopenharmony_ci */ 156162306a36Sopenharmony_ci nullfunc = &reserved_page_packet_8812[NULL_PG * 512]; 156262306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(nullfunc, mac->bssid); 156362306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr); 156462306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid); 156562306a36Sopenharmony_ci 156662306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG); 156762306a36Sopenharmony_ci 156862306a36Sopenharmony_ci /*--------------------------------------------------------- 156962306a36Sopenharmony_ci * (4) Qos null data 157062306a36Sopenharmony_ci *---------------------------------------------------------- 157162306a36Sopenharmony_ci */ 157262306a36Sopenharmony_ci qosnull = &reserved_page_packet_8812[QOSNULL_PG * 512]; 157362306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(qosnull, mac->bssid); 157462306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(qosnull, mac->mac_addr); 157562306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(qosnull, mac->bssid); 157662306a36Sopenharmony_ci 157762306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc, QOSNULL_PG); 157862306a36Sopenharmony_ci 157962306a36Sopenharmony_ci /*--------------------------------------------------------- 158062306a36Sopenharmony_ci * (5) BT Qos null data 158162306a36Sopenharmony_ci *---------------------------------------------------------- 158262306a36Sopenharmony_ci */ 158362306a36Sopenharmony_ci btqosnull = &reserved_page_packet_8812[BT_QOSNULL_PG * 512]; 158462306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(btqosnull, mac->bssid); 158562306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(btqosnull, mac->mac_addr); 158662306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(btqosnull, mac->bssid); 158762306a36Sopenharmony_ci 158862306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc, BT_QOSNULL_PG); 158962306a36Sopenharmony_ci 159062306a36Sopenharmony_ci if (!dl_whole_packets) { 159162306a36Sopenharmony_ci totalpacketlen = 512 * (BT_QOSNULL_PG + 1) - 40; 159262306a36Sopenharmony_ci goto out; 159362306a36Sopenharmony_ci } 159462306a36Sopenharmony_ci /*--------------------------------------------------------- 159562306a36Sopenharmony_ci * (6) ARP Resp 159662306a36Sopenharmony_ci *---------------------------------------------------------- 159762306a36Sopenharmony_ci */ 159862306a36Sopenharmony_ci arpresp = &reserved_page_packet_8812[ARPRESP_PG * 512]; 159962306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(arpresp, mac->bssid); 160062306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(arpresp, mac->mac_addr); 160162306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(arpresp, mac->bssid); 160262306a36Sopenharmony_ci 160362306a36Sopenharmony_ci SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2, ARPRESP_PG); 160462306a36Sopenharmony_ci 160562306a36Sopenharmony_ci /*--------------------------------------------------------- 160662306a36Sopenharmony_ci * (7) Remote Wake Ctrl 160762306a36Sopenharmony_ci *---------------------------------------------------------- 160862306a36Sopenharmony_ci */ 160962306a36Sopenharmony_ci SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2, 161062306a36Sopenharmony_ci REMOTE_PG); 161162306a36Sopenharmony_ci 161262306a36Sopenharmony_ci /*--------------------------------------------------------- 161362306a36Sopenharmony_ci * (8) GTK Ext Memory 161462306a36Sopenharmony_ci *---------------------------------------------------------- 161562306a36Sopenharmony_ci */ 161662306a36Sopenharmony_ci SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2, GTKEXT_PG); 161762306a36Sopenharmony_ci 161862306a36Sopenharmony_ci totalpacketlen = TOTAL_RESERVED_PKT_LEN_8812 - 40; 161962306a36Sopenharmony_ci 162062306a36Sopenharmony_ciout: 162162306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD, 162262306a36Sopenharmony_ci "rtl8812ae_set_fw_rsvdpagepkt(): packet data\n", 162362306a36Sopenharmony_ci &reserved_page_packet_8812[0], totalpacketlen); 162462306a36Sopenharmony_ci 162562306a36Sopenharmony_ci skb = dev_alloc_skb(totalpacketlen); 162662306a36Sopenharmony_ci if (!skb) 162762306a36Sopenharmony_ci return; 162862306a36Sopenharmony_ci skb_put_data(skb, &reserved_page_packet_8812, totalpacketlen); 162962306a36Sopenharmony_ci 163062306a36Sopenharmony_ci rtstatus = rtl_cmd_send_packet(hw, skb); 163162306a36Sopenharmony_ci 163262306a36Sopenharmony_ci if (rtstatus) 163362306a36Sopenharmony_ci b_dlok = true; 163462306a36Sopenharmony_ci 163562306a36Sopenharmony_ci if (!b_dl_finished && b_dlok) { 163662306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 163762306a36Sopenharmony_ci "H2C_RSVDPAGE:\n", u1rsvdpageloc, 5); 163862306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_RSVDPAGE, 163962306a36Sopenharmony_ci sizeof(u1rsvdpageloc), u1rsvdpageloc); 164062306a36Sopenharmony_ci if (dl_whole_packets) { 164162306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 164262306a36Sopenharmony_ci "wowlan H2C_RSVDPAGE:\n", u1rsvdpageloc2, 7); 164362306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_RSVDPAGE, 164462306a36Sopenharmony_ci sizeof(u1rsvdpageloc2), u1rsvdpageloc2); 164562306a36Sopenharmony_ci } 164662306a36Sopenharmony_ci } 164762306a36Sopenharmony_ci 164862306a36Sopenharmony_ci if (!b_dlok) 164962306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, 165062306a36Sopenharmony_ci "Set RSVD page location to Fw FAIL!!!!!!.\n"); 165162306a36Sopenharmony_ci} 165262306a36Sopenharmony_ci 165362306a36Sopenharmony_civoid rtl8821ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, 165462306a36Sopenharmony_ci bool b_dl_finished, bool dl_whole_packets) 165562306a36Sopenharmony_ci{ 165662306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 165762306a36Sopenharmony_ci struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 165862306a36Sopenharmony_ci struct sk_buff *skb = NULL; 165962306a36Sopenharmony_ci u32 totalpacketlen; 166062306a36Sopenharmony_ci bool rtstatus; 166162306a36Sopenharmony_ci u8 u1rsvdpageloc[5] = { 0 }; 166262306a36Sopenharmony_ci u8 u1rsvdpageloc2[7] = { 0 }; 166362306a36Sopenharmony_ci bool b_dlok = false; 166462306a36Sopenharmony_ci u8 *beacon; 166562306a36Sopenharmony_ci u8 *p_pspoll; 166662306a36Sopenharmony_ci u8 *nullfunc; 166762306a36Sopenharmony_ci u8 *qosnull; 166862306a36Sopenharmony_ci u8 *btqosnull; 166962306a36Sopenharmony_ci u8 *arpresp; 167062306a36Sopenharmony_ci 167162306a36Sopenharmony_ci /*--------------------------------------------------------- 167262306a36Sopenharmony_ci * (1) beacon 167362306a36Sopenharmony_ci *--------------------------------------------------------- 167462306a36Sopenharmony_ci */ 167562306a36Sopenharmony_ci beacon = &reserved_page_packet_8821[BEACON_PG * 256]; 167662306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(beacon, mac->mac_addr); 167762306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(beacon, mac->bssid); 167862306a36Sopenharmony_ci 167962306a36Sopenharmony_ci if (b_dl_finished) { 168062306a36Sopenharmony_ci totalpacketlen = 256 - 40; 168162306a36Sopenharmony_ci goto out; 168262306a36Sopenharmony_ci } 168362306a36Sopenharmony_ci /*------------------------------------------------------- 168462306a36Sopenharmony_ci * (2) ps-poll 168562306a36Sopenharmony_ci *-------------------------------------------------------- 168662306a36Sopenharmony_ci */ 168762306a36Sopenharmony_ci p_pspoll = &reserved_page_packet_8821[PSPOLL_PG * 256]; 168862306a36Sopenharmony_ci SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000)); 168962306a36Sopenharmony_ci SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid); 169062306a36Sopenharmony_ci SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr); 169162306a36Sopenharmony_ci 169262306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG); 169362306a36Sopenharmony_ci 169462306a36Sopenharmony_ci /*-------------------------------------------------------- 169562306a36Sopenharmony_ci * (3) null data 169662306a36Sopenharmony_ci *---------------------------------------------------------i 169762306a36Sopenharmony_ci */ 169862306a36Sopenharmony_ci nullfunc = &reserved_page_packet_8821[NULL_PG * 256]; 169962306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(nullfunc, mac->bssid); 170062306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr); 170162306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid); 170262306a36Sopenharmony_ci 170362306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG); 170462306a36Sopenharmony_ci 170562306a36Sopenharmony_ci /*--------------------------------------------------------- 170662306a36Sopenharmony_ci * (4) Qos null data 170762306a36Sopenharmony_ci *---------------------------------------------------------- 170862306a36Sopenharmony_ci */ 170962306a36Sopenharmony_ci qosnull = &reserved_page_packet_8821[QOSNULL_PG * 256]; 171062306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(qosnull, mac->bssid); 171162306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(qosnull, mac->mac_addr); 171262306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(qosnull, mac->bssid); 171362306a36Sopenharmony_ci 171462306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc, QOSNULL_PG); 171562306a36Sopenharmony_ci 171662306a36Sopenharmony_ci /*--------------------------------------------------------- 171762306a36Sopenharmony_ci * (5) Qos null data 171862306a36Sopenharmony_ci *---------------------------------------------------------- 171962306a36Sopenharmony_ci */ 172062306a36Sopenharmony_ci btqosnull = &reserved_page_packet_8821[BT_QOSNULL_PG * 256]; 172162306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(btqosnull, mac->bssid); 172262306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(btqosnull, mac->mac_addr); 172362306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(btqosnull, mac->bssid); 172462306a36Sopenharmony_ci 172562306a36Sopenharmony_ci SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc, BT_QOSNULL_PG); 172662306a36Sopenharmony_ci 172762306a36Sopenharmony_ci if (!dl_whole_packets) { 172862306a36Sopenharmony_ci totalpacketlen = 256 * (BT_QOSNULL_PG + 1) - 40; 172962306a36Sopenharmony_ci goto out; 173062306a36Sopenharmony_ci } 173162306a36Sopenharmony_ci /*--------------------------------------------------------- 173262306a36Sopenharmony_ci * (6) ARP Resp 173362306a36Sopenharmony_ci *---------------------------------------------------------- 173462306a36Sopenharmony_ci */ 173562306a36Sopenharmony_ci arpresp = &reserved_page_packet_8821[ARPRESP_PG * 256]; 173662306a36Sopenharmony_ci SET_80211_HDR_ADDRESS1(arpresp, mac->bssid); 173762306a36Sopenharmony_ci SET_80211_HDR_ADDRESS2(arpresp, mac->mac_addr); 173862306a36Sopenharmony_ci SET_80211_HDR_ADDRESS3(arpresp, mac->bssid); 173962306a36Sopenharmony_ci 174062306a36Sopenharmony_ci SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2, ARPRESP_PG); 174162306a36Sopenharmony_ci 174262306a36Sopenharmony_ci /*--------------------------------------------------------- 174362306a36Sopenharmony_ci * (7) Remote Wake Ctrl 174462306a36Sopenharmony_ci *---------------------------------------------------------- 174562306a36Sopenharmony_ci */ 174662306a36Sopenharmony_ci SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2, 174762306a36Sopenharmony_ci REMOTE_PG); 174862306a36Sopenharmony_ci 174962306a36Sopenharmony_ci /*--------------------------------------------------------- 175062306a36Sopenharmony_ci * (8) GTK Ext Memory 175162306a36Sopenharmony_ci *---------------------------------------------------------- 175262306a36Sopenharmony_ci */ 175362306a36Sopenharmony_ci SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2, GTKEXT_PG); 175462306a36Sopenharmony_ci 175562306a36Sopenharmony_ci totalpacketlen = TOTAL_RESERVED_PKT_LEN_8821 - 40; 175662306a36Sopenharmony_ci 175762306a36Sopenharmony_ciout: 175862306a36Sopenharmony_ci 175962306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD, 176062306a36Sopenharmony_ci "rtl8821ae_set_fw_rsvdpagepkt(): packet data\n", 176162306a36Sopenharmony_ci &reserved_page_packet_8821[0], totalpacketlen); 176262306a36Sopenharmony_ci 176362306a36Sopenharmony_ci skb = dev_alloc_skb(totalpacketlen); 176462306a36Sopenharmony_ci if (!skb) 176562306a36Sopenharmony_ci return; 176662306a36Sopenharmony_ci skb_put_data(skb, &reserved_page_packet_8821, totalpacketlen); 176762306a36Sopenharmony_ci 176862306a36Sopenharmony_ci rtstatus = rtl_cmd_send_packet(hw, skb); 176962306a36Sopenharmony_ci 177062306a36Sopenharmony_ci if (rtstatus) 177162306a36Sopenharmony_ci b_dlok = true; 177262306a36Sopenharmony_ci 177362306a36Sopenharmony_ci if (!b_dl_finished && b_dlok) { 177462306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, 177562306a36Sopenharmony_ci "Set RSVD page location to Fw.\n"); 177662306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 177762306a36Sopenharmony_ci "H2C_RSVDPAGE:\n", u1rsvdpageloc, 5); 177862306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_RSVDPAGE, 177962306a36Sopenharmony_ci sizeof(u1rsvdpageloc), u1rsvdpageloc); 178062306a36Sopenharmony_ci if (dl_whole_packets) { 178162306a36Sopenharmony_ci RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 178262306a36Sopenharmony_ci "wowlan H2C_RSVDPAGE:\n", 178362306a36Sopenharmony_ci u1rsvdpageloc2, 7); 178462306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_RSVDPAGE, 178562306a36Sopenharmony_ci sizeof(u1rsvdpageloc2), 178662306a36Sopenharmony_ci u1rsvdpageloc2); 178762306a36Sopenharmony_ci } 178862306a36Sopenharmony_ci } 178962306a36Sopenharmony_ci 179062306a36Sopenharmony_ci if (!b_dlok) { 179162306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, 179262306a36Sopenharmony_ci "Set RSVD page location to Fw FAIL!!!!!!.\n"); 179362306a36Sopenharmony_ci } 179462306a36Sopenharmony_ci} 179562306a36Sopenharmony_ci 179662306a36Sopenharmony_ci/*Should check FW support p2p or not.*/ 179762306a36Sopenharmony_cistatic void rtl8821ae_set_p2p_ctw_period_cmd(struct ieee80211_hw *hw, u8 ctwindow) 179862306a36Sopenharmony_ci{ 179962306a36Sopenharmony_ci u8 u1_ctwindow_period[1] = { ctwindow}; 180062306a36Sopenharmony_ci 180162306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_P2P_PS_CTW_CMD, 1, 180262306a36Sopenharmony_ci u1_ctwindow_period); 180362306a36Sopenharmony_ci} 180462306a36Sopenharmony_ci 180562306a36Sopenharmony_civoid rtl8821ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state) 180662306a36Sopenharmony_ci{ 180762306a36Sopenharmony_ci struct rtl_priv *rtlpriv = rtl_priv(hw); 180862306a36Sopenharmony_ci struct rtl_ps_ctl *rtlps = rtl_psc(rtl_priv(hw)); 180962306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 181062306a36Sopenharmony_ci struct rtl_p2p_ps_info *p2pinfo = &rtlps->p2p_ps_info; 181162306a36Sopenharmony_ci struct p2p_ps_offload_t *p2p_ps_offload = &rtlhal->p2p_ps_offload; 181262306a36Sopenharmony_ci u8 i; 181362306a36Sopenharmony_ci u16 ctwindow; 181462306a36Sopenharmony_ci u32 start_time, tsf_low; 181562306a36Sopenharmony_ci 181662306a36Sopenharmony_ci switch (p2p_ps_state) { 181762306a36Sopenharmony_ci case P2P_PS_DISABLE: 181862306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_DISABLE\n"); 181962306a36Sopenharmony_ci memset(p2p_ps_offload, 0, sizeof(*p2p_ps_offload)); 182062306a36Sopenharmony_ci break; 182162306a36Sopenharmony_ci case P2P_PS_ENABLE: 182262306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_ENABLE\n"); 182362306a36Sopenharmony_ci /* update CTWindow value. */ 182462306a36Sopenharmony_ci if (p2pinfo->ctwindow > 0) { 182562306a36Sopenharmony_ci p2p_ps_offload->ctwindow_en = 1; 182662306a36Sopenharmony_ci ctwindow = p2pinfo->ctwindow; 182762306a36Sopenharmony_ci rtl8821ae_set_p2p_ctw_period_cmd(hw, ctwindow); 182862306a36Sopenharmony_ci } 182962306a36Sopenharmony_ci 183062306a36Sopenharmony_ci /* hw only support 2 set of NoA */ 183162306a36Sopenharmony_ci for (i = 0 ; i < p2pinfo->noa_num ; i++) { 183262306a36Sopenharmony_ci /* To control the register setting for which NOA*/ 183362306a36Sopenharmony_ci rtl_write_byte(rtlpriv, 0x5cf, (i << 4)); 183462306a36Sopenharmony_ci if (i == 0) 183562306a36Sopenharmony_ci p2p_ps_offload->noa0_en = 1; 183662306a36Sopenharmony_ci else 183762306a36Sopenharmony_ci p2p_ps_offload->noa1_en = 1; 183862306a36Sopenharmony_ci 183962306a36Sopenharmony_ci /* config P2P NoA Descriptor Register */ 184062306a36Sopenharmony_ci rtl_write_dword(rtlpriv, 0x5E0, p2pinfo->noa_duration[i]); 184162306a36Sopenharmony_ci rtl_write_dword(rtlpriv, 0x5E4, p2pinfo->noa_interval[i]); 184262306a36Sopenharmony_ci 184362306a36Sopenharmony_ci /*Get Current TSF value */ 184462306a36Sopenharmony_ci tsf_low = rtl_read_dword(rtlpriv, REG_TSFTR); 184562306a36Sopenharmony_ci 184662306a36Sopenharmony_ci start_time = p2pinfo->noa_start_time[i]; 184762306a36Sopenharmony_ci if (p2pinfo->noa_count_type[i] != 1) { 184862306a36Sopenharmony_ci while (start_time <= (tsf_low+(50*1024))) { 184962306a36Sopenharmony_ci start_time += p2pinfo->noa_interval[i]; 185062306a36Sopenharmony_ci if (p2pinfo->noa_count_type[i] != 255) 185162306a36Sopenharmony_ci p2pinfo->noa_count_type[i]--; 185262306a36Sopenharmony_ci } 185362306a36Sopenharmony_ci } 185462306a36Sopenharmony_ci rtl_write_dword(rtlpriv, 0x5E8, start_time); 185562306a36Sopenharmony_ci rtl_write_dword(rtlpriv, 0x5EC, 185662306a36Sopenharmony_ci p2pinfo->noa_count_type[i]); 185762306a36Sopenharmony_ci } 185862306a36Sopenharmony_ci 185962306a36Sopenharmony_ci if ((p2pinfo->opp_ps == 1) || (p2pinfo->noa_num > 0)) { 186062306a36Sopenharmony_ci /* rst p2p circuit */ 186162306a36Sopenharmony_ci rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, BIT(4)); 186262306a36Sopenharmony_ci 186362306a36Sopenharmony_ci p2p_ps_offload->offload_en = 1; 186462306a36Sopenharmony_ci 186562306a36Sopenharmony_ci if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) { 186662306a36Sopenharmony_ci p2p_ps_offload->role = 1; 186762306a36Sopenharmony_ci p2p_ps_offload->allstasleep = 0; 186862306a36Sopenharmony_ci } else { 186962306a36Sopenharmony_ci p2p_ps_offload->role = 0; 187062306a36Sopenharmony_ci } 187162306a36Sopenharmony_ci 187262306a36Sopenharmony_ci p2p_ps_offload->discovery = 0; 187362306a36Sopenharmony_ci } 187462306a36Sopenharmony_ci break; 187562306a36Sopenharmony_ci case P2P_PS_SCAN: 187662306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN\n"); 187762306a36Sopenharmony_ci p2p_ps_offload->discovery = 1; 187862306a36Sopenharmony_ci break; 187962306a36Sopenharmony_ci case P2P_PS_SCAN_DONE: 188062306a36Sopenharmony_ci rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN_DONE\n"); 188162306a36Sopenharmony_ci p2p_ps_offload->discovery = 0; 188262306a36Sopenharmony_ci p2pinfo->p2p_ps_state = P2P_PS_ENABLE; 188362306a36Sopenharmony_ci break; 188462306a36Sopenharmony_ci default: 188562306a36Sopenharmony_ci break; 188662306a36Sopenharmony_ci } 188762306a36Sopenharmony_ci 188862306a36Sopenharmony_ci rtl8821ae_fill_h2c_cmd(hw, 188962306a36Sopenharmony_ci H2C_8821AE_P2P_PS_OFFLOAD, 1, (u8 *)p2p_ps_offload); 189062306a36Sopenharmony_ci} 189162306a36Sopenharmony_ci 189262306a36Sopenharmony_civoid rtl8821ae_c2h_ra_report_handler(struct ieee80211_hw *hw, 189362306a36Sopenharmony_ci u8 *cmd_buf, u8 cmd_len) 189462306a36Sopenharmony_ci{ 189562306a36Sopenharmony_ci struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 189662306a36Sopenharmony_ci u8 rate = cmd_buf[0] & 0x3F; 189762306a36Sopenharmony_ci 189862306a36Sopenharmony_ci rtlhal->current_ra_rate = rtl8821ae_hw_rate_to_mrate(hw, rate); 189962306a36Sopenharmony_ci 190062306a36Sopenharmony_ci rtl8821ae_dm_update_init_rate(hw, rate); 190162306a36Sopenharmony_ci} 1902