18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/* Copyright(c) 2009-2010  Realtek Corporation.*/
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#include "../wifi.h"
58c2ecf20Sopenharmony_ci#include "../pci.h"
68c2ecf20Sopenharmony_ci#include "../base.h"
78c2ecf20Sopenharmony_ci#include "../core.h"
88c2ecf20Sopenharmony_ci#include "../efuse.h"
98c2ecf20Sopenharmony_ci#include "reg.h"
108c2ecf20Sopenharmony_ci#include "def.h"
118c2ecf20Sopenharmony_ci#include "fw.h"
128c2ecf20Sopenharmony_ci#include "dm.h"
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cistatic void _rtl8821ae_enable_fw_download(struct ieee80211_hw *hw, bool enable)
158c2ecf20Sopenharmony_ci{
168c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
178c2ecf20Sopenharmony_ci	u8 tmp;
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	if (enable) {
208c2ecf20Sopenharmony_ci		rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x05);
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci		tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL + 2);
238c2ecf20Sopenharmony_ci		rtl_write_byte(rtlpriv, REG_MCUFWDL + 2, tmp & 0xf7);
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci		tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
268c2ecf20Sopenharmony_ci	} else {
278c2ecf20Sopenharmony_ci		tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
288c2ecf20Sopenharmony_ci		rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp & 0xfe);
298c2ecf20Sopenharmony_ci		tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
308c2ecf20Sopenharmony_ci	}
318c2ecf20Sopenharmony_ci}
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistatic void _rtl8821ae_write_fw(struct ieee80211_hw *hw,
348c2ecf20Sopenharmony_ci				enum version_8821ae version,
358c2ecf20Sopenharmony_ci				u8 *buffer, u32 size)
368c2ecf20Sopenharmony_ci{
378c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
388c2ecf20Sopenharmony_ci	u8 *bufferptr = (u8 *)buffer;
398c2ecf20Sopenharmony_ci	u32 pagenums, remainsize;
408c2ecf20Sopenharmony_ci	u32 page, offset;
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "FW size is %d bytes,\n", size);
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci	rtl_fill_dummy(bufferptr, &size);
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci	pagenums = size / FW_8821AE_PAGE_SIZE;
478c2ecf20Sopenharmony_ci	remainsize = size % FW_8821AE_PAGE_SIZE;
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci	if (pagenums > 8)
508c2ecf20Sopenharmony_ci		pr_err("Page numbers should not greater then 8\n");
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci	for (page = 0; page < pagenums; page++) {
538c2ecf20Sopenharmony_ci		offset = page * FW_8821AE_PAGE_SIZE;
548c2ecf20Sopenharmony_ci		rtl_fw_page_write(hw, page, (bufferptr + offset),
558c2ecf20Sopenharmony_ci				  FW_8821AE_PAGE_SIZE);
568c2ecf20Sopenharmony_ci	}
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci	if (remainsize) {
598c2ecf20Sopenharmony_ci		offset = pagenums * FW_8821AE_PAGE_SIZE;
608c2ecf20Sopenharmony_ci		page = pagenums;
618c2ecf20Sopenharmony_ci		rtl_fw_page_write(hw, page, (bufferptr + offset), remainsize);
628c2ecf20Sopenharmony_ci	}
638c2ecf20Sopenharmony_ci}
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_cistatic int _rtl8821ae_fw_free_to_go(struct ieee80211_hw *hw)
668c2ecf20Sopenharmony_ci{
678c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
688c2ecf20Sopenharmony_ci	int err = -EIO;
698c2ecf20Sopenharmony_ci	u32 counter = 0;
708c2ecf20Sopenharmony_ci	u32 value32;
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci	do {
738c2ecf20Sopenharmony_ci		value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
748c2ecf20Sopenharmony_ci	} while ((counter++ < FW_8821AE_POLLING_TIMEOUT_COUNT) &&
758c2ecf20Sopenharmony_ci		 (!(value32 & FWDL_CHKSUM_RPT)));
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci	if (counter >= FW_8821AE_POLLING_TIMEOUT_COUNT) {
788c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
798c2ecf20Sopenharmony_ci			"chksum report fail! REG_MCUFWDL:0x%08x .\n",
808c2ecf20Sopenharmony_ci			value32);
818c2ecf20Sopenharmony_ci		goto exit;
828c2ecf20Sopenharmony_ci	}
838c2ecf20Sopenharmony_ci	value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
848c2ecf20Sopenharmony_ci	value32 |= MCUFWDL_RDY;
858c2ecf20Sopenharmony_ci	value32 &= ~WINTINI_RDY;
868c2ecf20Sopenharmony_ci	rtl_write_dword(rtlpriv, REG_MCUFWDL, value32);
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci	rtl8821ae_firmware_selfreset(hw);
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci	counter = 0;
918c2ecf20Sopenharmony_ci	do {
928c2ecf20Sopenharmony_ci		value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
938c2ecf20Sopenharmony_ci		if (value32 & WINTINI_RDY)
948c2ecf20Sopenharmony_ci			return 0;
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ci		udelay(FW_8821AE_POLLING_DELAY);
978c2ecf20Sopenharmony_ci	} while (counter++ < FW_8821AE_POLLING_TIMEOUT_COUNT);
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_ci	pr_err("Polling FW ready fail!! REG_MCUFWDL:0x%08x .\n",
1008c2ecf20Sopenharmony_ci	       value32);
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ciexit:
1038c2ecf20Sopenharmony_ci	return err;
1048c2ecf20Sopenharmony_ci}
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_cistatic void _rtl8821ae_wait_for_h2c_cmd_finish(struct rtl_priv *rtlpriv)
1078c2ecf20Sopenharmony_ci{
1088c2ecf20Sopenharmony_ci	u8 val;
1098c2ecf20Sopenharmony_ci	u16 count = 0;
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_ci	do {
1128c2ecf20Sopenharmony_ci		val = rtl_read_byte(rtlpriv, REG_HMETFR);
1138c2ecf20Sopenharmony_ci		mdelay(1);
1148c2ecf20Sopenharmony_ci		count++;
1158c2ecf20Sopenharmony_ci	} while ((val & 0x0F) && (count < 1000));
1168c2ecf20Sopenharmony_ci}
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ciint rtl8821ae_download_fw(struct ieee80211_hw *hw, bool buse_wake_on_wlan_fw)
1198c2ecf20Sopenharmony_ci{
1208c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
1218c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1228c2ecf20Sopenharmony_ci	struct rtlwifi_firmware_header *pfwheader;
1238c2ecf20Sopenharmony_ci	u8 *pfwdata;
1248c2ecf20Sopenharmony_ci	u32 fwsize;
1258c2ecf20Sopenharmony_ci	int err;
1268c2ecf20Sopenharmony_ci	bool support_remote_wakeup;
1278c2ecf20Sopenharmony_ci	enum version_8821ae version = rtlhal->version;
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci	rtlpriv->cfg->ops->get_hw_reg(hw, HAL_DEF_WOWLAN,
1308c2ecf20Sopenharmony_ci				      (u8 *)(&support_remote_wakeup));
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci	if (support_remote_wakeup)
1338c2ecf20Sopenharmony_ci		_rtl8821ae_wait_for_h2c_cmd_finish(rtlpriv);
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci	if (buse_wake_on_wlan_fw) {
1368c2ecf20Sopenharmony_ci		if (!rtlhal->wowlan_firmware)
1378c2ecf20Sopenharmony_ci			return 1;
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci		pfwheader =
1408c2ecf20Sopenharmony_ci		  (struct rtlwifi_firmware_header *)rtlhal->wowlan_firmware;
1418c2ecf20Sopenharmony_ci		rtlhal->fw_version = le16_to_cpu(pfwheader->version);
1428c2ecf20Sopenharmony_ci		rtlhal->fw_subversion = pfwheader->subversion;
1438c2ecf20Sopenharmony_ci		pfwdata = (u8 *)rtlhal->wowlan_firmware;
1448c2ecf20Sopenharmony_ci		fwsize = rtlhal->wowlan_fwsize;
1458c2ecf20Sopenharmony_ci	} else {
1468c2ecf20Sopenharmony_ci		if (!rtlhal->pfirmware)
1478c2ecf20Sopenharmony_ci			return 1;
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci		pfwheader =
1508c2ecf20Sopenharmony_ci		  (struct rtlwifi_firmware_header *)rtlhal->pfirmware;
1518c2ecf20Sopenharmony_ci		rtlhal->fw_version = le16_to_cpu(pfwheader->version);
1528c2ecf20Sopenharmony_ci		rtlhal->fw_subversion = pfwheader->subversion;
1538c2ecf20Sopenharmony_ci		pfwdata = (u8 *)rtlhal->pfirmware;
1548c2ecf20Sopenharmony_ci		fwsize = rtlhal->fwsize;
1558c2ecf20Sopenharmony_ci	}
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
1588c2ecf20Sopenharmony_ci		"%s Firmware SIZE %d\n",
1598c2ecf20Sopenharmony_ci		buse_wake_on_wlan_fw ? "Wowlan" : "Normal", fwsize);
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_ci	if (IS_FW_HEADER_EXIST_8812(pfwheader) ||
1628c2ecf20Sopenharmony_ci	    IS_FW_HEADER_EXIST_8821(pfwheader)) {
1638c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
1648c2ecf20Sopenharmony_ci			"Firmware Version(%d), Signature(%#x)\n",
1658c2ecf20Sopenharmony_ci			pfwheader->version, pfwheader->signature);
1668c2ecf20Sopenharmony_ci
1678c2ecf20Sopenharmony_ci		pfwdata = pfwdata + sizeof(struct rtlwifi_firmware_header);
1688c2ecf20Sopenharmony_ci		fwsize = fwsize - sizeof(struct rtlwifi_firmware_header);
1698c2ecf20Sopenharmony_ci	}
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ci	if (rtlhal->mac_func_enable) {
1728c2ecf20Sopenharmony_ci		if (rtl_read_byte(rtlpriv, REG_MCUFWDL) & BIT(7)) {
1738c2ecf20Sopenharmony_ci			rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
1748c2ecf20Sopenharmony_ci			rtl8821ae_firmware_selfreset(hw);
1758c2ecf20Sopenharmony_ci		}
1768c2ecf20Sopenharmony_ci	}
1778c2ecf20Sopenharmony_ci	_rtl8821ae_enable_fw_download(hw, true);
1788c2ecf20Sopenharmony_ci	_rtl8821ae_write_fw(hw, version, pfwdata, fwsize);
1798c2ecf20Sopenharmony_ci	_rtl8821ae_enable_fw_download(hw, false);
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_ci	err = _rtl8821ae_fw_free_to_go(hw);
1828c2ecf20Sopenharmony_ci	if (err) {
1838c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG,
1848c2ecf20Sopenharmony_ci			"Firmware is not ready to run!\n");
1858c2ecf20Sopenharmony_ci	} else {
1868c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD,
1878c2ecf20Sopenharmony_ci			"Firmware is ready to run!\n");
1888c2ecf20Sopenharmony_ci	}
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ci	return 0;
1918c2ecf20Sopenharmony_ci}
1928c2ecf20Sopenharmony_ci
1938c2ecf20Sopenharmony_ci#if (USE_SPECIFIC_FW_TO_SUPPORT_WOWLAN == 1)
1948c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_related_for_wowlan(struct ieee80211_hw *hw,
1958c2ecf20Sopenharmony_ci					 bool used_wowlan_fw)
1968c2ecf20Sopenharmony_ci{
1978c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
1988c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
1998c2ecf20Sopenharmony_ci	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
2008c2ecf20Sopenharmony_ci	/* 1. Before WoWLAN or After WOWLAN we need to re-download Fw. */
2018c2ecf20Sopenharmony_ci	if (rtl8821ae_download_fw(hw, used_wowlan_fw)) {
2028c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
2038c2ecf20Sopenharmony_ci			"Re-Download Firmware failed!!\n");
2048c2ecf20Sopenharmony_ci		rtlhal->fw_ready = false;
2058c2ecf20Sopenharmony_ci		return;
2068c2ecf20Sopenharmony_ci	}
2078c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
2088c2ecf20Sopenharmony_ci		"Re-Download Firmware Success !!\n");
2098c2ecf20Sopenharmony_ci	rtlhal->fw_ready = true;
2108c2ecf20Sopenharmony_ci
2118c2ecf20Sopenharmony_ci	/* 2. Re-Init the variables about Fw related setting. */
2128c2ecf20Sopenharmony_ci	ppsc->fw_current_inpsmode = false;
2138c2ecf20Sopenharmony_ci	rtlhal->fw_ps_state = FW_PS_STATE_ALL_ON_8821AE;
2148c2ecf20Sopenharmony_ci	rtlhal->fw_clk_change_in_progress = false;
2158c2ecf20Sopenharmony_ci	rtlhal->allow_sw_to_change_hwclc = false;
2168c2ecf20Sopenharmony_ci	rtlhal->last_hmeboxnum = 0;
2178c2ecf20Sopenharmony_ci}
2188c2ecf20Sopenharmony_ci#endif
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_cistatic bool _rtl8821ae_check_fw_read_last_h2c(struct ieee80211_hw *hw,
2218c2ecf20Sopenharmony_ci					      u8 boxnum)
2228c2ecf20Sopenharmony_ci{
2238c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
2248c2ecf20Sopenharmony_ci	u8 val_hmetfr;
2258c2ecf20Sopenharmony_ci	bool result = false;
2268c2ecf20Sopenharmony_ci
2278c2ecf20Sopenharmony_ci	val_hmetfr = rtl_read_byte(rtlpriv, REG_HMETFR);
2288c2ecf20Sopenharmony_ci	if (((val_hmetfr >> boxnum) & BIT(0)) == 0)
2298c2ecf20Sopenharmony_ci		result = true;
2308c2ecf20Sopenharmony_ci	return result;
2318c2ecf20Sopenharmony_ci}
2328c2ecf20Sopenharmony_ci
2338c2ecf20Sopenharmony_cistatic void _rtl8821ae_fill_h2c_command(struct ieee80211_hw *hw,
2348c2ecf20Sopenharmony_ci					u8 element_id, u32 cmd_len,
2358c2ecf20Sopenharmony_ci					u8 *cmdbuffer)
2368c2ecf20Sopenharmony_ci{
2378c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
2388c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
2398c2ecf20Sopenharmony_ci	u8 boxnum = 0;
2408c2ecf20Sopenharmony_ci	u16 box_reg = 0, box_extreg = 0;
2418c2ecf20Sopenharmony_ci	u8 u1b_tmp = 0;
2428c2ecf20Sopenharmony_ci	bool isfw_read = false;
2438c2ecf20Sopenharmony_ci	u8 buf_index = 0;
2448c2ecf20Sopenharmony_ci	bool bwrite_sucess = false;
2458c2ecf20Sopenharmony_ci	u8 wait_h2c_limmit = 100;
2468c2ecf20Sopenharmony_ci	/*u8 wait_writeh2c_limmit = 100;*/
2478c2ecf20Sopenharmony_ci	u8 boxcontent[4], boxextcontent[4];
2488c2ecf20Sopenharmony_ci	u32 h2c_waitcounter = 0;
2498c2ecf20Sopenharmony_ci	unsigned long flag = 0;
2508c2ecf20Sopenharmony_ci	u8 idx = 0;
2518c2ecf20Sopenharmony_ci
2528c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "come in\n");
2538c2ecf20Sopenharmony_ci
2548c2ecf20Sopenharmony_ci	while (true) {
2558c2ecf20Sopenharmony_ci		spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
2568c2ecf20Sopenharmony_ci		if (rtlhal->h2c_setinprogress) {
2578c2ecf20Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
2588c2ecf20Sopenharmony_ci				"H2C set in progress! Wait to set..element_id(%d).\n",
2598c2ecf20Sopenharmony_ci				element_id);
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_ci			while (rtlhal->h2c_setinprogress) {
2628c2ecf20Sopenharmony_ci				spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock,
2638c2ecf20Sopenharmony_ci						       flag);
2648c2ecf20Sopenharmony_ci				h2c_waitcounter++;
2658c2ecf20Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
2668c2ecf20Sopenharmony_ci					"Wait 100 us (%d times)...\n",
2678c2ecf20Sopenharmony_ci					h2c_waitcounter);
2688c2ecf20Sopenharmony_ci				udelay(100);
2698c2ecf20Sopenharmony_ci
2708c2ecf20Sopenharmony_ci				if (h2c_waitcounter > 1000)
2718c2ecf20Sopenharmony_ci					return;
2728c2ecf20Sopenharmony_ci				spin_lock_irqsave(&rtlpriv->locks.h2c_lock,
2738c2ecf20Sopenharmony_ci						  flag);
2748c2ecf20Sopenharmony_ci			}
2758c2ecf20Sopenharmony_ci			spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
2768c2ecf20Sopenharmony_ci		} else {
2778c2ecf20Sopenharmony_ci			rtlhal->h2c_setinprogress = true;
2788c2ecf20Sopenharmony_ci			spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
2798c2ecf20Sopenharmony_ci			break;
2808c2ecf20Sopenharmony_ci		}
2818c2ecf20Sopenharmony_ci	}
2828c2ecf20Sopenharmony_ci
2838c2ecf20Sopenharmony_ci	while (!bwrite_sucess) {
2848c2ecf20Sopenharmony_ci		boxnum = rtlhal->last_hmeboxnum;
2858c2ecf20Sopenharmony_ci		switch (boxnum) {
2868c2ecf20Sopenharmony_ci		case 0:
2878c2ecf20Sopenharmony_ci			box_reg = REG_HMEBOX_0;
2888c2ecf20Sopenharmony_ci			box_extreg = REG_HMEBOX_EXT_0;
2898c2ecf20Sopenharmony_ci			break;
2908c2ecf20Sopenharmony_ci		case 1:
2918c2ecf20Sopenharmony_ci			box_reg = REG_HMEBOX_1;
2928c2ecf20Sopenharmony_ci			box_extreg = REG_HMEBOX_EXT_1;
2938c2ecf20Sopenharmony_ci			break;
2948c2ecf20Sopenharmony_ci		case 2:
2958c2ecf20Sopenharmony_ci			box_reg = REG_HMEBOX_2;
2968c2ecf20Sopenharmony_ci			box_extreg = REG_HMEBOX_EXT_2;
2978c2ecf20Sopenharmony_ci			break;
2988c2ecf20Sopenharmony_ci		case 3:
2998c2ecf20Sopenharmony_ci			box_reg = REG_HMEBOX_3;
3008c2ecf20Sopenharmony_ci			box_extreg = REG_HMEBOX_EXT_3;
3018c2ecf20Sopenharmony_ci			break;
3028c2ecf20Sopenharmony_ci		default:
3038c2ecf20Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
3048c2ecf20Sopenharmony_ci				"switch case %#x not processed\n", boxnum);
3058c2ecf20Sopenharmony_ci			break;
3068c2ecf20Sopenharmony_ci		}
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ci		isfw_read = false;
3098c2ecf20Sopenharmony_ci		u1b_tmp = rtl_read_byte(rtlpriv, REG_CR);
3108c2ecf20Sopenharmony_ci
3118c2ecf20Sopenharmony_ci		if (u1b_tmp != 0xEA) {
3128c2ecf20Sopenharmony_ci			isfw_read = true;
3138c2ecf20Sopenharmony_ci		} else {
3148c2ecf20Sopenharmony_ci			if (rtl_read_byte(rtlpriv, REG_TXDMA_STATUS) == 0xEA ||
3158c2ecf20Sopenharmony_ci			    rtl_read_byte(rtlpriv, REG_TXPKT_EMPTY) == 0xEA)
3168c2ecf20Sopenharmony_ci				rtl_write_byte(rtlpriv, REG_SYS_CFG1 + 3, 0xFF);
3178c2ecf20Sopenharmony_ci		}
3188c2ecf20Sopenharmony_ci
3198c2ecf20Sopenharmony_ci		if (isfw_read) {
3208c2ecf20Sopenharmony_ci			wait_h2c_limmit = 100;
3218c2ecf20Sopenharmony_ci			isfw_read =
3228c2ecf20Sopenharmony_ci			  _rtl8821ae_check_fw_read_last_h2c(hw, boxnum);
3238c2ecf20Sopenharmony_ci			while (!isfw_read) {
3248c2ecf20Sopenharmony_ci				/*wait until Fw read*/
3258c2ecf20Sopenharmony_ci				wait_h2c_limmit--;
3268c2ecf20Sopenharmony_ci				if (wait_h2c_limmit == 0) {
3278c2ecf20Sopenharmony_ci					rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
3288c2ecf20Sopenharmony_ci						"Waiting too long for FW read clear HMEBox(%d)!\n",
3298c2ecf20Sopenharmony_ci						boxnum);
3308c2ecf20Sopenharmony_ci					break;
3318c2ecf20Sopenharmony_ci				}
3328c2ecf20Sopenharmony_ci
3338c2ecf20Sopenharmony_ci				udelay(10);
3348c2ecf20Sopenharmony_ci
3358c2ecf20Sopenharmony_ci				isfw_read =
3368c2ecf20Sopenharmony_ci				  _rtl8821ae_check_fw_read_last_h2c(hw, boxnum);
3378c2ecf20Sopenharmony_ci				u1b_tmp = rtl_read_byte(rtlpriv, 0x130);
3388c2ecf20Sopenharmony_ci				rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
3398c2ecf20Sopenharmony_ci					"Waiting for FW read clear HMEBox(%d)!!! 0x130 = %2x\n",
3408c2ecf20Sopenharmony_ci					boxnum, u1b_tmp);
3418c2ecf20Sopenharmony_ci			}
3428c2ecf20Sopenharmony_ci		}
3438c2ecf20Sopenharmony_ci
3448c2ecf20Sopenharmony_ci		if (!isfw_read) {
3458c2ecf20Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
3468c2ecf20Sopenharmony_ci				"Write H2C register BOX[%d] fail!!!!! Fw do not read.\n",
3478c2ecf20Sopenharmony_ci				boxnum);
3488c2ecf20Sopenharmony_ci			break;
3498c2ecf20Sopenharmony_ci		}
3508c2ecf20Sopenharmony_ci
3518c2ecf20Sopenharmony_ci		memset(boxcontent, 0, sizeof(boxcontent));
3528c2ecf20Sopenharmony_ci		memset(boxextcontent, 0, sizeof(boxextcontent));
3538c2ecf20Sopenharmony_ci		boxcontent[0] = element_id;
3548c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
3558c2ecf20Sopenharmony_ci			"Write element_id box_reg(%4x) = %2x\n",
3568c2ecf20Sopenharmony_ci			box_reg, element_id);
3578c2ecf20Sopenharmony_ci
3588c2ecf20Sopenharmony_ci		switch (cmd_len) {
3598c2ecf20Sopenharmony_ci		case 1:
3608c2ecf20Sopenharmony_ci		case 2:
3618c2ecf20Sopenharmony_ci		case 3:
3628c2ecf20Sopenharmony_ci			/*boxcontent[0] &= ~(BIT(7));*/
3638c2ecf20Sopenharmony_ci			memcpy((u8 *)(boxcontent) + 1,
3648c2ecf20Sopenharmony_ci			       cmdbuffer + buf_index, cmd_len);
3658c2ecf20Sopenharmony_ci
3668c2ecf20Sopenharmony_ci			for (idx = 0; idx < 4; idx++) {
3678c2ecf20Sopenharmony_ci				rtl_write_byte(rtlpriv, box_reg + idx,
3688c2ecf20Sopenharmony_ci					       boxcontent[idx]);
3698c2ecf20Sopenharmony_ci			}
3708c2ecf20Sopenharmony_ci			break;
3718c2ecf20Sopenharmony_ci		case 4:
3728c2ecf20Sopenharmony_ci		case 5:
3738c2ecf20Sopenharmony_ci		case 6:
3748c2ecf20Sopenharmony_ci		case 7:
3758c2ecf20Sopenharmony_ci			/*boxcontent[0] |= (BIT(7));*/
3768c2ecf20Sopenharmony_ci			memcpy((u8 *)(boxextcontent),
3778c2ecf20Sopenharmony_ci			       cmdbuffer + buf_index+3, cmd_len-3);
3788c2ecf20Sopenharmony_ci			memcpy((u8 *)(boxcontent) + 1,
3798c2ecf20Sopenharmony_ci			       cmdbuffer + buf_index, 3);
3808c2ecf20Sopenharmony_ci
3818c2ecf20Sopenharmony_ci			for (idx = 0; idx < 4; idx++) {
3828c2ecf20Sopenharmony_ci				rtl_write_byte(rtlpriv, box_extreg + idx,
3838c2ecf20Sopenharmony_ci					       boxextcontent[idx]);
3848c2ecf20Sopenharmony_ci			}
3858c2ecf20Sopenharmony_ci
3868c2ecf20Sopenharmony_ci			for (idx = 0; idx < 4; idx++) {
3878c2ecf20Sopenharmony_ci				rtl_write_byte(rtlpriv, box_reg + idx,
3888c2ecf20Sopenharmony_ci					       boxcontent[idx]);
3898c2ecf20Sopenharmony_ci			}
3908c2ecf20Sopenharmony_ci			break;
3918c2ecf20Sopenharmony_ci		default:
3928c2ecf20Sopenharmony_ci			rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
3938c2ecf20Sopenharmony_ci				"switch case %#x not processed\n", cmd_len);
3948c2ecf20Sopenharmony_ci			break;
3958c2ecf20Sopenharmony_ci		}
3968c2ecf20Sopenharmony_ci
3978c2ecf20Sopenharmony_ci		bwrite_sucess = true;
3988c2ecf20Sopenharmony_ci
3998c2ecf20Sopenharmony_ci		rtlhal->last_hmeboxnum = boxnum + 1;
4008c2ecf20Sopenharmony_ci		if (rtlhal->last_hmeboxnum == 4)
4018c2ecf20Sopenharmony_ci			rtlhal->last_hmeboxnum = 0;
4028c2ecf20Sopenharmony_ci
4038c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
4048c2ecf20Sopenharmony_ci			"pHalData->last_hmeboxnum  = %d\n",
4058c2ecf20Sopenharmony_ci			rtlhal->last_hmeboxnum);
4068c2ecf20Sopenharmony_ci	}
4078c2ecf20Sopenharmony_ci
4088c2ecf20Sopenharmony_ci	spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
4098c2ecf20Sopenharmony_ci	rtlhal->h2c_setinprogress = false;
4108c2ecf20Sopenharmony_ci	spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
4118c2ecf20Sopenharmony_ci
4128c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "go out\n");
4138c2ecf20Sopenharmony_ci}
4148c2ecf20Sopenharmony_ci
4158c2ecf20Sopenharmony_civoid rtl8821ae_fill_h2c_cmd(struct ieee80211_hw *hw,
4168c2ecf20Sopenharmony_ci			    u8 element_id, u32 cmd_len, u8 *cmdbuffer)
4178c2ecf20Sopenharmony_ci{
4188c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
4198c2ecf20Sopenharmony_ci	u32 tmp_cmdbuf[2];
4208c2ecf20Sopenharmony_ci
4218c2ecf20Sopenharmony_ci	if (!rtlhal->fw_ready) {
4228c2ecf20Sopenharmony_ci		WARN_ONCE(true,
4238c2ecf20Sopenharmony_ci			  "rtl8821ae: error H2C cmd because of Fw download fail!!!\n");
4248c2ecf20Sopenharmony_ci		return;
4258c2ecf20Sopenharmony_ci	}
4268c2ecf20Sopenharmony_ci
4278c2ecf20Sopenharmony_ci	memset(tmp_cmdbuf, 0, 8);
4288c2ecf20Sopenharmony_ci	memcpy(tmp_cmdbuf, cmdbuffer, cmd_len);
4298c2ecf20Sopenharmony_ci	_rtl8821ae_fill_h2c_command(hw, element_id, cmd_len, (u8 *)&tmp_cmdbuf);
4308c2ecf20Sopenharmony_ci}
4318c2ecf20Sopenharmony_ci
4328c2ecf20Sopenharmony_civoid rtl8821ae_firmware_selfreset(struct ieee80211_hw *hw)
4338c2ecf20Sopenharmony_ci{
4348c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
4358c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
4368c2ecf20Sopenharmony_ci	u8 u1b_tmp;
4378c2ecf20Sopenharmony_ci
4388c2ecf20Sopenharmony_ci	if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) {
4398c2ecf20Sopenharmony_ci		u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
4408c2ecf20Sopenharmony_ci		rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(3))));
4418c2ecf20Sopenharmony_ci	} else {
4428c2ecf20Sopenharmony_ci		u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
4438c2ecf20Sopenharmony_ci		rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp & (~BIT(0))));
4448c2ecf20Sopenharmony_ci	}
4458c2ecf20Sopenharmony_ci
4468c2ecf20Sopenharmony_ci	u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN+1);
4478c2ecf20Sopenharmony_ci	rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp & (~BIT(2))));
4488c2ecf20Sopenharmony_ci	udelay(50);
4498c2ecf20Sopenharmony_ci
4508c2ecf20Sopenharmony_ci	if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) {
4518c2ecf20Sopenharmony_ci		u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
4528c2ecf20Sopenharmony_ci		rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp | BIT(3)));
4538c2ecf20Sopenharmony_ci	} else {
4548c2ecf20Sopenharmony_ci		u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL+1);
4558c2ecf20Sopenharmony_ci		rtl_write_byte(rtlpriv, REG_RSV_CTRL+1, (u1b_tmp | BIT(0)));
4568c2ecf20Sopenharmony_ci	}
4578c2ecf20Sopenharmony_ci
4588c2ecf20Sopenharmony_ci	u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN+1);
4598c2ecf20Sopenharmony_ci	rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN+1, (u1b_tmp | BIT(2)));
4608c2ecf20Sopenharmony_ci
4618c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
4628c2ecf20Sopenharmony_ci		"_8051Reset8812ae(): 8051 reset success .\n");
4638c2ecf20Sopenharmony_ci}
4648c2ecf20Sopenharmony_ci
4658c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
4668c2ecf20Sopenharmony_ci{
4678c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
4688c2ecf20Sopenharmony_ci	u8 u1_h2c_set_pwrmode[H2C_8821AE_PWEMODE_LENGTH] = { 0 };
4698c2ecf20Sopenharmony_ci	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
4708c2ecf20Sopenharmony_ci	u8 rlbm, power_state = 0, byte5 = 0;
4718c2ecf20Sopenharmony_ci	u8 awake_intvl;	/* DTIM = (awake_intvl - 1) */
4728c2ecf20Sopenharmony_ci	struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops;
4738c2ecf20Sopenharmony_ci	bool bt_ctrl_lps = (rtlpriv->cfg->ops->get_btc_status() ?
4748c2ecf20Sopenharmony_ci			    btc_ops->btc_is_bt_ctrl_lps(rtlpriv) : false);
4758c2ecf20Sopenharmony_ci	bool bt_lps_on = (rtlpriv->cfg->ops->get_btc_status() ?
4768c2ecf20Sopenharmony_ci			  btc_ops->btc_is_bt_lps_on(rtlpriv) : false);
4778c2ecf20Sopenharmony_ci
4788c2ecf20Sopenharmony_ci	if (bt_ctrl_lps)
4798c2ecf20Sopenharmony_ci		mode = (bt_lps_on ? FW_PS_MIN_MODE : FW_PS_ACTIVE_MODE);
4808c2ecf20Sopenharmony_ci
4818c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_POWER, DBG_DMESG, "FW LPS mode = %d (coex:%d)\n",
4828c2ecf20Sopenharmony_ci		mode, bt_ctrl_lps);
4838c2ecf20Sopenharmony_ci
4848c2ecf20Sopenharmony_ci	switch (mode) {
4858c2ecf20Sopenharmony_ci	case FW_PS_MIN_MODE:
4868c2ecf20Sopenharmony_ci		rlbm = 0;
4878c2ecf20Sopenharmony_ci		awake_intvl = 2;
4888c2ecf20Sopenharmony_ci		break;
4898c2ecf20Sopenharmony_ci	case FW_PS_MAX_MODE:
4908c2ecf20Sopenharmony_ci		rlbm = 1;
4918c2ecf20Sopenharmony_ci		awake_intvl = 2;
4928c2ecf20Sopenharmony_ci		break;
4938c2ecf20Sopenharmony_ci	case FW_PS_DTIM_MODE:
4948c2ecf20Sopenharmony_ci		rlbm = 2;
4958c2ecf20Sopenharmony_ci		awake_intvl = ppsc->reg_max_lps_awakeintvl;
4968c2ecf20Sopenharmony_ci		/* hw->conf.ps_dtim_period or mac->vif->bss_conf.dtim_period
4978c2ecf20Sopenharmony_ci		 * is only used in swlps.
4988c2ecf20Sopenharmony_ci		 */
4998c2ecf20Sopenharmony_ci		break;
5008c2ecf20Sopenharmony_ci	default:
5018c2ecf20Sopenharmony_ci		rlbm = 2;
5028c2ecf20Sopenharmony_ci		awake_intvl = 4;
5038c2ecf20Sopenharmony_ci		break;
5048c2ecf20Sopenharmony_ci	}
5058c2ecf20Sopenharmony_ci
5068c2ecf20Sopenharmony_ci	if (rtlpriv->mac80211.p2p) {
5078c2ecf20Sopenharmony_ci		awake_intvl = 2;
5088c2ecf20Sopenharmony_ci		rlbm = 1;
5098c2ecf20Sopenharmony_ci	}
5108c2ecf20Sopenharmony_ci
5118c2ecf20Sopenharmony_ci	if (mode == FW_PS_ACTIVE_MODE) {
5128c2ecf20Sopenharmony_ci		byte5 = 0x40;
5138c2ecf20Sopenharmony_ci		power_state = FW_PWR_STATE_ACTIVE;
5148c2ecf20Sopenharmony_ci	} else {
5158c2ecf20Sopenharmony_ci		if (bt_ctrl_lps) {
5168c2ecf20Sopenharmony_ci			byte5 = btc_ops->btc_get_lps_val(rtlpriv);
5178c2ecf20Sopenharmony_ci			power_state = btc_ops->btc_get_rpwm_val(rtlpriv);
5188c2ecf20Sopenharmony_ci
5198c2ecf20Sopenharmony_ci			if ((rlbm == 2) && (byte5 & BIT(4))) {
5208c2ecf20Sopenharmony_ci				/* Keep awake interval to 1 to prevent from
5218c2ecf20Sopenharmony_ci				 * decreasing coex performance
5228c2ecf20Sopenharmony_ci				 */
5238c2ecf20Sopenharmony_ci				awake_intvl = 2;
5248c2ecf20Sopenharmony_ci				rlbm = 2;
5258c2ecf20Sopenharmony_ci			}
5268c2ecf20Sopenharmony_ci		} else {
5278c2ecf20Sopenharmony_ci			byte5 = 0x40;
5288c2ecf20Sopenharmony_ci			power_state = FW_PWR_STATE_RF_OFF;
5298c2ecf20Sopenharmony_ci		}
5308c2ecf20Sopenharmony_ci	}
5318c2ecf20Sopenharmony_ci
5328c2ecf20Sopenharmony_ci	SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, ((mode) ? 1 : 0));
5338c2ecf20Sopenharmony_ci	SET_H2CCMD_PWRMODE_PARM_RLBM(u1_h2c_set_pwrmode, rlbm);
5348c2ecf20Sopenharmony_ci	SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode,
5358c2ecf20Sopenharmony_ci					 bt_ctrl_lps ? 0 :
5368c2ecf20Sopenharmony_ci					 ((rtlpriv->mac80211.p2p) ?
5378c2ecf20Sopenharmony_ci					  ppsc->smart_ps : 1));
5388c2ecf20Sopenharmony_ci	SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(u1_h2c_set_pwrmode,
5398c2ecf20Sopenharmony_ci					       awake_intvl);
5408c2ecf20Sopenharmony_ci	SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1_h2c_set_pwrmode, 0);
5418c2ecf20Sopenharmony_ci	SET_H2CCMD_PWRMODE_PARM_PWR_STATE(u1_h2c_set_pwrmode, power_state);
5428c2ecf20Sopenharmony_ci	SET_H2CCMD_PWRMODE_PARM_BYTE5(u1_h2c_set_pwrmode, byte5);
5438c2ecf20Sopenharmony_ci
5448c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
5458c2ecf20Sopenharmony_ci		      "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
5468c2ecf20Sopenharmony_ci		      u1_h2c_set_pwrmode, H2C_8821AE_PWEMODE_LENGTH);
5478c2ecf20Sopenharmony_ci	if (rtlpriv->cfg->ops->get_btc_status())
5488c2ecf20Sopenharmony_ci		btc_ops->btc_record_pwr_mode(rtlpriv, u1_h2c_set_pwrmode,
5498c2ecf20Sopenharmony_ci					     H2C_8821AE_PWEMODE_LENGTH);
5508c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_SETPWRMODE,
5518c2ecf20Sopenharmony_ci			       H2C_8821AE_PWEMODE_LENGTH,
5528c2ecf20Sopenharmony_ci			       u1_h2c_set_pwrmode);
5538c2ecf20Sopenharmony_ci}
5548c2ecf20Sopenharmony_ci
5558c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_media_status_rpt_cmd(struct ieee80211_hw *hw,
5568c2ecf20Sopenharmony_ci					   u8 mstatus)
5578c2ecf20Sopenharmony_ci{
5588c2ecf20Sopenharmony_ci	u8 parm[3] = { 0, 0, 0 };
5598c2ecf20Sopenharmony_ci	/* parm[0]: bit0=0-->Disconnect, bit0=1-->Connect
5608c2ecf20Sopenharmony_ci	 *          bit1=0-->update Media Status to MACID
5618c2ecf20Sopenharmony_ci	 *          bit1=1-->update Media Status from MACID to MACID_End
5628c2ecf20Sopenharmony_ci	 * parm[1]: MACID, if this is INFRA_STA, MacID = 0
5638c2ecf20Sopenharmony_ci	 * parm[2]: MACID_End
5648c2ecf20Sopenharmony_ci	 */
5658c2ecf20Sopenharmony_ci
5668c2ecf20Sopenharmony_ci	SET_H2CCMD_MSRRPT_PARM_OPMODE(parm, mstatus);
5678c2ecf20Sopenharmony_ci	SET_H2CCMD_MSRRPT_PARM_MACID_IND(parm, 0);
5688c2ecf20Sopenharmony_ci
5698c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_MSRRPT, 3, parm);
5708c2ecf20Sopenharmony_ci}
5718c2ecf20Sopenharmony_ci
5728c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw,
5738c2ecf20Sopenharmony_ci				      u8 ap_offload_enable)
5748c2ecf20Sopenharmony_ci{
5758c2ecf20Sopenharmony_ci	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
5768c2ecf20Sopenharmony_ci	u8 u1_apoffload_parm[H2C_8821AE_AP_OFFLOAD_LENGTH] = { 0 };
5778c2ecf20Sopenharmony_ci
5788c2ecf20Sopenharmony_ci	SET_H2CCMD_AP_OFFLOAD_ON(u1_apoffload_parm, ap_offload_enable);
5798c2ecf20Sopenharmony_ci	SET_H2CCMD_AP_OFFLOAD_HIDDEN(u1_apoffload_parm, mac->hiddenssid);
5808c2ecf20Sopenharmony_ci	SET_H2CCMD_AP_OFFLOAD_DENYANY(u1_apoffload_parm, 0);
5818c2ecf20Sopenharmony_ci
5828c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AP_OFFLOAD,
5838c2ecf20Sopenharmony_ci			       H2C_8821AE_AP_OFFLOAD_LENGTH,
5848c2ecf20Sopenharmony_ci			       u1_apoffload_parm);
5858c2ecf20Sopenharmony_ci}
5868c2ecf20Sopenharmony_ci
5878c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_wowlan_mode(struct ieee80211_hw *hw, bool func_en)
5888c2ecf20Sopenharmony_ci{
5898c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
5908c2ecf20Sopenharmony_ci	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
5918c2ecf20Sopenharmony_ci	u8 fw_wowlan_info[H2C_8821AE_WOWLAN_LENGTH] = {0};
5928c2ecf20Sopenharmony_ci
5938c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, "enable(%d)\n", func_en);
5948c2ecf20Sopenharmony_ci
5958c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_FUNC_ENABLE(fw_wowlan_info,
5968c2ecf20Sopenharmony_ci					   (func_en ? true : false));
5978c2ecf20Sopenharmony_ci
5988c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(fw_wowlan_info,
5998c2ecf20Sopenharmony_ci		((ppsc->wo_wlan_mode & WAKE_ON_PATTERN_MATCH) ? 1 : 0));
6008c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(fw_wowlan_info,
6018c2ecf20Sopenharmony_ci		((ppsc->wo_wlan_mode & WAKE_ON_MAGIC_PACKET) ? 1 : 0));
6028c2ecf20Sopenharmony_ci
6038c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(fw_wowlan_info, 0);
6048c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_ALL_PKT_DROP(fw_wowlan_info, false);
6058c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_GPIO_ACTIVE(fw_wowlan_info, 0);
6068c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(fw_wowlan_info, 1);
6078c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_GPIONUM(fw_wowlan_info, 0);
6088c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_WOWLAN_GPIO_DURATION(fw_wowlan_info, 0);
6098c2ecf20Sopenharmony_ci
6108c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_DMESG,
6118c2ecf20Sopenharmony_ci		      "wowlan mode: cmd 0x80: Content:\n",
6128c2ecf20Sopenharmony_ci		      fw_wowlan_info, H2C_8821AE_WOWLAN_LENGTH);
6138c2ecf20Sopenharmony_ci
6148c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_WO_WLAN,
6158c2ecf20Sopenharmony_ci			       H2C_8821AE_WOWLAN_LENGTH,
6168c2ecf20Sopenharmony_ci			       fw_wowlan_info);
6178c2ecf20Sopenharmony_ci}
6188c2ecf20Sopenharmony_ci
6198c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_remote_wake_ctrl_cmd(struct ieee80211_hw *hw,
6208c2ecf20Sopenharmony_ci					   u8 enable)
6218c2ecf20Sopenharmony_ci{
6228c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
6238c2ecf20Sopenharmony_ci	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
6248c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
6258c2ecf20Sopenharmony_ci	u8 remote_wake_ctrl_parm[H2C_8821AE_REMOTE_WAKE_CTRL_LEN] = {0};
6268c2ecf20Sopenharmony_ci
6278c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD,
6288c2ecf20Sopenharmony_ci		"enable=%d, ARP offload=%d, GTK offload=%d\n",
6298c2ecf20Sopenharmony_ci		enable, ppsc->arp_offload_enable, ppsc->gtk_offload_enable);
6308c2ecf20Sopenharmony_ci
6318c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_REMOTE_WAKECTRL_ENABLE(remote_wake_ctrl_parm, enable);
6328c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(remote_wake_ctrl_parm,
6338c2ecf20Sopenharmony_ci					(ppsc->arp_offload_enable ? 1 : 0));
6348c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(remote_wake_ctrl_parm,
6358c2ecf20Sopenharmony_ci					(ppsc->gtk_offload_enable ? 1 : 0));
6368c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_REMOTE_WAKE_CTRL_REALWOWV2_EN(remote_wake_ctrl_parm,
6378c2ecf20Sopenharmony_ci					(rtlhal->real_wow_v2_enable ? 1 : 0));
6388c2ecf20Sopenharmony_ci
6398c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE,
6408c2ecf20Sopenharmony_ci		      "remote_wake_ctrl: cmd 0x4: Content:\n",
6418c2ecf20Sopenharmony_ci		      remote_wake_ctrl_parm, H2C_8821AE_REMOTE_WAKE_CTRL_LEN);
6428c2ecf20Sopenharmony_ci
6438c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_REMOTE_WAKE_CTRL,
6448c2ecf20Sopenharmony_ci			       H2C_8821AE_REMOTE_WAKE_CTRL_LEN,
6458c2ecf20Sopenharmony_ci			       remote_wake_ctrl_parm);
6468c2ecf20Sopenharmony_ci}
6478c2ecf20Sopenharmony_ci
6488c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_keep_alive_cmd(struct ieee80211_hw *hw,
6498c2ecf20Sopenharmony_ci				     bool func_en)
6508c2ecf20Sopenharmony_ci{
6518c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
6528c2ecf20Sopenharmony_ci	u8 keep_alive_info[H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH] = {0};
6538c2ecf20Sopenharmony_ci
6548c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, "Enable(%d)\n", func_en);
6558c2ecf20Sopenharmony_ci
6568c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_KEEP_ALIVE_ENABLE(keep_alive_info, func_en);
6578c2ecf20Sopenharmony_ci	/* 1: the period is controled by driver, 0: by Fw default */
6588c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(keep_alive_info, 1);
6598c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_KEEP_ALIVE_PERIOD(keep_alive_info, 10); /* 10 sec */
6608c2ecf20Sopenharmony_ci
6618c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE,
6628c2ecf20Sopenharmony_ci		      "keep alive: cmd 0x3: Content:\n",
6638c2ecf20Sopenharmony_ci		      keep_alive_info, H2C_8821AE_KEEP_ALIVE_CTRL);
6648c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_KEEP_ALIVE_CTRL,
6658c2ecf20Sopenharmony_ci			       H2C_8821AE_KEEP_ALIVE_CTRL_LENGTH,
6668c2ecf20Sopenharmony_ci			       keep_alive_info);
6678c2ecf20Sopenharmony_ci}
6688c2ecf20Sopenharmony_ci
6698c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_disconnect_decision_ctrl_cmd(struct ieee80211_hw *hw,
6708c2ecf20Sopenharmony_ci						   bool enabled)
6718c2ecf20Sopenharmony_ci{
6728c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
6738c2ecf20Sopenharmony_ci	u8 parm[H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN] = {0};
6748c2ecf20Sopenharmony_ci
6758c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_ENABLE(parm, enabled);
6768c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_USER_SETTING(parm, 1);
6778c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_CHECK_PERIOD(parm, 30);
6788c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(parm, 3);
6798c2ecf20Sopenharmony_ci
6808c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_POWER, DBG_TRACE,
6818c2ecf20Sopenharmony_ci		      "disconnect_decision_ctrl: cmd 0x4: Content:\n",
6828c2ecf20Sopenharmony_ci		      parm, H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN);
6838c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_DISCONNECT_DECISION,
6848c2ecf20Sopenharmony_ci			       H2C_8821AE_DISCONNECT_DECISION_CTRL_LEN, parm);
6858c2ecf20Sopenharmony_ci}
6868c2ecf20Sopenharmony_ci
6878c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_global_info_cmd(struct ieee80211_hw *hw)
6888c2ecf20Sopenharmony_ci{
6898c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
6908c2ecf20Sopenharmony_ci	struct rtl_security *sec = &rtlpriv->sec;
6918c2ecf20Sopenharmony_ci	u8 remote_wakeup_sec_info[H2C_8821AE_AOAC_GLOBAL_INFO_LEN] = {0};
6928c2ecf20Sopenharmony_ci
6938c2ecf20Sopenharmony_ci	rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD,
6948c2ecf20Sopenharmony_ci		"PairwiseEncAlgorithm=%d, GroupEncAlgorithm=%d\n",
6958c2ecf20Sopenharmony_ci		sec->pairwise_enc_algorithm, sec->group_enc_algorithm);
6968c2ecf20Sopenharmony_ci
6978c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(
6988c2ecf20Sopenharmony_ci						remote_wakeup_sec_info,
6998c2ecf20Sopenharmony_ci						sec->pairwise_enc_algorithm);
7008c2ecf20Sopenharmony_ci	SET_8812_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(remote_wakeup_sec_info,
7018c2ecf20Sopenharmony_ci						      sec->group_enc_algorithm);
7028c2ecf20Sopenharmony_ci
7038c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_GLOBAL_INFO,
7048c2ecf20Sopenharmony_ci			       H2C_8821AE_AOAC_GLOBAL_INFO_LEN,
7058c2ecf20Sopenharmony_ci			       remote_wakeup_sec_info);
7068c2ecf20Sopenharmony_ci
7078c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_TRACE,
7088c2ecf20Sopenharmony_ci		      "rtl8821ae_set_global_info: cmd 0x82:\n",
7098c2ecf20Sopenharmony_ci		      remote_wakeup_sec_info, H2C_8821AE_AOAC_GLOBAL_INFO_LEN);
7108c2ecf20Sopenharmony_ci}
7118c2ecf20Sopenharmony_ci
7128c2ecf20Sopenharmony_ci#define BEACON_PG		0
7138c2ecf20Sopenharmony_ci#define PSPOLL_PG		1
7148c2ecf20Sopenharmony_ci#define NULL_PG			2
7158c2ecf20Sopenharmony_ci#define QOSNULL_PG		3
7168c2ecf20Sopenharmony_ci#define BT_QOSNULL_PG	4
7178c2ecf20Sopenharmony_ci#define ARPRESP_PG		5
7188c2ecf20Sopenharmony_ci#define REMOTE_PG		6
7198c2ecf20Sopenharmony_ci#define GTKEXT_PG		7
7208c2ecf20Sopenharmony_ci
7218c2ecf20Sopenharmony_ci#define TOTAL_RESERVED_PKT_LEN_8812	4096
7228c2ecf20Sopenharmony_ci#define TOTAL_RESERVED_PKT_LEN_8821	2048
7238c2ecf20Sopenharmony_ci
7248c2ecf20Sopenharmony_cistatic u8 reserved_page_packet_8821[TOTAL_RESERVED_PKT_LEN_8821] = {
7258c2ecf20Sopenharmony_ci	/* page 0: beacon */
7268c2ecf20Sopenharmony_ci	0x80, 0x00, 0x00, 0x00,  0xff, 0xff, 0xff, 0xff,
7278c2ecf20Sopenharmony_ci	0xff, 0xff, 0x00, 0xe0,  0x4c, 0x02, 0xe2, 0x64,
7288c2ecf20Sopenharmony_ci	0x40, 0x16, 0x9f, 0x23,  0xd4, 0x46, 0x20, 0x00,
7298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7308c2ecf20Sopenharmony_ci	0x64, 0x00, 0x20, 0x04,  0x00, 0x06, 0x64, 0x6c,
7318c2ecf20Sopenharmony_ci	0x69, 0x6e, 0x6b, 0x31,  0x01, 0x08, 0x82, 0x84,
7328c2ecf20Sopenharmony_ci	0x8b, 0x96, 0x0c, 0x18,  0x30, 0x48, 0x03, 0x01,
7338c2ecf20Sopenharmony_ci	0x0b, 0x06, 0x02, 0x00,  0x00, 0x2a, 0x01, 0x8b,
7348c2ecf20Sopenharmony_ci	0x32, 0x04, 0x12, 0x24,  0x60, 0x6c, 0x00, 0x00,
7358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7488c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7498c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7528c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7538c2ecf20Sopenharmony_ci	0x10, 0x00, 0x28, 0x8c,  0x00, 0x12, 0x00, 0x00,
7548c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x81, 0x00, 0x00,
7558c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7568c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7578c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7588c2ecf20Sopenharmony_ci	/* page 1: ps-poll */
7598c2ecf20Sopenharmony_ci	0xa4, 0x10, 0x01, 0xc0,  0x40, 0x16, 0x9f, 0x23,
7608c2ecf20Sopenharmony_ci	0xd4, 0x46, 0x00, 0xe0,  0x4c, 0x02, 0xe2, 0x64,
7618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7838c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7848c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7858c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7868c2ecf20Sopenharmony_ci	0x18, 0x00, 0x28, 0x8c,  0x00, 0x12, 0x00, 0x00,
7878c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x01, 0x00, 0x00,
7888c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7898c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7908c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7918c2ecf20Sopenharmony_ci	/* page 2: null data */
7928c2ecf20Sopenharmony_ci	0x48, 0x01, 0x00, 0x00,  0x40, 0x16, 0x9f, 0x23,
7938c2ecf20Sopenharmony_ci	0xd4, 0x46, 0x00, 0xe0,  0x4c, 0x02, 0xe2, 0x64,
7948c2ecf20Sopenharmony_ci	0x40, 0x16, 0x9f, 0x23,  0xd4, 0x46, 0x00, 0x00,
7958c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7968c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7978c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7988c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
7998c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8008c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8028c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8038c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8068c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8078c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8138c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8148c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8158c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8168c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8178c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8188c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8198c2ecf20Sopenharmony_ci	0x1A, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
8208c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x01, 0x00, 0x00,
8218c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8228c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8238c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8248c2ecf20Sopenharmony_ci	/* page 3: qos null data */
8258c2ecf20Sopenharmony_ci	0xC8, 0x01, 0x00, 0x00,  0x84, 0xC9, 0XB2, 0xA7,
8268c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
8278c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x00, 0x00,
8288c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8308c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8318c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8328c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8338c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8348c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8488c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8498c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8528c2ecf20Sopenharmony_ci	0x1A, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
8538c2ecf20Sopenharmony_ci	0x00, 0x00, 0x80, 0x00,  0x00, 0x01, 0x00, 0x00,
8548c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8558c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8568c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8578c2ecf20Sopenharmony_ci	/* page 4: BT qos null data */
8588c2ecf20Sopenharmony_ci	0xC8, 0x01, 0x00, 0x00,  0x84, 0xC9, 0XB2, 0xA7,
8598c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
8608c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x00, 0x00,
8618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8838c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8848c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8858c2ecf20Sopenharmony_ci	0x3C, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
8868c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x01, 0x00, 0x00,
8878c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8888c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8898c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
8908c2ecf20Sopenharmony_ci	/* page 5~7 is for wowlan */
8918c2ecf20Sopenharmony_ci	/* page 5: ARP resp */
8928c2ecf20Sopenharmony_ci	0x08, 0x01, 0x00, 0x00,  0x84, 0xC9, 0XB2, 0xA7,
8938c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
8948c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x00, 0x00,
8958c2ecf20Sopenharmony_ci	0xAA, 0xAA, 0x03, 0x00,  0x00, 0x00, 0x08, 0x06,
8968c2ecf20Sopenharmony_ci	0x00, 0x01, 0x08, 0x00,  0x06, 0x04, 0x00, 0x02,
8978c2ecf20Sopenharmony_ci	0x00, 0xE0, 0x4C, 0x02,  0x51, 0x02, 0x00, 0x00,
8988c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
8998c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9008c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9028c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9038c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9068c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9078c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9138c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9148c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9158c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9168c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9178c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9188c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9198c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9208c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9218c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9228c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9238c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9248c2ecf20Sopenharmony_ci	/* page 6: H2C_REMOTE_WAKE_CTRL_INFO */
9258c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9268c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9278c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9288c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9308c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9318c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9328c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9338c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9348c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9488c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9498c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9528c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9538c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9548c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9558c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9568c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9578c2ecf20Sopenharmony_ci	/* page 7: Rsvd GTK extend memory (zero memory) */
9588c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9598c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9608c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9838c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9848c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9858c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9868c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9878c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9888c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9898c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9908c2ecf20Sopenharmony_ci};
9918c2ecf20Sopenharmony_ci
9928c2ecf20Sopenharmony_cistatic u8 reserved_page_packet_8812[TOTAL_RESERVED_PKT_LEN_8812] = {
9938c2ecf20Sopenharmony_ci	/* page 0: beacon */
9948c2ecf20Sopenharmony_ci	0x80, 0x00, 0x00, 0x00,  0xFF, 0xFF, 0xFF, 0xFF,
9958c2ecf20Sopenharmony_ci	0xFF, 0xFF, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
9968c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x60, 0x00,
9978c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
9988c2ecf20Sopenharmony_ci	0x64, 0x00, 0x20, 0x04,  0x00, 0x03, 0x32, 0x31,
9998c2ecf20Sopenharmony_ci	0x35, 0x01, 0x08, 0x82,  0x84, 0x8B, 0x96, 0x0C,
10008c2ecf20Sopenharmony_ci	0x12, 0x18, 0x24, 0x03,  0x01, 0x01, 0x06, 0x02,
10018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x2A, 0x01,  0x02, 0x32, 0x04, 0x30,
10028c2ecf20Sopenharmony_ci	0x48, 0x60, 0x6C, 0x2D,  0x1A, 0xED, 0x09, 0x03,
10038c2ecf20Sopenharmony_ci	0xFF, 0xFF, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x3D,
10068c2ecf20Sopenharmony_ci	0x00, 0xDD, 0x07, 0x00,  0xE0, 0x4C, 0x02, 0x02,
10078c2ecf20Sopenharmony_ci	0x08, 0x04, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10138c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10148c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10158c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10168c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10178c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10188c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10198c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10208c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10218c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10228c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10238c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10248c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10258c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10268c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10278c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10288c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10308c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10318c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10328c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10338c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10348c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10488c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10498c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10528c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10538c2ecf20Sopenharmony_ci	0x10, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
10548c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x81, 0x00, 0x00,
10558c2ecf20Sopenharmony_ci	0x04, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10568c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10578c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10588c2ecf20Sopenharmony_ci	/* page 1: ps-poll */
10598c2ecf20Sopenharmony_ci	0xA4, 0x10, 0x09, 0xC0,  0x84, 0xC9, 0XB2, 0xA7,
10608c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
10618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10838c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10848c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10858c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10868c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10878c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10888c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10898c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10908c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10918c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10928c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10938c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10948c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10958c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10968c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10978c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10988c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
10998c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11008c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11028c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11038c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11068c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11078c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11138c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11148c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11158c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11168c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11178c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11188c2ecf20Sopenharmony_ci	0x18, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
11198c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x01, 0x00, 0x00,
11208c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11218c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11228c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11238c2ecf20Sopenharmony_ci	/* page 2: null data */
11248c2ecf20Sopenharmony_ci	0x48, 0x01, 0x00, 0x00,  0x84, 0xC9, 0XB2, 0xA7,
11258c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
11268c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x00, 0x00,
11278c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11288c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11308c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11318c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11328c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11338c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11348c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11488c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11498c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11528c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11538c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11548c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11558c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11568c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11578c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11588c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11598c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11608c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11838c2ecf20Sopenharmony_ci	0x1A, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
11848c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x01, 0x00, 0x00,
11858c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11868c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11878c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11888c2ecf20Sopenharmony_ci	/* page 3: Qos null data */
11898c2ecf20Sopenharmony_ci	0xC8, 0x01, 0x00, 0x00,  0x84, 0xC9, 0XB2, 0xA7,
11908c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
11918c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x00, 0x00,
11928c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11938c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11948c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11958c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11968c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11978c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11988c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
11998c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12008c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12028c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12038c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12068c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12078c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12138c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12148c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12158c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12168c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12178c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12188c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12198c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12208c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12218c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12228c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12238c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12248c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12258c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12268c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12278c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12288c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12308c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12318c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12328c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12338c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12348c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12488c2ecf20Sopenharmony_ci	0x1A, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
12498c2ecf20Sopenharmony_ci	0x00, 0x00, 0x80, 0x00,  0x00, 0x01, 0x00, 0x00,
12508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12528c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12538c2ecf20Sopenharmony_ci	/* page 4: BT Qos null data */
12548c2ecf20Sopenharmony_ci	0xC8, 0x01, 0x00, 0x00,  0x84, 0xC9, 0XB2, 0xA7,
12558c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
12568c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x00, 0x00,
12578c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12588c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12598c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12608c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12838c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12848c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12858c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12868c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12878c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12888c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12898c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12908c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12918c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12928c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12938c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12948c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12958c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12968c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12978c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12988c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
12998c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13008c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13028c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13038c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13068c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13078c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13138c2ecf20Sopenharmony_ci	0x3C, 0x00, 0x28, 0x8C,  0x00, 0x12, 0x00, 0x00,
13148c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x01, 0x00, 0x00,
13158c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13168c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13178c2ecf20Sopenharmony_ci	0x00, 0x80, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13188c2ecf20Sopenharmony_ci	/* page 5~7 is for wowlan */
13198c2ecf20Sopenharmony_ci	/* page 5: ARP resp */
13208c2ecf20Sopenharmony_ci	0x08, 0x01, 0x00, 0x00,  0x84, 0xC9, 0XB2, 0xA7,
13218c2ecf20Sopenharmony_ci	0XB3, 0x6E, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
13228c2ecf20Sopenharmony_ci	0x84, 0xC9, 0XB2, 0xA7,  0XB3, 0x6E, 0x00, 0x00,
13238c2ecf20Sopenharmony_ci	0xAA, 0xAA, 0x03, 0x00,  0x00, 0x00, 0x08, 0x06,
13248c2ecf20Sopenharmony_ci	0x00, 0x01, 0x08, 0x00,  0x06, 0x04, 0x00, 0x02,
13258c2ecf20Sopenharmony_ci	0x00, 0xE0, 0x4C, 0x02,  0x51, 0x02, 0x00, 0x00,
13268c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0xE0,  0x4C, 0x02, 0x51, 0x02,
13278c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13288c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13308c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13318c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13328c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13338c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13348c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13488c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13498c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13528c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13538c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13548c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13558c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13568c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13578c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13588c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13598c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13608c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13838c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13848c2ecf20Sopenharmony_ci	/* page 6: H2C_REMOTE_WAKE_CTRL_INFO */
13858c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13868c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13878c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13888c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13898c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13908c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13918c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13928c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13938c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13948c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13958c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13968c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13978c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13988c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
13998c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14008c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14028c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14038c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14068c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14078c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14138c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14148c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14158c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14168c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14178c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14188c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14198c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14208c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14218c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14228c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14238c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14248c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14258c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14268c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14278c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14288c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14298c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14308c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14318c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14328c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14338c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14348c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14358c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14368c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14378c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14388c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14398c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14408c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14418c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14428c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14438c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14448c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14458c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14468c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14478c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14488c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14498c2ecf20Sopenharmony_ci	/* page 7: Rsvd GTK extend memory (zero memory) */
14508c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14518c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14528c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14538c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14548c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14558c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14568c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14578c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14588c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14598c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14608c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14618c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14628c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14638c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14648c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14658c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14668c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14678c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14688c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14698c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14708c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14718c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14728c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14738c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14748c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14758c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14768c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14778c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14788c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14798c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14808c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14818c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14828c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14838c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14848c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14858c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14868c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14878c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14888c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14898c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14908c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14918c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14928c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14938c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14948c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14958c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14968c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14978c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14988c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
14998c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15008c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15018c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15028c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15038c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15048c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15058c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15068c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15078c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15088c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15098c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15108c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15118c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15128c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15138c2ecf20Sopenharmony_ci	0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
15148c2ecf20Sopenharmony_ci};
15158c2ecf20Sopenharmony_ci
15168c2ecf20Sopenharmony_civoid rtl8812ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
15178c2ecf20Sopenharmony_ci				  bool b_dl_finished, bool dl_whole_packets)
15188c2ecf20Sopenharmony_ci{
15198c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
15208c2ecf20Sopenharmony_ci	struct rtl_mac *mac = rtl_mac(rtlpriv);
15218c2ecf20Sopenharmony_ci	struct sk_buff *skb = NULL;
15228c2ecf20Sopenharmony_ci	u32 totalpacketlen;
15238c2ecf20Sopenharmony_ci	bool rtstatus;
15248c2ecf20Sopenharmony_ci	u8 u1rsvdpageloc[5] = { 0 };
15258c2ecf20Sopenharmony_ci	u8 u1rsvdpageloc2[7] = { 0 };
15268c2ecf20Sopenharmony_ci	bool b_dlok = false;
15278c2ecf20Sopenharmony_ci	u8 *beacon;
15288c2ecf20Sopenharmony_ci	u8 *p_pspoll;
15298c2ecf20Sopenharmony_ci	u8 *nullfunc;
15308c2ecf20Sopenharmony_ci	u8 *qosnull;
15318c2ecf20Sopenharmony_ci	u8 *btqosnull;
15328c2ecf20Sopenharmony_ci	u8 *arpresp;
15338c2ecf20Sopenharmony_ci
15348c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
15358c2ecf20Sopenharmony_ci	 *			(1) beacon
15368c2ecf20Sopenharmony_ci	 *---------------------------------------------------------
15378c2ecf20Sopenharmony_ci	 */
15388c2ecf20Sopenharmony_ci	beacon = &reserved_page_packet_8812[BEACON_PG * 512];
15398c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(beacon, mac->mac_addr);
15408c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(beacon, mac->bssid);
15418c2ecf20Sopenharmony_ci
15428c2ecf20Sopenharmony_ci	if (b_dl_finished) {
15438c2ecf20Sopenharmony_ci		totalpacketlen = 512 - 40;
15448c2ecf20Sopenharmony_ci		goto out;
15458c2ecf20Sopenharmony_ci	}
15468c2ecf20Sopenharmony_ci	/*-------------------------------------------------------
15478c2ecf20Sopenharmony_ci	 *			(2) ps-poll
15488c2ecf20Sopenharmony_ci	 *--------------------------------------------------------
15498c2ecf20Sopenharmony_ci	 */
15508c2ecf20Sopenharmony_ci	p_pspoll = &reserved_page_packet_8812[PSPOLL_PG * 512];
15518c2ecf20Sopenharmony_ci	SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000));
15528c2ecf20Sopenharmony_ci	SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid);
15538c2ecf20Sopenharmony_ci	SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr);
15548c2ecf20Sopenharmony_ci
15558c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG);
15568c2ecf20Sopenharmony_ci
15578c2ecf20Sopenharmony_ci	/*--------------------------------------------------------
15588c2ecf20Sopenharmony_ci	 *			(3) null data
15598c2ecf20Sopenharmony_ci	 *---------------------------------------------------------
15608c2ecf20Sopenharmony_ci	 */
15618c2ecf20Sopenharmony_ci	nullfunc = &reserved_page_packet_8812[NULL_PG * 512];
15628c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(nullfunc, mac->bssid);
15638c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr);
15648c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid);
15658c2ecf20Sopenharmony_ci
15668c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG);
15678c2ecf20Sopenharmony_ci
15688c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
15698c2ecf20Sopenharmony_ci	 *			(4) Qos null data
15708c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
15718c2ecf20Sopenharmony_ci	 */
15728c2ecf20Sopenharmony_ci	qosnull = &reserved_page_packet_8812[QOSNULL_PG * 512];
15738c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(qosnull, mac->bssid);
15748c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(qosnull, mac->mac_addr);
15758c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(qosnull, mac->bssid);
15768c2ecf20Sopenharmony_ci
15778c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc, QOSNULL_PG);
15788c2ecf20Sopenharmony_ci
15798c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
15808c2ecf20Sopenharmony_ci	 *			(5) BT Qos null data
15818c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
15828c2ecf20Sopenharmony_ci	 */
15838c2ecf20Sopenharmony_ci	btqosnull = &reserved_page_packet_8812[BT_QOSNULL_PG * 512];
15848c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(btqosnull, mac->bssid);
15858c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(btqosnull, mac->mac_addr);
15868c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(btqosnull, mac->bssid);
15878c2ecf20Sopenharmony_ci
15888c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc, BT_QOSNULL_PG);
15898c2ecf20Sopenharmony_ci
15908c2ecf20Sopenharmony_ci	if (!dl_whole_packets) {
15918c2ecf20Sopenharmony_ci		totalpacketlen = 512 * (BT_QOSNULL_PG + 1) - 40;
15928c2ecf20Sopenharmony_ci		goto out;
15938c2ecf20Sopenharmony_ci	}
15948c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
15958c2ecf20Sopenharmony_ci	 *			(6) ARP Resp
15968c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
15978c2ecf20Sopenharmony_ci	 */
15988c2ecf20Sopenharmony_ci	arpresp = &reserved_page_packet_8812[ARPRESP_PG * 512];
15998c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(arpresp, mac->bssid);
16008c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(arpresp, mac->mac_addr);
16018c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(arpresp, mac->bssid);
16028c2ecf20Sopenharmony_ci
16038c2ecf20Sopenharmony_ci	SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2, ARPRESP_PG);
16048c2ecf20Sopenharmony_ci
16058c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
16068c2ecf20Sopenharmony_ci	 *			(7) Remote Wake Ctrl
16078c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
16088c2ecf20Sopenharmony_ci	 */
16098c2ecf20Sopenharmony_ci	SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2,
16108c2ecf20Sopenharmony_ci								REMOTE_PG);
16118c2ecf20Sopenharmony_ci
16128c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
16138c2ecf20Sopenharmony_ci	 *			(8) GTK Ext Memory
16148c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
16158c2ecf20Sopenharmony_ci	 */
16168c2ecf20Sopenharmony_ci	SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2, GTKEXT_PG);
16178c2ecf20Sopenharmony_ci
16188c2ecf20Sopenharmony_ci	totalpacketlen = TOTAL_RESERVED_PKT_LEN_8812 - 40;
16198c2ecf20Sopenharmony_ci
16208c2ecf20Sopenharmony_ciout:
16218c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
16228c2ecf20Sopenharmony_ci		      "rtl8812ae_set_fw_rsvdpagepkt(): packet data\n",
16238c2ecf20Sopenharmony_ci		      &reserved_page_packet_8812[0], totalpacketlen);
16248c2ecf20Sopenharmony_ci
16258c2ecf20Sopenharmony_ci	skb = dev_alloc_skb(totalpacketlen);
16268c2ecf20Sopenharmony_ci	if (!skb)
16278c2ecf20Sopenharmony_ci		return;
16288c2ecf20Sopenharmony_ci	skb_put_data(skb, &reserved_page_packet_8812, totalpacketlen);
16298c2ecf20Sopenharmony_ci
16308c2ecf20Sopenharmony_ci	rtstatus = rtl_cmd_send_packet(hw, skb);
16318c2ecf20Sopenharmony_ci
16328c2ecf20Sopenharmony_ci	if (rtstatus)
16338c2ecf20Sopenharmony_ci		b_dlok = true;
16348c2ecf20Sopenharmony_ci
16358c2ecf20Sopenharmony_ci	if (!b_dl_finished && b_dlok) {
16368c2ecf20Sopenharmony_ci		RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
16378c2ecf20Sopenharmony_ci			      "H2C_RSVDPAGE:\n", u1rsvdpageloc, 5);
16388c2ecf20Sopenharmony_ci		rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_RSVDPAGE,
16398c2ecf20Sopenharmony_ci				       sizeof(u1rsvdpageloc), u1rsvdpageloc);
16408c2ecf20Sopenharmony_ci		if (dl_whole_packets) {
16418c2ecf20Sopenharmony_ci			RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
16428c2ecf20Sopenharmony_ci				      "wowlan H2C_RSVDPAGE:\n", u1rsvdpageloc2, 7);
16438c2ecf20Sopenharmony_ci			rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_RSVDPAGE,
16448c2ecf20Sopenharmony_ci					       sizeof(u1rsvdpageloc2), u1rsvdpageloc2);
16458c2ecf20Sopenharmony_ci		}
16468c2ecf20Sopenharmony_ci	}
16478c2ecf20Sopenharmony_ci
16488c2ecf20Sopenharmony_ci	if (!b_dlok)
16498c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
16508c2ecf20Sopenharmony_ci			"Set RSVD page location to Fw FAIL!!!!!!.\n");
16518c2ecf20Sopenharmony_ci}
16528c2ecf20Sopenharmony_ci
16538c2ecf20Sopenharmony_civoid rtl8821ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
16548c2ecf20Sopenharmony_ci				  bool b_dl_finished, bool dl_whole_packets)
16558c2ecf20Sopenharmony_ci{
16568c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
16578c2ecf20Sopenharmony_ci	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
16588c2ecf20Sopenharmony_ci	struct sk_buff *skb = NULL;
16598c2ecf20Sopenharmony_ci	u32 totalpacketlen;
16608c2ecf20Sopenharmony_ci	bool rtstatus;
16618c2ecf20Sopenharmony_ci	u8 u1rsvdpageloc[5] = { 0 };
16628c2ecf20Sopenharmony_ci	u8 u1rsvdpageloc2[7] = { 0 };
16638c2ecf20Sopenharmony_ci	bool b_dlok = false;
16648c2ecf20Sopenharmony_ci	u8 *beacon;
16658c2ecf20Sopenharmony_ci	u8 *p_pspoll;
16668c2ecf20Sopenharmony_ci	u8 *nullfunc;
16678c2ecf20Sopenharmony_ci	u8 *qosnull;
16688c2ecf20Sopenharmony_ci	u8 *btqosnull;
16698c2ecf20Sopenharmony_ci	u8 *arpresp;
16708c2ecf20Sopenharmony_ci
16718c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
16728c2ecf20Sopenharmony_ci	 *			(1) beacon
16738c2ecf20Sopenharmony_ci	 *---------------------------------------------------------
16748c2ecf20Sopenharmony_ci	 */
16758c2ecf20Sopenharmony_ci	beacon = &reserved_page_packet_8821[BEACON_PG * 256];
16768c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(beacon, mac->mac_addr);
16778c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(beacon, mac->bssid);
16788c2ecf20Sopenharmony_ci
16798c2ecf20Sopenharmony_ci	if (b_dl_finished) {
16808c2ecf20Sopenharmony_ci		totalpacketlen = 256 - 40;
16818c2ecf20Sopenharmony_ci		goto out;
16828c2ecf20Sopenharmony_ci	}
16838c2ecf20Sopenharmony_ci	/*-------------------------------------------------------
16848c2ecf20Sopenharmony_ci	 *			(2) ps-poll
16858c2ecf20Sopenharmony_ci	 *--------------------------------------------------------
16868c2ecf20Sopenharmony_ci	 */
16878c2ecf20Sopenharmony_ci	p_pspoll = &reserved_page_packet_8821[PSPOLL_PG * 256];
16888c2ecf20Sopenharmony_ci	SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000));
16898c2ecf20Sopenharmony_ci	SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid);
16908c2ecf20Sopenharmony_ci	SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr);
16918c2ecf20Sopenharmony_ci
16928c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG);
16938c2ecf20Sopenharmony_ci
16948c2ecf20Sopenharmony_ci	/*--------------------------------------------------------
16958c2ecf20Sopenharmony_ci	 *			(3) null data
16968c2ecf20Sopenharmony_ci	 *---------------------------------------------------------i
16978c2ecf20Sopenharmony_ci	 */
16988c2ecf20Sopenharmony_ci	nullfunc = &reserved_page_packet_8821[NULL_PG * 256];
16998c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(nullfunc, mac->bssid);
17008c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr);
17018c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid);
17028c2ecf20Sopenharmony_ci
17038c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG);
17048c2ecf20Sopenharmony_ci
17058c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
17068c2ecf20Sopenharmony_ci	 *			(4) Qos null data
17078c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
17088c2ecf20Sopenharmony_ci	 */
17098c2ecf20Sopenharmony_ci	qosnull = &reserved_page_packet_8821[QOSNULL_PG * 256];
17108c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(qosnull, mac->bssid);
17118c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(qosnull, mac->mac_addr);
17128c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(qosnull, mac->bssid);
17138c2ecf20Sopenharmony_ci
17148c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1rsvdpageloc, QOSNULL_PG);
17158c2ecf20Sopenharmony_ci
17168c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
17178c2ecf20Sopenharmony_ci	 *			(5) Qos null data
17188c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
17198c2ecf20Sopenharmony_ci	 */
17208c2ecf20Sopenharmony_ci	btqosnull = &reserved_page_packet_8821[BT_QOSNULL_PG * 256];
17218c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(btqosnull, mac->bssid);
17228c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(btqosnull, mac->mac_addr);
17238c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(btqosnull, mac->bssid);
17248c2ecf20Sopenharmony_ci
17258c2ecf20Sopenharmony_ci	SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1rsvdpageloc, BT_QOSNULL_PG);
17268c2ecf20Sopenharmony_ci
17278c2ecf20Sopenharmony_ci	if (!dl_whole_packets) {
17288c2ecf20Sopenharmony_ci		totalpacketlen = 256 * (BT_QOSNULL_PG + 1) - 40;
17298c2ecf20Sopenharmony_ci		goto out;
17308c2ecf20Sopenharmony_ci	}
17318c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
17328c2ecf20Sopenharmony_ci	 *			(6) ARP Resp
17338c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
17348c2ecf20Sopenharmony_ci	 */
17358c2ecf20Sopenharmony_ci	arpresp = &reserved_page_packet_8821[ARPRESP_PG * 256];
17368c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS1(arpresp, mac->bssid);
17378c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS2(arpresp, mac->mac_addr);
17388c2ecf20Sopenharmony_ci	SET_80211_HDR_ADDRESS3(arpresp, mac->bssid);
17398c2ecf20Sopenharmony_ci
17408c2ecf20Sopenharmony_ci	SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(u1rsvdpageloc2, ARPRESP_PG);
17418c2ecf20Sopenharmony_ci
17428c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
17438c2ecf20Sopenharmony_ci	 *			(7) Remote Wake Ctrl
17448c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
17458c2ecf20Sopenharmony_ci	 */
17468c2ecf20Sopenharmony_ci	SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(u1rsvdpageloc2,
17478c2ecf20Sopenharmony_ci									REMOTE_PG);
17488c2ecf20Sopenharmony_ci
17498c2ecf20Sopenharmony_ci	/*---------------------------------------------------------
17508c2ecf20Sopenharmony_ci	 *			(8) GTK Ext Memory
17518c2ecf20Sopenharmony_ci	 *----------------------------------------------------------
17528c2ecf20Sopenharmony_ci	 */
17538c2ecf20Sopenharmony_ci	SET_8821AE_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(u1rsvdpageloc2, GTKEXT_PG);
17548c2ecf20Sopenharmony_ci
17558c2ecf20Sopenharmony_ci	totalpacketlen = TOTAL_RESERVED_PKT_LEN_8821 - 40;
17568c2ecf20Sopenharmony_ci
17578c2ecf20Sopenharmony_ciout:
17588c2ecf20Sopenharmony_ci
17598c2ecf20Sopenharmony_ci	RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
17608c2ecf20Sopenharmony_ci		      "rtl8821ae_set_fw_rsvdpagepkt(): packet data\n",
17618c2ecf20Sopenharmony_ci		      &reserved_page_packet_8821[0], totalpacketlen);
17628c2ecf20Sopenharmony_ci
17638c2ecf20Sopenharmony_ci	skb = dev_alloc_skb(totalpacketlen);
17648c2ecf20Sopenharmony_ci	if (!skb)
17658c2ecf20Sopenharmony_ci		return;
17668c2ecf20Sopenharmony_ci	skb_put_data(skb, &reserved_page_packet_8821, totalpacketlen);
17678c2ecf20Sopenharmony_ci
17688c2ecf20Sopenharmony_ci	rtstatus = rtl_cmd_send_packet(hw, skb);
17698c2ecf20Sopenharmony_ci
17708c2ecf20Sopenharmony_ci	if (rtstatus)
17718c2ecf20Sopenharmony_ci		b_dlok = true;
17728c2ecf20Sopenharmony_ci
17738c2ecf20Sopenharmony_ci	if (!b_dl_finished && b_dlok) {
17748c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD,
17758c2ecf20Sopenharmony_ci			"Set RSVD page location to Fw.\n");
17768c2ecf20Sopenharmony_ci		RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
17778c2ecf20Sopenharmony_ci				"H2C_RSVDPAGE:\n", u1rsvdpageloc, 5);
17788c2ecf20Sopenharmony_ci		rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_RSVDPAGE,
17798c2ecf20Sopenharmony_ci				       sizeof(u1rsvdpageloc), u1rsvdpageloc);
17808c2ecf20Sopenharmony_ci		if (dl_whole_packets) {
17818c2ecf20Sopenharmony_ci			RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
17828c2ecf20Sopenharmony_ci				      "wowlan H2C_RSVDPAGE:\n",
17838c2ecf20Sopenharmony_ci				      u1rsvdpageloc2, 7);
17848c2ecf20Sopenharmony_ci			rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_AOAC_RSVDPAGE,
17858c2ecf20Sopenharmony_ci					       sizeof(u1rsvdpageloc2),
17868c2ecf20Sopenharmony_ci					       u1rsvdpageloc2);
17878c2ecf20Sopenharmony_ci		}
17888c2ecf20Sopenharmony_ci	}
17898c2ecf20Sopenharmony_ci
17908c2ecf20Sopenharmony_ci	if (!b_dlok) {
17918c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
17928c2ecf20Sopenharmony_ci			"Set RSVD page location to Fw FAIL!!!!!!.\n");
17938c2ecf20Sopenharmony_ci	}
17948c2ecf20Sopenharmony_ci}
17958c2ecf20Sopenharmony_ci
17968c2ecf20Sopenharmony_ci/*Should check FW support p2p or not.*/
17978c2ecf20Sopenharmony_cistatic void rtl8821ae_set_p2p_ctw_period_cmd(struct ieee80211_hw *hw, u8 ctwindow)
17988c2ecf20Sopenharmony_ci{
17998c2ecf20Sopenharmony_ci	u8 u1_ctwindow_period[1] = { ctwindow};
18008c2ecf20Sopenharmony_ci
18018c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw, H2C_8821AE_P2P_PS_CTW_CMD, 1,
18028c2ecf20Sopenharmony_ci			       u1_ctwindow_period);
18038c2ecf20Sopenharmony_ci}
18048c2ecf20Sopenharmony_ci
18058c2ecf20Sopenharmony_civoid rtl8821ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state)
18068c2ecf20Sopenharmony_ci{
18078c2ecf20Sopenharmony_ci	struct rtl_priv *rtlpriv = rtl_priv(hw);
18088c2ecf20Sopenharmony_ci	struct rtl_ps_ctl *rtlps = rtl_psc(rtl_priv(hw));
18098c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
18108c2ecf20Sopenharmony_ci	struct rtl_p2p_ps_info *p2pinfo = &rtlps->p2p_ps_info;
18118c2ecf20Sopenharmony_ci	struct p2p_ps_offload_t *p2p_ps_offload = &rtlhal->p2p_ps_offload;
18128c2ecf20Sopenharmony_ci	u8	i;
18138c2ecf20Sopenharmony_ci	u16	ctwindow;
18148c2ecf20Sopenharmony_ci	u32	start_time, tsf_low;
18158c2ecf20Sopenharmony_ci
18168c2ecf20Sopenharmony_ci	switch (p2p_ps_state) {
18178c2ecf20Sopenharmony_ci	case P2P_PS_DISABLE:
18188c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_DISABLE\n");
18198c2ecf20Sopenharmony_ci		memset(p2p_ps_offload, 0, sizeof(*p2p_ps_offload));
18208c2ecf20Sopenharmony_ci		break;
18218c2ecf20Sopenharmony_ci	case P2P_PS_ENABLE:
18228c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_ENABLE\n");
18238c2ecf20Sopenharmony_ci		/* update CTWindow value. */
18248c2ecf20Sopenharmony_ci		if (p2pinfo->ctwindow > 0) {
18258c2ecf20Sopenharmony_ci			p2p_ps_offload->ctwindow_en = 1;
18268c2ecf20Sopenharmony_ci			ctwindow = p2pinfo->ctwindow;
18278c2ecf20Sopenharmony_ci			rtl8821ae_set_p2p_ctw_period_cmd(hw, ctwindow);
18288c2ecf20Sopenharmony_ci		}
18298c2ecf20Sopenharmony_ci
18308c2ecf20Sopenharmony_ci		/* hw only support 2 set of NoA */
18318c2ecf20Sopenharmony_ci		for (i = 0 ; i < p2pinfo->noa_num ; i++) {
18328c2ecf20Sopenharmony_ci			/* To control the register setting for which NOA*/
18338c2ecf20Sopenharmony_ci			rtl_write_byte(rtlpriv, 0x5cf, (i << 4));
18348c2ecf20Sopenharmony_ci			if (i == 0)
18358c2ecf20Sopenharmony_ci				p2p_ps_offload->noa0_en = 1;
18368c2ecf20Sopenharmony_ci			else
18378c2ecf20Sopenharmony_ci				p2p_ps_offload->noa1_en = 1;
18388c2ecf20Sopenharmony_ci
18398c2ecf20Sopenharmony_ci			/* config P2P NoA Descriptor Register */
18408c2ecf20Sopenharmony_ci			rtl_write_dword(rtlpriv, 0x5E0, p2pinfo->noa_duration[i]);
18418c2ecf20Sopenharmony_ci			rtl_write_dword(rtlpriv, 0x5E4, p2pinfo->noa_interval[i]);
18428c2ecf20Sopenharmony_ci
18438c2ecf20Sopenharmony_ci			/*Get Current TSF value */
18448c2ecf20Sopenharmony_ci			tsf_low = rtl_read_dword(rtlpriv, REG_TSFTR);
18458c2ecf20Sopenharmony_ci
18468c2ecf20Sopenharmony_ci			start_time = p2pinfo->noa_start_time[i];
18478c2ecf20Sopenharmony_ci			if (p2pinfo->noa_count_type[i] != 1) {
18488c2ecf20Sopenharmony_ci				while (start_time <= (tsf_low+(50*1024))) {
18498c2ecf20Sopenharmony_ci					start_time += p2pinfo->noa_interval[i];
18508c2ecf20Sopenharmony_ci					if (p2pinfo->noa_count_type[i] != 255)
18518c2ecf20Sopenharmony_ci						p2pinfo->noa_count_type[i]--;
18528c2ecf20Sopenharmony_ci				}
18538c2ecf20Sopenharmony_ci			}
18548c2ecf20Sopenharmony_ci			rtl_write_dword(rtlpriv, 0x5E8, start_time);
18558c2ecf20Sopenharmony_ci			rtl_write_dword(rtlpriv, 0x5EC,
18568c2ecf20Sopenharmony_ci					p2pinfo->noa_count_type[i]);
18578c2ecf20Sopenharmony_ci		}
18588c2ecf20Sopenharmony_ci
18598c2ecf20Sopenharmony_ci		if ((p2pinfo->opp_ps == 1) || (p2pinfo->noa_num > 0)) {
18608c2ecf20Sopenharmony_ci			/* rst p2p circuit */
18618c2ecf20Sopenharmony_ci			rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, BIT(4));
18628c2ecf20Sopenharmony_ci
18638c2ecf20Sopenharmony_ci			p2p_ps_offload->offload_en = 1;
18648c2ecf20Sopenharmony_ci
18658c2ecf20Sopenharmony_ci			if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) {
18668c2ecf20Sopenharmony_ci				p2p_ps_offload->role = 1;
18678c2ecf20Sopenharmony_ci				p2p_ps_offload->allstasleep = 0;
18688c2ecf20Sopenharmony_ci			} else {
18698c2ecf20Sopenharmony_ci				p2p_ps_offload->role = 0;
18708c2ecf20Sopenharmony_ci			}
18718c2ecf20Sopenharmony_ci
18728c2ecf20Sopenharmony_ci			p2p_ps_offload->discovery = 0;
18738c2ecf20Sopenharmony_ci		}
18748c2ecf20Sopenharmony_ci		break;
18758c2ecf20Sopenharmony_ci	case P2P_PS_SCAN:
18768c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN\n");
18778c2ecf20Sopenharmony_ci		p2p_ps_offload->discovery = 1;
18788c2ecf20Sopenharmony_ci		break;
18798c2ecf20Sopenharmony_ci	case P2P_PS_SCAN_DONE:
18808c2ecf20Sopenharmony_ci		rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN_DONE\n");
18818c2ecf20Sopenharmony_ci		p2p_ps_offload->discovery = 0;
18828c2ecf20Sopenharmony_ci		p2pinfo->p2p_ps_state = P2P_PS_ENABLE;
18838c2ecf20Sopenharmony_ci		break;
18848c2ecf20Sopenharmony_ci	default:
18858c2ecf20Sopenharmony_ci		break;
18868c2ecf20Sopenharmony_ci	}
18878c2ecf20Sopenharmony_ci
18888c2ecf20Sopenharmony_ci	rtl8821ae_fill_h2c_cmd(hw,
18898c2ecf20Sopenharmony_ci			H2C_8821AE_P2P_PS_OFFLOAD, 1, (u8 *)p2p_ps_offload);
18908c2ecf20Sopenharmony_ci}
18918c2ecf20Sopenharmony_ci
18928c2ecf20Sopenharmony_civoid rtl8821ae_c2h_ra_report_handler(struct ieee80211_hw *hw,
18938c2ecf20Sopenharmony_ci				     u8 *cmd_buf, u8 cmd_len)
18948c2ecf20Sopenharmony_ci{
18958c2ecf20Sopenharmony_ci	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
18968c2ecf20Sopenharmony_ci	u8 rate = cmd_buf[0] & 0x3F;
18978c2ecf20Sopenharmony_ci
18988c2ecf20Sopenharmony_ci	rtlhal->current_ra_rate = rtl8821ae_hw_rate_to_mrate(hw, rate);
18998c2ecf20Sopenharmony_ci
19008c2ecf20Sopenharmony_ci	rtl8821ae_dm_update_init_rate(hw, rate);
19018c2ecf20Sopenharmony_ci}
1902